常见Android调试方法简介:
1.IDEA/Android Studio + SmaliIdea插件
可调试smali文件,但无法跟入so
本文不涉及该种方法(因为JEB完全可以替代)
2.JEB直接调试
可调试Smali和so,无缝衔接但是收费
(简单来讲就是你买不起,但是嘛。。你懂的)
3.IDA pro附加调试
主要用来调试so,还有一手F5插件看源码
实际使用如下
JEB直接调试步骤
- JEB打开目标apk
-
adb检查是否连接到目标机器
如果出现了offline字样或者检测不到设备的话请依次检查以下内容:
- 手机/虚拟机是否打开了USB调试
- 确保系统中仅有一个adb可执行文件
- 执行adb kill-server,然后adb start-server
- 确保android:debuggable="true"
-
安装目标apk到机器,然后启动它
注意这里启动不一定需要以调试模式启动,直接打开也可以
-
点击工具栏debug按钮进行附加
如果已经打开对应app的话,下面process会自动显示对应进程,这里直接回车附加到对应进程即可
-
这个时候Toolbar上原来灰色的调试按钮会变为可用
对应意义就不赘述了。。就单独提一点,JEB的断点比较蛋疼,需要用“执行到光标”来达到下断点的目的
IDA调试步骤
做过IDA动态调试linux的同学对这个应该就比较轻车熟路了
注意以下步骤首先需要root权限
- 首先把IDA的dbgsrv文件夹下的android_server用adb给push到手机中,一般是/data/local/tmp中
- 然后进入adb shell,以su权限启动android_server(第一次需要chmod)
- 使用adb forward tcp:23946 tcp:23946进行端口转发
- 使用调试模式启动app,adb shell am start -D -n 包名/类名
- IDA attach进程,开始愉快的调试
注意事项:
IDA是可以选择暂停的时机的
- 针对反调试需要在so加载时暂停的情况
你需要使用jdb辅助,具体步骤如下:
adb forward tcp:8700 jdwp:进程号
jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8700