基于《安卓逆向这档事》其五动态调试与Log插桩
```toc```
# 描述
来源于吾爱破解论坛正己大佬的《安卓逆向这档事》五、1000-7=?&动态调试&Log插桩,根据大佬的技术贴,个人的学习过程
****
## 资源链接
1. 工具: https://pan.baidu.com/s/1k4j_XJ3aESa48ZT_eL9VyA?pwd=52pj 提取码: 52pj
2. 视频: 暂无(后续会把链接放到评论区,也可以从上个文章的视频链接观看合集
3. 《安卓逆向这档事》五动态调试&Log插桩 https://www.52pojie.cn/thread-1714727-1-1.html
****
## 工具
1. 教程 Demo
2. MT 管理器
3. 核心破解器
4. adb
5. XappDebug
6. 算法助手
7. 雷电模拟器
****
## 课程任务
1. 完成关卡四
****
# 实现过程
## 前情提要
本次需要完成正己大佬的 `教程 Dome` 的第四关
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-23%2021:34:08-125.webp)
****
本次需要提前配置完成的有 `java的环境配置`、`adb的环境配置`、`debug的权限开启`、`log日志插庄`
#### 配置 java 环境
##### 安装 java
双击安装包,下一步,点击更改安装地址
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-23%2010:02:31-934.webp)
点击 `(1)` 然后点击 `(2)` 切换到其他磁盘,选择相应的位置点击 `(3)` 创建文件夹
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-23%2010:21:20-333.webp)
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-23%2010:38:47-119.webp)
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-23%2010:39:32-433.webp)
****
##### 配置环境变量
在配置环境变量之前,先认识一下,下面三个变量的区别
| 环境变量 | 含义 | 作用 |
| --------- | ---------------- | ----------------------------------------------- |
| JAVA_HOME | 指向JDK的安装目录 | 帮助系统和其他Java程序找到JDK的安装位置,方便配置其他Java相关环境变量,如Path。 |
| path | 包含系统可执行文件路径的环境变量 | 使系统在任何路径下都能识别并找到Java命令,如java、javac等。 |
| classpath | Java虚拟机搜索类和包的位置| 指定Java虚拟机查找用户自定义类和包的路径,确保java命令能识别到所需的类。 |
****
##### 配置 JAVA_HOME
首先,复制 `java的安装路径` 打开设置`win+i` (快捷键)搜索 `环境变量`
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-23%2010:48:37-324.webp)
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-23%2010:47:29-680.webp)
点击 `新建` 变量名 `JAVA` 值 `java的安装路径`
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-23%2010:49:15-522.webp)
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-23%2010:50:47-574.webp)
****
##### 配置 path
同上面操作,不过新建对象变成编辑 `Path`
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-23%2020:10:42-737.webp)
点击新建,粘贴 `{java的安装路径}\bin` 并上移到最上面
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-23%2020:13:13-485.webp)
****
##### 配置 Classpath
略,我也不知道我需要啥类,目前就先不配置了
****
##### 验证配置完成
`win+r` (快捷键) 打开运行窗口,输入 `cmd`
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-23%2010:52:14-696.webp)
输入 `java -version` 查看 java 的版本信息,如果有则配置完成
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-23%2010:53:25-550.webp)
****
### 配置 adb 环境
adb 又称安卓调试桥,可以让用户在电脑上操作手机,本次动态调控需要用到 adb,我会在资源包中加上 adb 文件,只需要你将其拖到自己文件夹下,进行下面的环境配置
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-23%2020:16:49-995.webp)
****
复制 `adb.exe` 所在文件路径,打开环境配置,编辑 `Path`,值 `adb.exe所在文件的路径`
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-23%2020:21:22-019.webp)
****
验证 adb 配置完成 `win+R` (快捷键) 输入 `cmd`
输入命令 `adb version` 出现版本信息,则配置成功
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-23%2020:23:48-122.webp)
> [!NOTE] 注意
>
> 部分人的雷电模拟器使用的是绿色版本,版本会比较低,所以部分在使用 jeb 进行动态调试的时候找不到进程有部分原因是雷电模拟器的 adb. exe 和系统配置的 adb. exe 版本不一样。
****
### jeb 进行 debug 调试的过程中很卡
当你出现这个问题的时候,可以来看一下,打开 jeb 文件,不管你用什么方法,修改文件名也好,打开 `jeb_wincon.bat` 文件,**注意!不要双击,他是 jeb 的启动文件**
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-23%2020:32:13-748.webp)
****
注意第 `(7)` 行圈起来的代码 `-Xss4M -Xmx800M` 代表最小分配4Mb,最大分配800Mb,如果你内存够的话,也可以最大4G,反正我的4G 太卡
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-23%2020:37:20-834.webp)
****
### 开启 debug 权限
根据正己大佬的文章,开启 debug 权限的方法一共有四个分别是
1. 修改 AndroidManifest. xml
2. 使用XappDebug模块
3. Magisk命令(重启失效)
4. 刷入 MagiskHide Props Config 模块(永久有效)
****
#### 方法一:修改 AndroidManifest. xml
使用 MT 管理器\NP 管理器修改 `AndroidManifest.xml` 文件添加下面命令并保存安装
```
android:debuggable="true"
```
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-23%2020:57:15-614.webp)
****
#### 方法二:使用 XappDebug 模块
首先,需要安装 `XappDebug`,并在 LSP 中启用
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-23%2021:24:56-656.webp)
启用模块并勾选系统框架,最后,选择右上角的×重启虚拟机
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-23%2021:26:12-681.webp)
****
打开 XappDebug,勾选测试软件,即可
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-23%2021:28:20-104.webp)
****
### log 日志插桩
这个方法比较快捷,不需要电脑,配置 java 环境什么的,在模拟器内部就可以了
定义:Log 插桩指的是反编译 APK 文件时,在对应的 smali 文件里,添加相应的 smali 代码,将程序中的关键信息,以 log 日志的形式进行输出。
#### 实施过程
将 `日志插桩.dex` 文件放入雷电模拟器的共享文件夹
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-24%2015:37:42-954.webp)
在 MT 管理器中,将日志插桩拖入,软件环境,并改名为 `classes2.dex`
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-24%2015:38:44-374.webp)
****
对原有的 dex 文件,使用 dex++编辑器,搜索关键词
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-24%2015:41:21-657.webp)
找到最后,反应参数的位置
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-24%2015:44:35-618.webp)
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-24%2015:45:12-053.webp)
****
插入命令
```
invoke-static {对应寄存器}, Lcom/mtools/LogUtils;->v(Ljava/lang/Object;)V
```
保存,退出并安装
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-24%2015:46:58-476.webp)
****
在算法助手中,打开 `log 监听` 然后启动程序
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-24%2015:50:56-679.webp)
****
完成的对程序运行一遍,然后关闭程序,会自动回到算法助手,打开日志
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-24%2015:56:56-963.webp)
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-24%2015:58:46-010.webp)
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-24%2015:59:22-188.webp)
****
## 实施过程
### 任务一:教程 Dome
第四关任务是输入正确密钥
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-23%2021:42:15-921.webp)
****
#### 启动 jeb 软件
将打开 jeb 文件夹双击 `jeb_wincon.bat` 文件
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-23%2021:43:29-398.webp)
****
目前有两种方法,一种是直接将调试软件拖入 jeb 中,一种是在 jeb 中点击右上角 `文件` -> `打开文件`
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-23%2021:47:23-447.webp)
****
然后一直确定就可以了
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-23%2021:48:37-806.webp)
****
点击 `Quick Search`,搜索关键词 `密钥`,等待搜索结果,点击搜索结果
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-23%2021:51:09-639.webp)
****
这是一份 smali 格式的代码,可以利用 MT 管理器自带的 `smali指令查询` 查找意思
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-23%2021:53:11-990.webp)
****
#### 分析代码
下面是阅读代码的过程
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-24%2010:58:05-902.webp)
`ChallengeFourth->check(String)Z, p0, p1` 的意思:是在 `ChallengeFourth` 类里找到了一个叫 `check` 的方法,这个方法需要一个字符串作为输入,当你调用这个方法时,它会返回一个布尔值(true 或 false)。
****
点击进入 `check` 方法,右键,点击 `解析`
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-24%2013:41:26-871.webp)
当光标在哪,`解析` 以后会自动跳转到对应位置
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-24%2013:52:10-216.webp)
****
观察 java 代码,分析,找出对应位置
分析代码可以得到,密钥的固定格式为 `flag{*******}`,当首字符和尾字符匹配的时候,跳转到 `2A`
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-24%2014:05:33-452.webp)
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-24%2014:06:48-230.webp)
****
`2A`
右键,解析,跳转到对应的 java
分析上下文代码意思,根据跳转跳到最后位置看看
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-24%2014:33:36-493.webp)
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-24%2014:35:09-125.webp)
****
发现在箭头指向的位置,如果是返回值,那么它的上面 `Base64Utils` 可以返回对应的值
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-24%2015:00:40-465.webp)
****
将光标至于箭头位置,`ctrl+b` (快捷键) 添加断点
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-24%2015:03:25-807.webp)
****
#### 开启 adb 调试
`win+R ` (快捷键)输入 ` cmd ` 命令
```adb
adb shell am start -D -n com.zj.wuaipojie/.ui.MainActivity
```
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-24%2015:06:02-924.webp)
`com.zj.wuaipojie/.ui.MainActivity` 实际上就是 Activity,只不过在包名后面加上了 `/`, 不同的 Activity,进入调试界面后会自动跳转该 Activity
> [!NOTE] 注意
> 1. 部分人输入完命令后,模拟器会自动重启,可能会卡住,手动重启再输入命令即可
> 2. 如果没有进入这个界面,卡在中间,再输入一次命令即可
>
输入命令后会进入下面这个界面
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-23%2021:38:25-242.webp)
****
#### 开启调试
回到 jeb 打开工具栏的调试按钮
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-24%2015:07:01-387.webp)
确保设备,进程都存在,然后点击 `附上`
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-24%2015:08:19-464.webp)
****
将新出现的界面调整为 `VM/局部变量`
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-24%2015:09:53-696.webp)
****
回到模拟器,等待进入程序
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-24%2015:11:30-763.webp)
****
在密钥区输入 `flag{***}`, 点击验证,没有任何反应是正常的,如果提示密钥错误,那么固定格式是错的,点击完验证,回到 jeb
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-24%2015:12:17-693.webp)
****
首先点击 `进入`,进入 `encodeToString` 方法中,然后点击 `跳过` 移动到 `p1`
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-24%2015:16:16-594.webp)
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-24%2015:19:21-703.webp)
****
再点击 `进入`,移动到返回值,会观察到局部变量已经出现了一个字符串,复制字符串,这个就是密钥
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-24%2015:20:54-999.webp)
#### 验证结果
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-24%2015:26:39-844.webp)
****
# 总结
我想问问还有没有其他的动态调试软件,jeb 把我卡飞了 大佬厉害 AS也可以动态调试 正己 发表于 2025-1-24 23:01
AS也可以动态调试
ok,谢谢大佬,我去看看 学习委员,优秀 基于《安卓逆向这档事》其五动态调试与Log插桩 ,值得我们学习 大佬好厉害 Set breakpoint on bytecode=Lcom/zj/wuaipojie/ui/ChallengeFourth;.check(Ljava/lang/String;)Z:112. Class is not loaded
设置好断点后,在JEB中报错。 KingDan25 发表于 2025-3-10 01:19
Set breakpoint on bytecode=Lcom/zj/wuaipojie/ui/ChallengeFourth;.check(Ljava/l ...
这我也不知道,动态调试我电脑有点带不动 有几种动态调试方法?有大佬总结一下?学习学习
页:
[1]