安卓IDA动态调试总结

安卓ida动态调试总结

不出问题的理想步骤(带反调试的版本)

需要的软件:

  • ida7.0/6.8
  • ddms(或者sdk/tools/monitor.bat)
  • root真机一部(因为android_server是基于arm架构,而大多数模拟器基于x86,所以最好是真机)或者AVD模拟器
  • 待调试apk(test.apk,包名:)
  • adb

正确步骤:

  1. 新开一个cmd
  • adb push android_server /data/local/tmp(android_server在ida的dbgsrv目录下)
  • adb shell
  • su
  • cd /data/local/tmp
  • chmod 777 android_server
  • ./android_server
  1. 新开一个cmd
  • adb install test.apk
  • adb forward tcp:23946 tcp:23946
  • adb shell am start -D -n 包名/类名(程序包名可以在AndroidMainfest文件中找到,类名我是用androidkiller的入口函数;这是以启动模式启动)
  1. 打开IDA,Debugger->attach->android_server ,

    安卓IDA动态调试总结

先Debug options设置:

安卓IDA动态调试总结

然后hostname设置如图:

安卓IDA动态调试总结

然后点击ok,弹出进程列表

安卓IDA动态调试总结

Search apk包名,然后记住进程ID,然后重要的一步,在Debug option里面:

还是选中那三个选项。

4.cmd

  • adb forward tcp:8899 jdwp:11514 (11514是进程的id)
  • jdb -connect com.sun.jdi.SocketAttach:port=8657,hostname=127.0.0.1

jdb的port参考的是monitor的相关进程的端口号:

安卓IDA动态调试总结

等前面的蜘蛛变绿(不用jdb,前面蜘蛛为红色),然后就可以F9运行了。

下面说说遇到的问题:

1.首先保证apk是否支持debuggble模式,在AndroidMainfest文件里,application结点android:debuggable="true",如果不是,可修改后二次打包

如:

安卓IDA动态调试总结

2.原手机android_server已经在运行问题:

在执行./android_server时弹出bind: Address already in use

解决方案:

在adb shell 里:ps | grep android_server

然后他会输出进程ID,第一个数即为进程id:

如输出:root 12212 13423 23213 后省略

然后执行kill -s 9 12212

3.IDA attach报错

(1)incompatible debugging serer:address size is 4 bytes

错误原因:是android_server是32位的,而ida是64位的。

解决方案:启动32位ida

(2)Bogus or irresponsive remote server

错误原因:SELinex安全策略限制

解决方案:

  • adb shell
  • su
  • setenforce 0

安卓IDA动态调试总结

上一篇:redis5 cluster集群入门


下一篇:Redis5.x 集群部署实战