将IDAPro根目录下dbgsrv 目录下的android_server(模拟器用android_x86_server,这里还是用真机好点)文件push 到安卓设备(比如/data/local/tmp/目录)下,权限改为777,并运行
端口转发adb forward tcp:23946 tcp:23946
安卓设备安装并运行程序
IDA打开对应设备的so文件(arm, armv7, x86什么的)的Debugger -> Selecte Debugger -> Remote ARM Linux/Android Debugger -> OK, Debugger -> Process options -> HostName改成127.0.0.1,端口改成上面对应的 -> OK,Debugger -> Attach to process,从列表中选出对应的进程(没有root权限的机器好像显示不出来)
在对应代码行下断点,F9运行即可进行动态调试,右边的寄存器面板可以直接修改寄存器的值
其他一些需要注意的:
- init_array先于JNI_OnLoad会在so加载的时候就开始执行
- 导出表没有的函数有可能是在通过JNI_OnLoad动态注册的, 查找动态注册的方法是打开segment视图, .data.rel.ro.local段中放置的即为动态注册的函数(从上往下分别是函数名, 函数签名, 函数地址)
原文:https://www.cnblogs.com/seliote/p/9313629.html