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