使用IDA动态调试android so文件时的几个坑
2017-07-18 11:37
1106 查看
1 ddms
一定要打开ddms,否则调试端口是关闭的,就无法在程序刚开始的暂停了。我之前不知道要打开ddms才能用jdb,还以为android系统或者sdk出问题了,重装好几次。汗。
我遇到好几次打开ddms会报错:Could not open Selected VM debug port (8700)
此时,要netstat -ano | find "8700" 查看占用端口的程序,一般是adb.exe结束它。只有占用端口8700的程序为javaw时候才正常。
2 adb push androidserver /data/local/tmp/
这里我们把ida的androidserver push到手机上,并以root身份执行。
3 adb forward tcp:23946 tcp:23946
将ida的调试端口进行转发,这样pc端的ida才能连接手机。
4 adb shell am start -D -n com.yaotong.crackme/.MainActivity
这里我们以debug模式启动程序。程序会出现waiting for debugger的调试界面。
5 ida attach target app
这时候我们启动ida并attach这个app的进程。
6 suspend on libary loading
我们在debugger setup里勾选 suspend on library load。然后点击继续。
此时一定要在ida中点击运行!!!!!
7 jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700
用jdb将app恢复执行。
8 add breakpoint at JNI_OnLoad
随后程序会在加载libcrackme.so这个so文件的时候停住。这时候ida会出现找不到文件的提示,不用管他,点取消即可。随后就能在modules中看到libcrackme.so这个so文件了,我们点进去,然后在JNI_OnLoad处下个断点,然后点击执行,程序就进入了JNI_OnLoad()这个函数。
PS:有时候你明明在一个函数中却无法F5,这时候你需要先按一下”p”键,程序会将这段代码作为函数分析,然后再按一下”F5”,你就能够看到反汇编的函数了。
步骤引自:
http://drops.wooyun.org/tips/6840
一定要打开ddms,否则调试端口是关闭的,就无法在程序刚开始的暂停了。我之前不知道要打开ddms才能用jdb,还以为android系统或者sdk出问题了,重装好几次。汗。
我遇到好几次打开ddms会报错:Could not open Selected VM debug port (8700)
此时,要netstat -ano | find "8700" 查看占用端口的程序,一般是adb.exe结束它。只有占用端口8700的程序为javaw时候才正常。
2 adb push androidserver /data/local/tmp/
adb shell su chmod 777 /data/local/tmp/androidserver /data/local/tmp/androidserver
这里我们把ida的androidserver push到手机上,并以root身份执行。
3 adb forward tcp:23946 tcp:23946
将ida的调试端口进行转发,这样pc端的ida才能连接手机。
4 adb shell am start -D -n com.yaotong.crackme/.MainActivity
这里我们以debug模式启动程序。程序会出现waiting for debugger的调试界面。
5 ida attach target app
这时候我们启动ida并attach这个app的进程。
6 suspend on libary loading
我们在debugger setup里勾选 suspend on library load。然后点击继续。
此时一定要在ida中点击运行!!!!!
7 jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700
用jdb将app恢复执行。
8 add breakpoint at JNI_OnLoad
随后程序会在加载libcrackme.so这个so文件的时候停住。这时候ida会出现找不到文件的提示,不用管他,点取消即可。随后就能在modules中看到libcrackme.so这个so文件了,我们点进去,然后在JNI_OnLoad处下个断点,然后点击执行,程序就进入了JNI_OnLoad()这个函数。
PS:有时候你明明在一个函数中却无法F5,这时候你需要先按一下”p”键,程序会将这段代码作为函数分析,然后再按一下”F5”,你就能够看到反汇编的函数了。
步骤引自:
http://drops.wooyun.org/tips/6840
相关文章推荐
- 使用IDA动态调试android so文件时的几个坑
- 使用Ida 4000 动态调试Android 中的so文件的方式以及技巧
- Android逆向系列之动态调试7–IDA调试so文件(上)
- Android逆向系列之动态调试8–IDA调试so文件(下)
- IDA动态调试Android的SO文件
- Android逆向系列之动态调试(七)–IDA调试so文件(下)
- 使用IDA逆向Android的.so动态库文件
- Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码)
- [Android]安全第一步,使用IDA初步调试一个c/c++的exe文件
- Ida动态修改android程序的内存数据和寄存器数值,绕过so文件的判断语句
- IDA动态调试so文件出现SIGILL
- IDA调试android so文件.init_array和JNI_OnLoad
- Android动态调试so 使用 gdb + gdbserver 启动调试的过程
- Android漫游记(4)---.so文件动态调试一例
- IDA动态调试so文件
- 使用IDA远程调试Android文件
- 安卓逆向学习笔记 (4) - 使用IDA Pro动态调试so文件
- Android漫游记(4)---.so文件动态调试一例
- 使用IDA Pro动态调试SO文件
- IDA动态调试Android的DEX文件