使用 IDA Pro 对 SO 文件进行动态调试
本文迁移自作者博客(2019-05),为当时环境下的操作实录,IDA 菜单路径在新版本中可能略有变化。
准备工作
- 一台 macOS / Windows 系统的电脑
- 一部已 root 的手机
- 一条数据线
- IDA Pro
- adb
- 需要调试的 APK
演示环境:macOS · 小米 5 Max · IDA Pro 7.0 64 位
开始
手机通过数据线连接电脑。
将 IDA 安装目录下 dbgsrv 目录中的 android_server 发送到手机:
bashadb shell push "/Applications/IDA Pro 7.0/ida.app/Contents/MacOS/dbgsrv/android_server64" /data/local/tmp注:android_server 的架构与打开的 IDA 架构一一对应——IDA 打开的是 64 位,则推送 64 位的 android_server。
给 android_server 赋予 755 权限:
bashadb shell chmod 755 /data/local/tmp/android_server64启动调试服务器(默认监听端口 23946):
bashadb shell su -c "/data/local/tmp/android_server64"进行端口转发:
bashadb forward tcp:23946 tcp:23946在手机上运行要调试的 App,并打开 IDA Pro。
依次点击菜单栏 debugger → attach → remote Armlinux/android debugger,在弹出的窗口中填充:
textHostname: localhost Port: 23946
在弹出的窗口中选择要调试的 App 的包名,点击 OK。

此时 IDA 会把 App 挂起。在 IDA 界面按下
Ctrl+S找到需要调试的 SO 文件,同时记录该文件的加载基址,点击 OK 关闭对话框。按下快捷键
G,输入「基址 + 文件偏移」所得地址,点击 OK 跳转到 SO 文件中需要下断点的位置。按下F2设置断点,当 App 执行到此处时便会断下来。
