安卓动态调试进阶
上篇用的是 apktool 加 Android Studio,这篇换雷电模拟器和 Jeb。本文记录了安卓动调以及 Log 插桩。
环境准备
雷电 9 模拟器
Jeb
雷电 9 自带 root,后面 LSPosed 那步用得上,记得开着。adb devices 能看到模拟器设备,说明 adb 连接正常。apk 装进模拟器,直接拖进去或者 adb install 都行。Jeb 用来打开 apk,断点也下在它里面。
修改 debug 权限
要动调,得先让应用变成可调试的。两种方法选一个就行。
方法一
在 AndroidManifest.xml 中修改 android:debuggable="true"。解包改属性再打包签名的整套流程上篇写过,这里不重复。
方法二
XappDebug 模块 hook 对应的 APP。它是个 Xposed 模块,在 LSPosed 里启用后把目标 APP 勾上,不用改包。
debug 模式启动
具体包名以及类名可以通过 AndroidManifest.xml 进行查看,一般找带 LAUNCHER 标记的那个 activity。
adb shell am start -D -n com.example.application/.ui.MainActivityadb shell am start -D -n 包名/类名
-n 表示启动一个activity
-D 表示将应用设置为可调试模式
命令敲完应用会启动,但界面会停在 Waiting for Debugger(等待调试器)的提示上,这是在等调试器连过来,不是卡死了。
接着直接用 Jeb 链接即可使用。Jeb 里打开 apk,把调试器挂到模拟器里跑着的这个进程,挂上之后应用就放行了。之后就是正常的单步调试,看变量、看流程。断点相关的快捷键:
Ctrl+B 下断点
F6 进入方法
F7 从方法中跳出来
R 运行到光标处
Log 插桩
使用 MT 将日志插桩的 dex 文件(详见参考资料 1)添加进 apk 中(可以重命名为 classes2.dex),加完记得重新签名,不然装不上。
在想看值的 smali 位置插上这一句,把那个位置寄存器里的东西传进去:
invoke-static {对应寄存器}, Lcom/mtools/LogUtils;->v(Ljava/lang/Object;)V接着打开 LSPosed,算法助手勾选上目标应用,然后再在算法助手里选中目标应用,打开 Log 捕获。应用跑到插桩的位置,算法助手里就能看到打出来的日志。
参考资料:
《安卓逆向这档事》五、1000-7=?&动态调试&Log插桩 https://www.52pojie.cn/thread-1714727-1-1.html