Android 5.0 + IDA 6.8 调试经验分享

现在升级快,网上的资料只能做参考。 
学到了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的版本不对了。 
Android 5.0 + IDA 6.8 调试经验分享 
下面开始正式写,内容可能有些重复。 
0x0: 将IDA pro 6.8 目录下的\dbgsrv\android_server 上传到手机 /data/local/tmp 目录下。 
具体命令: 
adb push \dbgsrv\android_server /data/local/tmp/android_server // 上传 \dbgsrv\android_server 根据自己实际情况修改 
adb shell // 得到Android系统的shell,下面是在Shell中的操作 
su //获得Root权限 
cd /data/local/tmp 
chmod 755 android_server // 修改android_server权限 rwxr-xr-x 
./android_server //运行 
这个CMD不要关了。 
Android 5.0 + IDA 6.8 调试经验分享

0x1 : 开启端口转发 
另外打开一个cmd 
adb forward tcp:23946 tcp:23946

0x2: 操作IDA 
打开IDA ->Debugger->Attach->Remote ARMLinux/Anroid debugger 
Hostname 就是Anroid机的主机地址,一般和电脑都在一个局域网吧? 填写Android主机的ip地址。端口默认即可。 
完成后按下 Ok。 
Android 5.0 + IDA 6.8 调试经验分享

按下Ok后会出现一个进程列表,选择你要调试的进程。 
附件里有一个So例子,先在Android机上运行起,然后在刷新IDA的进程列表。 
进程太多的话,可以用包名关键字搜索。 
附加后调试器会停在一个地方,先让程序跑起来吧,因为我们调试的是So模块。

如何调试XX模块?例子以附件中的Apk为例子 
Android 5.0 + IDA 6.8 调试经验分享 
从这里调出模块窗口。

Android 5.0 + IDA 6.8 调试经验分享
模块很多,你需要知道你要调试的是什么模块,用搜索功能会方便很多。 
Android 5.0 + IDA 6.8 调试经验分享 
这个就是例子中要调试的模块,用Android Killer分析出来的。 
在Module List窗口中双击欲调试的模块,会看到模块的导出函数。 
Android 5.0 + IDA 6.8 调试经验分享 
假如要调试 getCoin这个函数。 双击getCoin,就进入了函数的汇编代码界面。 
Android 5.0 + IDA 6.8 调试经验分享 
单击红色圆圈中的蓝色原点就能下断点。 我们需要修改这个函数的返回值,来达到修改金钱的目的,所以在 BX LR 这一行下断点。 
当IDA停下来后,就可以在寄存器窗口修改R0寄存器的值。 
全剧终。

一些小问题的非专业解答
0x0: 
Android 5.0 + IDA 6.8 调试经验分享 
1、手机没有Root 
2、运行android_server 前请先su一下

0x1: 
Android 5.0 + IDA 6.8 调试经验分享 
IDA 6.8目录下,运行idaq.exe

0x2: 
Android 5.0 + IDA 6.8 调试经验分享
,,, 换真机,模拟器不行。

0x3: 
Android 5.0 + IDA 6.8 调试经验分享 
版本不对,升级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