学习吾爱破解论坛正己的《安卓逆向这档事》的笔记,视频和配套工具可以去课程主页获取:。
工具
雷电模拟器
教程Demo
MT管理器/NP管理器
jeb
XappDebug
动态调试环境配置安装 jeb配置 Java 环境
下载 jdk 并安装
配置环境变量
这里我之前装过,而且网上教程很多,就不演示了。
正己给的 Java 环境是 11 的,需要比这个版本高的,正好我之前装的是 19。
在命令行输入java --version测试一下:
image-20230331183818980安装
解压了就行了,注册啥的正己都弄好了。
动态调试获取 debug 权限法一:修改 AndroidManifest.xml
在 AndroidManifest.xml 的 application 标签里添加:
android:debuggable="true"
修改androidmanifest法二:XAppDebug 模块 hook 对应的 app
XAppDebug 项目地址:
启用模块之后勾选系统框架(需要重启)和要进行 debug 的 app 即可。
XAppDebug法三:Magisk 命令(重启会失效)
通过 adb 进入命令行或者用 MT 管理器的终端模拟器都可以。
adb shell
mt shell
然后依次输入下面的命令就行了:
# 切换至超级用户
su
# 启用 debug
magisk resetprop ro.debuggable 1
# 一定要通过该方式重启
stop;start;
法四:刷入 MagiskHide Props Config 模块(永久有效)
下载 MagiskHide Props Config:
在 Magisk 里找到模块,点击盒子按钮选择刚刚下载的 zip 文件即可开始刷入。
modules
出现 Done 说明刷入成功,重启设备。
done
进入终端,输入props命令,会出现一个菜单,选择Edit MagiskHide props (active),也就是输入4:
props menu
进入新菜单,找到ro.debuggable选项,并选择(我这里显示enabled,表示已经是1了,就不用改了,否则需要改),将ro.debuggable的值设为1:
set debuggable prop
修改完后重启设备,然后使用以下命令验证ro.debuggable是否已经改为1:
getprop ro.debuggable
getprop ro.debuggable端口转发以及开启 adb 调试权限端口转发
雷电模拟器默认开启端口转发,其他模拟器需要用 adb 连一下,类似下面的命令:
adb connect 127.0.0.1:
这个端口号不同模拟器不同,具体可以去查一下。
开启 adb 调试权限进入开发者模式
按”设置->关于本机->版本号“顺序找到”版本号“,点击 7 次进入开发者模式。
version开启 USB 调试
按”设置->系统->高级->开发者选项“顺序进入”开发者选项“,找到”USB 调试“选项并开启:
usb-debug下断点
在对应 smali 代码处Ctrl-B下断点
debug 模式启动
命令行输入以下命令:
adb shell am start -D -n /
比如这里要启动的名为 "com.zj.wuaipojie" 的应用程序中的 ".ui.MainActivity" 活动,命令将如下所示:
adb shell am start -D -n com.zj.wuaipojie/.ui.MainActivity
adb
这里不知道是我看视频看漏了还是怎么的,我的环境里好像没有adb,所以这里我去另外安装了一下。
然后模拟器会打开对应应用并等待调试器启动:
waiting for debuggerJeb附加调试进程
在工具栏找到“调试器”一栏的”开始“并点击,或者通过菜单栏的”调试器->开始“,唤出“附加调试”菜单,然后找到对应的进程选择”附上“即可开始调试。
image-20230402015542027
接着在 app 中触发刚刚下断点处的逻辑,可以看到代码停在断点处了。此时就可以查看各种调试信息了,这里主要关注局部变量的信息:
breakpoint
快捷键:
这里在最后相等比较前的函数看到一个 base64 的值,复制下来放到flag{}之间就是密钥了。
key
我的密钥正确了:
success
这里调试的时候发现 v0 的值(也就是最后函数返回值赋给的变量)没有出现在局部变量里,正己说是因为模拟器的问题,真机就会有这部分值。
本文链接:
原文链接:
Linux Story 整理,对原文有删节、补充;转载请注明,否则将追究相关责任!