安卓相关环境配置

安卓相关环境配置

偶尔更新。。。

JEB(动态调试好用)

JEB动态调试Smali-真机/模拟器(详细,新手必看) 夜步城

JADX官网(静态分析)

https://github.com/skylot/jadx/releases/tag/v1.5.0

雷电模拟器自己去官网下

Magisk 面具

https://www.52pojie.cn/thread-1583586-1-1.html

LSPosed官网

https://github.com/LSPosed/LSPosed/releases/download/v1.8.6/LSPosed-v1.8.6-6712-zygisk-release.zip

MT管理器(吾爱破解论坛里搜)

adb (记得加环境变量)

https://developer.android.google.cn/tools/releases/platform-tools?hl=zh-cn#downloads

android studio(不太行,甚至打不开xml文件,环境难配)

https://developer.android.google.cn/studio?hl=zh-cn

吐槽一下插件套娃:Magisk->LSPosed->核心破解

文章目录

  • 安卓相关环境配置
    • 1. 模拟器环境配置
    • 2. 小概念
    • 3. smali语法
    • 4. 使用JEB进行动态调试
    • 5. debug模式调试
    • 参考

1. 模拟器环境配置

雷电模拟器9,设置把root权限开一下,然后重启

在这里插入图片描述

磁盘共享(可写入)

在这里插入图片描述

将magisk安装目录里的app-debug.apk拖入模拟器中。

点击magisk->永久记住选择->安装->允许

点击右下角的正方形按钮,然后中间向左拖动退回关掉。

在这里插入图片描述

点击magisk->安装->下一步->安装至系统分区->开始

然后重启雷电模拟器,进magisk设置,把Zygisk开启

更多->共享文件->打开电脑文件夹

在这里插入图片描述

把下载好的LSPosed.zip文件拖进共享文件夹

在这里插入图片描述

magisk点击右下角模块->从本地安装->选择Picture目录下的LSPosed.zip进行安装

在这里插入图片描述

重启雷电模拟器,下拉状态栏,打开LSPosed管理器

在这里插入图片描述

在LSPosed仓库里下载核心破解(MT管理器改了xml后,apk不用验证签名就可以安装)。

若模拟器没挂代理,则把网址复制一下,在主机访问进行下载,再把安装包拖进模拟器。

模拟器安装核心破解后,需要启动核心破解模块,然后重新启动。

2. 小概念

详见正己佬的视频

apk 全称 Android Package,它相当于一个压缩文件,只要在电脑上将apk后缀改为zip即可解压。

classes.dex是APK运行的主要逻辑。

Dalvik是Google专门为Android设计的一个虚拟机,Dalvik有专属的文件执行格式dex(Dalvik executable)

Art(Android Runtime)相当于Dalvik的升级版,本质与Dalvik无异

安卓四大组件

组件描述
Activity(活动)在应用中的一个Activity可以用来表示一个界面,意思可以理解为“活动”,即一个活动开始,代表 Activity组件启动,活动结束,代表一个Activity的生命周期结束。一个Android应用必须通过Activity来运行和启动,Activity的生命周期交给系统统一管理。
Service(服务)Service它可以在后台执行长时间运行操作而没有用户界面的应用组件,不依赖任何用户界面,例如后台播放音乐,后台下载文件等。
Broadcast Receiver(广播接收器)一个用于接收广播信息,并做出对应处理的组件。比如我们常见的系统广播:通知时区改变、电量低、用户改变了语言选项等。
Content Provider(内容提供者)作为应用程序之间唯一的共享数据的途径,Content Provider主要的功能就是存储并检索数据以及向其他应用程序提供访问数据的接口。Android内置的许多数据都是使用Content Provider形式,供开发者调用的(如视频,音频,图片,通讯录等)

3. smali语法

smali是Dalvik的寄存器语言,smali代码是dex反编译而来的。类似汇编

关键字

名称注释
.class类名
.super父类名,继承的上级类名名称
.source源名
.field变量
.method方法名
.local v0,"bytes":[B定义局部变量v0为字节数组,"bytes"是局部变量的名称(调试时有用)
.register寄存器
.end method方法名的结束
public公有
protected半公开,只有同一家人才能用
private私有,只能自己使用
.parameter方法参数
.prologue方法开始
.line xxx位于第xxx行

数据类型对应

smali类型java类型注释
Vvoid无返回值
Zboolean布尔值类型,返回0或1
Bbyte字节类型,返回字节
Sshort短整数类型,返回数字
Cchar字符类型,返回字符
Iint整数类型,返回数字
Jlong (64位 需要2个寄存器存储)长整数类型,返回数字
Ffloat单浮点类型,返回数字
Ddouble (64位 需要2个寄存器存储)双浮点类型,返回数字
stringString文本类型,返回字符串
Lxxx/xxx/xxxobject对象类型,返回对象
[Iint[]int数组
[[Iint[][]二维整型数组
[Ljava/lang/StringString对象数组

常用指令

关键字注释
const重写整数属性,真假属性内容,只能是数字类型,const/4为4bit数字
const-string重写字符串内容
const-wide重写长整数类型,多用于修改到期时间。
return返回指令
if-eq全称equal(a=b),比较寄存器ab内容,相同则跳
if-ne全称not equal(a!=b),ab内容不相同则跳
if-eqz全称equal zero(a=0),z即是0的标记,a等于0则跳
if-nez全称not equal zero(a!=0),a不等于0则跳
if-ge全称greater equal(a>=b),a大于或等于则跳
if-le全称little equal(a<=b),a小于或等于则跳
goto强制跳到指定位置
switch分支跳转,一般会有多个分支线,并根据指令跳转到适当位置
iget获取寄存器数据

调用方法

invoke-virtual {v0, v1}, Ljava/lang/String;->length()I
//调用`v0`对象的实例方法`length()`,传参为`v1`,返回值类型为`Int`

invoke-super {v0, v1}, Ljava/lang/Object;->toString()Ljava/lang/String;
//v0重写了Object类的toString方法,这里调用了Object类原本的toString方法

invoke-direct {v0}, Lcom/example/MyClass;-><init>()V
//调用实例的私有方法、构造方法或者父类的私有方法
    
invoke-static {}, Ljava/lang/Math;->random()D
//调用静态方法,由于静态方法属于类而非类的实例,因此调用时不需要对象引用。

invoke-interface {v0}, Ljava/util/List;->size()I
//v0是实现了List接口的对象的引用,调用List接口中的方法size()

invoke-custom {v0, v1}, Ljava/lang/invoke/LambdaMetafactory;->metafactory(...)Ljava/lang/invoke/CallSite;
//用于动态绑定方法调用

结果处理

invoke-virtual {p0}, Ljava/lang/Object;->toString()Ljava/lang/String;
move-result-object v0
//将这个返回的字符串对象引用移动到寄存器v0中
    
move-result v0
//将前一个函数调用返回的基本数据类型的结果移动到指定的寄存器中。

const/4 v1, 0x5
move v0, v1  //将v1中的值0x5移动到v0中

​ 在smali里的所有操作都必须经过寄存器来进行:本地寄存器用v开头数字结尾的符号来表示,如v0、 v1、v2。 参数寄存器则使用p开头数字结尾的符号来表示,如p0、p1、p2。特别注意的是,p0不一定是函数中的第一个参数,在非static函数中,p0代指“this",p1表示函数的第一个 参数,p2代表函数中的第二个参数。而在static函数中p0才对应第一个参数(因为Java的static方法中没有this方法)

4. 使用JEB进行动态调试

想要动态调试,首先得修改debug权限

​ 法一:在AndroidManifest.xml里添加可调试权限

android:debuggable="true"

在这里插入图片描述

​ 法二:XappDebug模块hook对应的app

​ 法三:Magisk命令(重启失效)

1.  adb shell #adb进入命令行模式
2.  su #切换至超级用户
3.  magisk resetprop ro.debuggable 1
4.  stop;start; #一定要通过该方式重启

自行下载吾爱破解第五课的课后作业

安装配置好JEB

shift+鼠标滚轮	代码横向滚动
Ctrl+B	打断点
Tab 根据java代码找到smali代码所在处

jadx全局搜索无效后,全局搜索unsuccessed,追踪onClick函数

在这里插入图片描述

在这里插入图片描述

jadx追踪checkSN

private boolean checkSN(String userName, String sn) {  
    // 如果用户名为空,直接返回false  
    if(userName == null) {  
        return false;  
    }  
  
    try {  
        // 检查用户名非空且SN非空且长度为16  
        if(userName.length() != 0 && (sn != null && sn.length() == 16)) {  
            // 获取MD5 MessageDigest实例  
            MessageDigest digest = MessageDigest.getInstance("MD5");  
            digest.reset();//注意:reset()在这里实际上是多余的,因为每次new MessageDigest实例时,它都是初始化的 
            digest.update(userName.getBytes()); // 这里使用默认字符集编码,可能在不同环境中导致不同结果  
              
            // 将字节数组转换为十六进制字符串  
            String hexstr = MainActivity.toHexString(digest.digest(), "");  
              
            // 尝试将十六进制字符串转换为字符数组
            StringBuilder sb = new StringBuilder();  
            int i;  
            for(i = 0; true; i += 2) { // 无限循环,直到i超出hexstr长度  
                if(i >= hexstr.length()) {  
                    // 这里应该是比较整个转换后的字符串与sn  
                    return sb.toString().equalsIgnoreCase(sn);  
                }  
                // 这里直接将单个十六进制字符转换为字符,而不是每两个十六进制字符转换为一个字节的字符
                sb.append(((char)hexstr.charAt(i))); //(char)会将十六进制字符转换为ASCII字符  
            }  
        }  
    }  
    catch(NoSuchAlgorithmException e) {  
        // MD5算法通常总是可用的,这里的catch块可能永远不会执行  
        e.printStackTrace();  
    }  
    // 如果没有匹配,返回false  
    return false;  
}

在这里插入图片描述

JEB反编译一下并找到return sb.toString().equalsIgnoreCase(sn); 的位置,按Tab键,使左侧smali代码跟踪到该函数位置,然后Ctrl+B打断点。

在这里插入图片描述

雷电模拟器启动apk程序,JEB附加进程调试

在这里插入图片描述

程序输入用户名,注册码(必须16位),点击注册

在这里插入图片描述

JEB查看v5寄存器的值,实际就是注册的sn码。

在这里插入图片描述

a96fa7cd071995a2

在这里插入图片描述

5. debug模式调试

  • **普通模式:**无法调试界面的 创建,即 onCreate 函数
  • **debug 模式:**可以调试 界面的 onCreate 函数,即刚开始创建界面是就开始调试

下载攻防世界android-app-100的附件。

模拟器设置里面,版本号点击7次以上进入开发者模式。

系统->高级->开发者选项->打开USB调试

模拟器MT管理器->安装包提取->查看附件安装包->修改AndroidManifest.xml

加上android:debuggable="true"

在这里插入图片描述

可以选择不签名,然后虽然校验不通过,但是可以安装(已经核心破解)。

把修改后的安装包通过共享文件夹的方式传到主机。

jadx查看应用程序包名/应用程序入口界面,因为MT没充会员,xml与真实的有出入。

在这里插入图片描述

主机开启cmd

adb shell am start -D  -n 应用程序包名/应用程序入口界面
adb shell am start -D -n com.example.ctf2/.MainActivity

然后模拟器打开程序,JEB附加调试

在这里插入图片描述

在这里插入图片描述

然后在输入框输入东西,再点login就会断在断点处。

但是这题IsCorrect函数在运行时加载,没法步入函数,需要IDA打开libadnjni.so才能看到逻辑。

在这里插入图片描述

是个字符串比较函数

ef57f3fe3cf603c03890ee588878c0ec就是注册码

参考

  1. 吾爱破解安卓逆向入门教程《安卓逆向这档事》一、模拟器环境搭建

  2. 《安卓逆向这档事》二、初识APK文件结构、双开、汉化、基础修 正己

  3. 最新Windows安装adb方法 飞⑧风暴

  4. JEB动态调试Smali-真机/模拟器(详细,新手必看) 夜步城

  5. Smali基础语法总结 bmjoker

  6. 安卓逆向_5 — jeb 和 AndroidStudio 动态调试 smali 擒贼先擒王

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/870581.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式软件--模电基础 DAY 2

强电和弱电&#xff0c;简单一点是以电死人为标准的&#xff0c;交流电36伏特以下&#xff0c;直流电24V以下&#xff0c;为安全电压&#xff0c;是为弱电&#xff0c;反则强电。 市电进入家庭&#xff0c;连接你的电脑&#xff0c;220V的电压为什么没有让你感到危险&#xff…

怎么屏蔽电脑监控软件?企业管理者的智慧选择——精准定位,合理屏蔽,让监控软件成为助力而非障碍!

电脑监控软件在企业管理中扮演着日益重要的角色&#xff0c;它们能够提升工作效率、保障信息安全、预防内部风险。然而&#xff0c;过度或不当使用监控软件也可能引发员工隐私担忧&#xff0c;影响工作积极性和团队氛围。因此&#xff0c;作为企业管理者&#xff0c;如何精准定…

论文创新大杀器!LSTM结合UNet,性能突出,涨点显著

最近&#xff0c;浙大等团队提出了xLSTM-UNet&#xff0c;通过将U-Mamba中的Mamba换成xLSTM&#xff0c;就可以直接提升2D和3D医学图像分割性能&#xff0c;涨点效果显著&#xff01; xLSTM-UNet是一种结合了LSTM和UNet的混合网络模型&#xff0c;这类模型保留了UNet出色的空间…

迭代器失效

一、什么是迭代器失效 迭代器的主要作用就是让算法能够不用关心底层数据结构&#xff0c;其底层实际就是一个指针&#xff0c;或者是对指针进行了封装&#xff0c;比如&#xff1a;vector的迭代器就是原生态指针T* 。因此迭代器失效&#xff0c;实际就是迭代器底层对应指针所指…

数据埋点系列 17| 预测分析和预测模型:用数据洞察未来

在数据驱动的决策时代&#xff0c;预测分析和预测模型已成为组织的重要战略工具。通过分析历史数据&#xff0c;我们可以预测未来趋势&#xff0c;做出更明智的决策。本文将深入探讨预测分析的核心概念、常用技术和实际应用。 目录 1. 预测分析的基础1.1 预测分析的类型 2. 高…

Unity与UE,哪种游戏引擎适合你?

PlayStation vs Xbox&#xff0c;Mario vs Sonic&#xff0c;Unreal vs Unity&#xff1f;无论是游戏主机、角色还是游戏引擎&#xff0c;人们总是热衷于捍卫他们在游戏行业中的偏爱。 专注于游戏引擎&#xff0c;Unity和Unreal Engine&#xff08;简称UE4&#xff09;是目前市…

C++:平衡二叉搜索树之红黑树

一、红黑树的概念 红黑树&#xff0c; 和AVL都是二叉搜索树&#xff0c; 红黑树通过在每个节点上增加一个储存位表示节点的颜色&#xff0c; 可以是RED或者BLACK&#xff0c; 通过任何一条从根到叶子的路径上各个节点着色方式的限制&#xff0c;红黑树能够确保没有一条路径会比…

C++ 11相关新特性(lambda表达式与function包装器)

目录 lambda表达式 引入 lambda表达式介绍 lambda表达式捕捉列表的传递形式 lambda表达式的原理 包装器 包装器的基本使用 包装器与重载函数 包装器的使用 绑定 C 11 新特性 lambda表达式 引入 在C 98中&#xff0c;对于sort函数来说&#xff0c;如果需要根据不同的比较方式实现…

超网和无类间路由是什么?

​一、超网概述 超网是将多个连续的网络地址组合成一个增加的网络地址的技术。常用于减少路由器的路由表大小&#xff0c;网络的可扩展性。通过合并连续的子网&#xff0c;超网可以减少路由入侵的数量&#xff0c;从而提高网络的效率。 超网的实现基于合并多个具有连续IP地址…

【vue教程】五. Vue 的路由管理

目录 往期列表本章涵盖知识点回顾Vue Router 的基本概念什么是 Vue Router&#xff1f;为什么需要 Vue Router&#xff1f; 路由的配置和使用安装 Vue Router创建路由在 Vue 实例中使用路由模板中的路由链接 动态路由和嵌套路由动态路由嵌套路由 路由守卫什么是路由守卫&#x…

HarmonyOS应用三之组件生命周期和参数传递

目录&#xff1a; 1、生命周期的执行顺序2、页面数据传递3、图片的读取4、数据的备份和恢复5、轮播图6、页面布局图 1、生命周期的执行顺序 /** Copyright (c) 2023 Huawei Device Co., Ltd.* Licensed under the Apache License, Version 2.0 (the "License");* yo…

微服务架构设计中的常见的10种设计模式

微服务架构设计的概念 微服务架构&#xff08;Microservices Architecture&#xff09;是一种用于构建分布式系统的软件设计模式。它将大型应用程序拆分成一组小型、自治的服务&#xff0c;每个服务都运行在其独立的进程中&#xff0c;服务之间通过轻量级的通信机制&#xff08…

Nginx 核心配置详解

章节 1 NGINX 的源码安装 2 NGINX 核心配置详解 3 NGINX 之 location 匹配优先级 4 NGINX 基础参数与功能 目录 1 配置文件说明 1.1 nginx 配置文件格式说明 1.2 Nginx 主配置文件的配置指令方式&#xff1a; 1.3 主配置文件结构&#xff1a;四部分 1.4 nginx 文件作用解…

使用Python编写AI程序,让机器变得更智能

人工智能&#xff08;AI&#xff09;是当今科技领域最热门的话题之一。随着Python编程语言的逐渐流行&#xff0c;它已经成为许多人工智能编程的首选语言。本文将介绍如何使用Python编写AI程序&#xff0c;让机器变得更智能。 首先&#xff0c;Python提供了大量的AI库和工具&a…

10、stm32实现adc读取数据

一、配置 二、代码 /* USER CODE BEGIN 2 */OLED_Init();OLED_Clear();OLED_ShowString(0,0,"Hello adc",12,0);uint16_t adc_number 0;/* USER CODE END 2 *//* USER CODE BEGIN WHILE */while (1){HAL_ADC_Start(&hadc1);HAL_ADC_PollForConversion(&hadc1…

SQL实战

学习视频&#xff1a;【课程2.0】SQL从入门到实战|云端数据库搭建|Excel&Tableau连接数据库_哔哩哔哩_bilibili 由于我学习过SQL&#xff0c;所以直接记录一些函数、特殊用法、刷题等实战的知识&#xff0c;后面教学搭建云端数据库和其他软件连接数据库视频讲解很清晰&…

华为AR1220配置GRE隧道

1.GRE隧道的配置 GRE隧道的配置过程,包括设置接口IP地址、配置GRE隧道接口和参数、配置静态路由以及测试隧道连通性。GRE隧道作为一种标准协议,支持多协议传输,但不提供加密,并且可能导致CPU资源消耗大和调试复杂等问题。本文采用华为AR1220路由器来示例说明。 配置…

C语言家教记录(六)

导语 本次授课的内容如下&#xff1a;指针&#xff0c;指针和数组 辅助教材为 《C语言程序设计现代方法&#xff08;第2版&#xff09;》 指针 指针变量 计算机按字节划分地址&#xff0c;每个地址访问一个字节 指针变量指向变量的地址&#xff0c;指的是变量第一个字节的…

ElasticSearch读写性能调优

文章目录 ES写入数据过程ES读取数据的过程写数据底层原理提升集群读取性能数据建模优化分片 提升写入性能的方法服务器端优化写入性能建模时的优化降低Translog写磁盘的频率&#xff0c;但是会降低容灾能力分片设定调整Bulk 线程池和队列 ES写入数据过程 客户端选择一个node发…

记录一次搭建uniapp-vue3的基础项目

1.使用 HBuilder X 创建uniapp vue3的基础项目 2.安装 自动导包插件 unplugin-auto-import npm install unplugin-auto-import或者 pnpm install unplugin-auto-import2.1 根目录下创建 vite.config.js 复制粘贴以下内容 import { defineConfig } from vite import uni fro…