IDA动态调试android的so文件

环境

  • 小米5 - root - android7.0
  • IDA pro 7.0
  • so包是32位
  • android运行demo并进入主界面并加载so包,点按钮运行so包native函数
  • 如果出现其他问题可以参考IDA常见问题

配置

  1. 复制IDA 安装目录下dbgsrv 文件里面的android_server文件到 手机内存储的 /data/local/tmp 目录下
  2. 控制台输入 adb shell su 命令获取管理员权限
  3. 控制台输入 setenforce 0 命令 关闭保护(每次关机后开机都要重新设置)
  4. 控制台输入:cd /data/local/tmp 进入android_server目录 ,输入:chmod 777 android_server命令获取执行权限

开始

  1. 控制台输入 adb shell su 命令获取管理员权限

  2. 输入: ./data/local/tmp/android_server启动android_server

  3. 新开一个命令窗口 不用获取管理员权限

  4. 直接输入 adb forward tcp:23946 tcp:23946 命令 端口转发

  5. adb shell am start -D -n 包名/activity路径 启动应用,例如:adb shell am start -D -n com.example.demos/com.example.demos.MainActivity

  6. 打开IDA -> 选择so文件 -> 弹框全部确定
    IDA动态调试android的so文件

  7. 点击IDA的菜单栏的Debugger菜单中的Select debugger项,按照如下弹框选择
    IDA动态调试android的so文件

  8. 点击IDA的菜单栏的Debugger菜单中的Debugger options项,按照如下弹框选择
    IDA动态调试android的so文件

  9. 点击IDA的菜单栏的Debugger菜单中的Process options项,按照如下弹框选择,路径按照自己的填
    IDA动态调试android的so文件

  10. 点击IDA的菜单栏的Debugger菜单中的Attach to process项,按照如下弹框选择自己的包名
    IDA动态调试android的so文件

  11. 点击IDA 的开始运行按钮(F9)。如果有反调试的话,一定要先下断点,不然一运行就崩溃了,这里运行自己的就没事
    IDA动态调试android的so文件

  12. 打开Android Device Minitor , 查看端口,这里是8631
    IDA动态调试android的so文件

  13. 控制台输入:jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8631 注意:我这里是8631,自己的是多少就填多少, 输完这时候Android Device Minitor的小瓢虫会变成绿色,并且IDA程序会开始运行

  14. IDA一直按运行按钮(F9) , 直到自己的so包加载出来 , 有以下几点注意

  • 之后会有弹框,有ok按ok , 有yes按yes , 有same 按 same
  • control + s键可以查看已经加载的so包IDA动态调试android的so文件
  1. 加载so包之后, 在general registers查看so包的函数(ctrl +F可以搜索) , 双击so包
    IDA动态调试android的so文件

  2. 搜索自己定义的函数名称,双击函数名
    IDA动态调试android的so文件

  3. 双击函数名后,在Debug View试图会定位到函数位置,按F2 可以给选中行下断点,如下:
    IDA动态调试android的so文件

  4. 手机按钮调用这个函数之后,指示线条变色(提示: F8运行下一个断点)
    IDA动态调试android的so文件

总结

本次调试是结合静态与动态调试,优点:只要加载出so包,就能查找到指定函数