通常重要的功能会放在navite层,,代码编译成so文件,so是由c/c++代码开发的。
可用ida对so文件做动态调试。
使用真机动态调试
1、真机导入ida文件
在IDA安装目录中找到android_server64这个文件,使用adb命令push到手机的/data/local/tmp文件夹下。
我本地的文件路径是:E:\tools\IDA Pro 7.6\dbgsrv\android_server64
adb命令复制android_server64到手机中:
adb push E:\tools\IDA Pro 7.6\dbgsrv\android_server64 /data/local/tmp
为手机中的android_server64文件增加执行权限:
adb shell
chmod 777 /data/local/tmp/android_server64
启动手机中的android_server64:
walleye:/data/local/tmp # ./android_server64
IDA Android 64-bit remote debug server(ST) v7.6.27. Hex-Rays (c) 2004-2021
Listening on 0.0.0.0:23946...
可以看到ida的默认端口是23946.
2、Android Killer反编译app
使用Android Killer反编译apk文件,找到要做动态调试的so文件路径。
使用IDA分析该so文件。
在Android Killer中找到APP的 AndroidManifest.xml 文件,找到入口界面 com.kanxue.kctf_debug.MainActivity
3、转发23946端口
把手机上的端口转发到本地:
adb forward tcp:23946 tcp:23946
4、使用调试模式启动APP
重启一个cmd,使用调试模式启动APP:
adb shell
am start -D -n com.kanxue.kctf_debug/.MainActivity
手机端会启动APP并提示:
5、IDA附加手机中的APP进程
(1)在IDA中的菜单 Debugger->Debugger Options中,APP中有反调试要选中下面三项:
(2)在菜单 Debugger->Process options 设置Hostname:
(3)执行附加进程
在菜单Debugger->Attach to process 中选择要附加的进程:
附加上之后的界面:
6、JDB命令让APP继续执行
(1)Android Studio如果没有安装ddms,可在菜单 Tools->SDK Manager中安装:
(2)找到Monitor路径并启动:
(3)查看当前手机中运行APP对应的端口号为8610
(4)使用jdb连接
端口port是在(3)中查看到的端口号8610
jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8610
7、就可以在IDA中找到对应的so文件
可根据so文件在内存中的偏移地址,下断点,并单步执行。
使用雷电模拟器做动态调试
(1)雷电模拟器要开启root模式,否则IDA找不到要附加的进程;
在雷电模拟器中找到顶部,三道杠->软件设置->其他设置->ROOT权限,开启。
(2)在IDA安装目录中找到android_x64_server这个文件,这是针对x86 64位架构的,适合当前的模拟器,使用adb命令push到手机的/data/local/tmp文件夹下。
(3)开启IDA,分析 x86_64版本的so文件;
(4)IDA的菜单中,Debugger->Select Debugger 选在 “Remote Linux debugger”:
(5)其他操作与真机调试相同。