1.快捷方式
Shift+F12: 快速查看so文件中的字符串信息,分析过程中通过一些关键字符串能够迅速定位到关键函数;
F5: 可以将ARM指令转化为可读的C代码,同时可以使用Y键,对JNIEnv指针做一个类型转换,从而对JNI里经常使用的JNIEnv方法能够识别;
Ctrl + S: 有两个用途,在IDA View页面中可以查看文件so文件的所有段信息,在调试页面可以查看程序中所有so文件映射到内存的基地址。tips:在进行so调试过程中,很有用的一个小技巧就是IDA双开,一个用于进行静态分析;一个用于动态调试。比如说调试过程中要找到一个函数的加载到内存中的位置,
**G:**可以在调试界面快速跳转到指定的绝对地址,进行下断点调试。如果跳转到目的地址之后,发现是DCB数据的话,可以使用P键进行转化;
**F7:**单步进入调试;
F8: 单步调试。
2.动态调试
对于没有反调试的步骤:
-
1)adb push d:\android_server(IDA的dbgsrv目录下) /data/local/tmp/android_server(这个目录是可以随便放的)。
-
- adb shell
-
- su(一定要有root权限)
-
- cd /data/local/tmp
-
- chmod 777 android_server (给android_server可执行权限)
-
./android_server对本地设备端口进行监听
-
6)再开一个cmd:
-
adb forward tcp:23946 tcp:23946(端口转发,调试手机上的某个进程要有协议支持通信)让远程调试端IDA可以连接到被调试端
-
7)使用IDA连接上转发的端口,查看设备的所有进程,找到需要调试的进程。具体步骤方法为:在Debugger选项卡中选择Attach,选择android debugger,点击Ok。
-
8)动静结合方式(基地址+相对地址)确定函数地址进行调试。
对于有反调试的步骤:
-
1)启动android_server
-
2)端口转发adb forward tcp:23946 tcp:23946
-
3)adb shell am start -D -n 包名/类名;出现Debugger的等待状态
-
(说明:以启动模式启动,是停在加载so文件之前,包名可以在androidmanifest文件中找到)
-
4)打开IDA,附加上对应的进程之后,设置IDA中的load so时机,即在debug options中设置;
-
5)运行命令:jdb -connect com.sun.jdi.SocketAttach:hostname=localhost, port=8700
-
6)点击IDA运行按钮,或者F9快捷键。