如今升级快。网上的资料仅仅能做參考。
学到了NDK逆向这一块,昨天为了能让IDA 能动态调试SO,瞎折腾了非常久,这里分享一下我的经验。
工具:
IDA pro 6.8
Android 5.x
IDA 6.8 在看雪吾爱应该都能找到下载地址。
我的手机是三星 on7 Android 5.1系统。
曾经我一直用的是IDA 6.6。群里人说5.0以上的系统要用6.8…
在启动android_server 服务的时候遇到以下这样的情况有可能就是IDA的版本号不正确了。
以下開始正式写,内容可能有些反复。
0x0: 将IDA pro 6.8 文件夹下的dbgsrvandroid_server 上传到手机 /data/local/tmp 文件夹下。
详细命令:
adb push dbgsrvandroid_server /data/local/tmp/android_server // 上传 dbgsrvandroid_server 依据自己实际情况改动
adb shell // 得到Android系统的shell,以下是在Shell中的操作
su //获得Root权限
cd /data/local/tmp
chmod 755 android_server // 改动android_server权限 rwxr-xr-x
./android_server //执行
这个CMD不要关了。
0x1 : 开启port转发
另外打开一个cmd
adb forward tcp:23946 tcp:23946
0x2: 操作IDA
打开IDA ->Debugger->Attach->Remote ARMLinux/Anroid debugger
Hostname 就是Anroid机的主机地址。一般和电脑都在一个局域网吧? 填写Android主机的ip地址。port默认就可以。
完毕后按下 Ok。
按下Ok后会出现一个进程列表,选择你要调试的进程。
附件里有一个So样例,先在Android机上执行起,然后在刷新IDA的进程列表。
进程太多的话,能够用包名keyword搜索。
附加后调试器会停在一个地方,先让程序跑起来吧,由于我们调试的是So模块。
怎样调试XX模块?样例以附件中的Apk为样例
从这里调出模块窗体。
模块非常多。你须要知道你要调试的是什么模块,用搜索功能会方便非常多。
这个就是样例中要调试的模块。用Android Killer分析出来的。
在Module List窗体中双击欲调试的模块。会看到模块的导出函数。
假如要调试 getCoin这个函数。 双击getCoin,就进入了函数的汇编代码界面。
单击红色圆圈中的蓝色原点就能下断点。 我们须要改动这个函数的返回值,来达到改动金钱的目的,所以在 BX LR 这一行下断点。
当IDA停下来后,就能够在寄存器窗体改动R0寄存器的值。
全剧终。
一些小问题的非专业解答:
0x0:
1、手机没有Root
2、执行android_server 前请先su一下
0x1:
IDA 6.8文件夹下,执行idaq.exe
0x2:
。,, 换真机,模拟器不行。
0x3:
版本号不正确。升级IDA,或者在手机上刷一个低版本号的系统。
记住:
一定要Root。一定要Su,一定要改权限
样例下载:http://pan.baidu.com/s/1i3wzetf
參考文章:
怎样使用ida在apk执行前动态调试其so中的函数
http://bbs.pediy.com/showthread.php?
t=178659
一步步搭建ida pro动态调试SO环境。
http://bbs.pediy.com/showthread.php?
t=203080
菜鸟总结so分析。arm 汇编,IDA静态分析
http://www.pd521.com/thread-790-1-1.html