-
前情提要
本次需要完成正己大佬的 教程 Dome
的第四关
本次需要提前配置完成的有 java的环境配置
、adb的环境配置
、debug的权限开启
、log日志插庄
配置 java 环境
安装 java
双击安装包,下一步,点击更改安装地址点击
(1)
然后点击 (2)
切换到其他磁盘,选择相应的位置点击 (3)
创建文件夹
配置环境变量
在配置环境变量之前,先认识一下,下面三个变量的区别
|
|
|
---|---|---|
|
|
|
|
|
|
|
|
|
配置 JAVA_HOME
首先,复制 java的安装路径
打开设置 win+i
(快捷键)搜索环境变量
点击
新建
变量名JAVA
值java的安装路径
配置 path
同上面操作,不过新建对象变成编辑 Path
点击新建,粘贴
{java的安装路径}bin
并上移到最上面
配置 Classpath
略,我也不知道我需要啥类,目前就先不配置了
验证配置完成
win+r
(快捷键) 打开运行窗口,输入 cmd
输入
java -version
查看 java 的版本信息,如果有则配置完成
配置 adb 环境
adb 又称安卓调试桥,可以让用户在电脑上操作手机,本次动态调控需要用到 adb,我会在资源包中加上 adb 文件,只需要你将其拖到自己文件夹下,进行下面的环境配置
复制 adb.exe
所在文件路径,打开环境配置,编辑 Path
,值 adb.exe所在文件的路径
验证 adb 配置完成 win+R
(快捷键) 输入 cmd
输入命令 adb version
出现版本信息,则配置成功
[!NOTE] 注意
部分人的雷电模拟器使用的是绿色版本,版本会比较低,所以部分在使用 jeb 进行动态调试的时候找不到进程有部分原因是雷电模拟器的 adb. exe 和系统配置的 adb. exe 版本不一样。
jeb 进行 debug 调试的过程中很卡
当你出现这个问题的时候,可以来看一下,打开 jeb 文件,不管你用什么方法,修改文件名也好,打开 jeb_wincon.bat
文件,注意!不要双击,他是 jeb 的启动文件
注意第 (7)
行圈起来的代码 -Xss4M -Xmx800M
代表最小分配4Mb,最大分配800Mb,如果你内存够的话,也可以最大4G,反正我的4G 太卡
开启 debug 权限
根据正己大佬的文章,开启 debug 权限的方法一共有四个分别是
-
修改 AndroidManifest. xml -
使用XappDebug模块 -
Magisk命令(重启失效) -
刷入 MagiskHide Props Config 模块(永久有效) 方法一:修改 AndroidManifest. xml
使用 MT 管理器NP 管理器修改 AndroidManifest.xml
文件添加下面命令并保存安装
复制代码 隐藏代码android:debuggable="true"
方法二:使用 XappDebug 模块
首先,需要安装 XappDebug
,并在 LSP 中启用启用模块并勾选系统框架,最后,选择右上角的×重启虚拟机
打开 XappDebug,勾选测试软件,即可
log 日志插桩
这个方法比较快捷,不需要电脑,配置 java 环境什么的,在模拟器内部就可以了
定义:Log 插桩指的是反编译 APK 文件时,在对应的 smali 文件里,添加相应的 smali 代码,将程序中的关键信息,以 log 日志的形式进行输出。
实施过程
将 日志插桩.dex
文件放入雷电模拟器的共享文件夹
在 MT 管理器中,将日志插桩拖入,软件环境,并改名为 classes2.dex
对原有的 dex 文件,使用 dex++编辑器,搜索关键词找到最后,反应参数的位置
插入命令
复制代码 隐藏代码invoke-static {对应寄存器}, Lcom/mtools/LogUtils;->v(Ljava/lang/Object;)V
保存,退出并安装
在算法助手中,打开 log 监听
然后启动程序
完成的对程序运行一遍,然后关闭程序,会自动回到算法助手,打开日志
实施过程
任务一:教程 Dome
第四关任务是输入正确密钥
启动 jeb 软件
将打开 jeb 文件夹双击 jeb_wincon.bat
文件
目前有两种方法,一种是直接将调试软件拖入 jeb 中,一种是在 jeb 中点击右上角 文件
-> 打开文件
然后一直确定就可以了
点击 Quick Search
,搜索关键词 密钥
,等待搜索结果,点击搜索结果
这是一份 smali 格式的代码,可以利用 MT 管理器自带的 smali指令查询
查找意思
分析代码
下面是阅读代码的过程
ChallengeFourth->check(String)Z, p0, p1
的意思:是在 ChallengeFourth
类里找到了一个叫 check
的方法,这个方法需要一个字符串作为输入,当你调用这个方法时,它会返回一个布尔值(true 或 false)。
点击进入 check
方法,右键,点击 解析
当光标在哪,解析
以后会自动跳转到对应位置
观察 java 代码,分析,找出对应位置分析代码可以得到,密钥的固定格式为 flag{*******}
,当首字符和尾字符匹配的时候,跳转到 2A
2A
右键,解析,跳转到对应的 java
分析上下文代码意思,根据跳转跳到最后位置看看
发现在箭头指向的位置,如果是返回值,那么它的上面 Base64Utils
可以返回对应的值
将光标至于箭头位置,ctrl+b
(快捷键) 添加断点
开启 adb 调试
win+R
(快捷键)输入 cmd
命令
复制代码 隐藏代码adb shell am start -D -n com.zj.wuaipojie/.ui.MainActivity
com.zj.wuaipojie/.ui.MainActivity
实际上就是 Activity,只不过在包名后面加上了 /
, 不同的 Activity,进入调试界面后会自动跳转该 Activity
[!NOTE] 注意
部分人输入完命令后,模拟器会自动重启,可能会卡住,手动重启再输入命令即可 如果没有进入这个界面,卡在中间,再输入一次命令即可
输入命令后会进入下面这个界面
开启调试
回到 jeb 打开工具栏的调试按钮
确保设备,进程都存在,然后点击 附上
将新出现的界面调整为 VM/局部变量
回到模拟器,等待进入程序
在密钥区输入 flag{***}
, 点击验证,没有任何反应是正常的,如果提示密钥错误,那么固定格式是错的,点击完验证,回到 jeb
首先点击 进入
,进入 encodeToString
方法中,然后点击 跳过
移动到 p1
再点击 进入
,移动到返回值,会观察到局部变量已经出现了一个字符串,复制字符串,这个就是密钥
验证结果
· 今 日 推 荐 ·
本文内容来自吾爱破解,如有侵权请联系删除
原文始发于微信公众号(逆向有你):安卓逆向 -- 动态调试与Log插桩
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论