IDA动调SO文件

步骤一:将 android_server 文件 push 到手机中并执行

复制IDA目录下的\dbgsrv目录下的android_serverandroid_server64到真机中并执行:

1
2
3
4
5
6
7
8
//复制到真机中
adb push android_server /data/local/tmp
adb push android_server64 /data/local/tmp
//修改应用权限使其可执行
Cd /data/local/tmp
chmod 777 android_server android_server64
//执行所需要的版本
./android_server64

默认启动端口为23946。

步骤二:端口转发

另开一个cmd执行如下指令:

1
adb forward tcp:23946 tcp:23946

第一个端口对应电脑端,第二个端口对应手机端。

执行后,将会通过电脑端的23946端口转发数据到手机端的23946端口。

步骤三:am 启动要调试的应用程序

执行如下命令启动要调试的应用程序:

1
2
3
adb shell am start -D -n 包名/活动名
//例如
//adb shell am start -D -n com.example.ndktest2/.MainActivity

成功后手机端会弹出如下界面:

步骤四:使用IDA附加进程

用IDA打开想要调试的so库,调试器选择Remote ARM Linux/Android debugger

在菜单栏的Debugger -> Debugger options中设置程序暂停的时机,按下图所示勾选选项框:

在菜单栏的Debugger -> Process options中设置主机和端口:

在菜单栏的Debugger -> Attach to Process中选择要调试的进程进行附加:

选择完后,IDA界面会进入到动调界面。按 F9 继续执行。

步骤五:jdb连接

运行以下命令:

1
jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=应用所在端口号

应用所在端口号可通过DDMS工具来确定的(DDMS需要的jdk版本为1.8):

可能会出现无法附加到目标 VM。出现了就多试几次(可能是因为android版本太高)。

以上执行成功后,DDMS中的红色小虫子就会变成绿色。

步骤九:继续执行程序

再IDA界面按F9使程序继续执行,在底部的窗口会显示已加载的so文件。当加载到。此后可以下断点进行调试。

插曲

调试过程中出现了如下报错:

  1. Command "ProcessStart" failed
  2. IDA could not create a temporary breakpoint for the next instruction.A temporary breakpoint is required in order to suspend the execution after a step.Please use F9 to continue the execution.If you have a breakpoint at the current address,please remove it before continuing.

以上情况,F7、F8、F9均失效。

后面用另一个Android版本的手机才调试成功的。


参考:

新手向总结:IDA动态调试So的一些坑 - 知乎 (zhihu.com)

IDA动态调试so文件 - 知乎 (zhihu.com)

Android IDA 动态调试最完善攻略,跨过各种坑_ida调试_闽农的博客-CSDN博客

[求助]动态调试jdb无法附加到目标VM-Android安全-看雪-安全社区|安全招聘|kanxue.com


IDA动调SO文件
http://example.com/2023/09/06/Android安全/IDA动调SO文件/
作者
gla2xy
发布于
2023年9月6日
许可协议