1、工具介绍
IDA pro: 反汇编神器,可静态分析和动态调试。
模拟机或者真机:运行要调试的程序。
样本:阿里安全挑战赛第二题:http://pan.baidu.com/s/1eS9EXIM
2、前期准备
2.1 安装样本程序
adb install AliCrackme_2.apk
2.2 上传android_server文件
adb push android_server /data/local/tmp/
adb shell chmod 777 /data/local/tmp/android_server
3、调试步骤
3.1 开启android_server,监听23946端口,与IDA pro通信
adb shell /data/local/tmp/android_server
3.2 设置本地端口转发
adb forward tcp:23946 tcp:23946
3.3 以调试模式启动程序
adb shell am start -D -n com.yaotong.crackme/.MainActivity
3.4 启动IDA pro,点击Debugger->attach->Remote ARMLinux/Android debugger,输入localhost,选择要调试的进程即可。
3.5 附加程序成功后,选择,Debugger option,勾选
suspend on process entry point
suspend on thread start/exit
suspend on library load/unload
三项,然后按f9运行调试程序,此时IDA pro 挂起
3.6 使用jdb恢复程序执行
jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700
3.7 此时IDA pro断在linker中,此时module中并没有libcrackme.so,说明licrackme.so还没有加载到内容中,只需要跟几步f8,在寄存器中看到libcrackme.so加载进来了,就可以在module中找到,有两种情况
1、如果IDA Pro能够解析成功,双击module中的libcrackme.so就可以看到它export的函数,就可以右键下断点了
2、如果IDA Pro解析失败,需要再开一个IDA,查找到要下断的函数地址,加上libcrackme.so加载到内存的地址即可(在init_array下断只能使用这种方法)。
3.8 IDA Pro按F9几次,直到断在自己下断的地方即可
3、总结
本章内容和调试原生程序有重复,就省略了一些内容。
另外还有一种so函数是在用户操作的时候才能触发,只需要下好断点,用户进行触发即可