概述
如果想要在so加载时就下断点的话,需要以调试模式运行,并使用ddms进行jdb的连接。
准备
一部打开了调试开关(ro.debuggable=1)的手机或可调试的apk, IDA及android_server, 已启动的ddms(启动AndroidSDK\tools\monitor.bat
)
具体步骤
1. 开启端口转发并启动android_server
1 | adb forward tcp:12345 tcp:12345 |
这里使用的是修改过的android_server,默认端口为12345
2. 以调试模式启动app
1 | adb shell am start -D -n xyz.sysorem.cokey/.CokeyActivity |
这时手机会显示Waiting For Debugger
3. 使用IDA附加及下断点
点击确定前先修改Debug options
,把Event下前三个Suspend都勾选上,然后连接。
选定要调试的app进程后,在模块列表中找到libart.so
,并在目标函数位置下断点
然后点击运行
4. 使用jdb附加,使程序继续运行
1 | jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700 |
此处的8700即ddms中显示的对应端口
正常情况下就会在libc.so处暂停了
5. dump
在OpenMemory断下时,按shift+F2,运行dump脚本
1 | static main(void){ |