1.判断APK是否支持debuggble模式
方法一: 通过过APKKiLLer反编译工具查看 ,如果不是在application节点下去修改然后二次打包即可添加指令android:debuggable="true"
方法二 :通过aapt指令去查看aapt list -v -a crackme1_killer.apk工具所在路径由下图所示,这条指令会打印出apk相关信息
2. 搭建IDA调试android apk测试环境
1. 在IDA安装目录找到android_server文件 push到android目录中,修改android_server并文件读写权限,以root身份去运行android_server文件(必须要以root身份去运行,否则无法IDA无法获取android应用进程)
2. 执行指令
2.1 adb push androidserver /data/local/tmp/
2.2 chmod 777 /data/local/tmp/android_server 执行权限否则会弹出下图框框,文件执行权限拒绝
2.3 /data/local/tmp/android_server 执行此文件 注意如果下图弹出 出现 bind: Address already in use 错误 这样的错误提示,说明原手机中android_server已经在执行中,找到进程直接干掉重新开启
干掉指令
重开成功标志,代表android_server执行中
2.3 adb forward tcp:23946 tcp:23946 IDA监听23946端口,PC段转发IDA监听端口,使IDA可以监听android系统进程
2.4 打开IDA,使IDA添加需要调试的android进程,
2.5 点击确认以后会弹出android系统进程列表 选中需要调试的进程即可,如果未弹出下图提示为出现的话,在output window窗口输出链接失败,无效之类的提示的话请尝试多次执行 IDA监听端口转移指令即可
2.6 点击Debug-----> debug option 选中下图
2.7 运行应用程序 开启IDA断点调试
在执行下面这条指令,最好配置DDMS环境变量 ,在dos窗口输入ddms,弹出ddms窗口,弹出窗口以后经常会弹出ddms端口被占用的情况,解决方案是修改ddms窗口端口号最好,FILE --->Option
ddms 执行文件所在路径
jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8701,链接的ddms对应的端口,开始测试模式的应用,点击IDA下图 出现下图提示开启IDA调试模式成功
选中需要调试的so库 下断点,F7 代表进入方法,F8代表向下执行,F9
进入下一个断点,若无及退出程序 ,函数有个固定的执行顺序,
注意啊: 在调试so库的时候 先执行.init_array 其次 JNI_OnLoad
,在调试so库的很多时候要双开IDA 动静太结合的双调,因为IDA在编译的过程不能全部展示所要调用的函数,指针还有内存地址