Android逆向_IDA动态调试so文件代码

1,236 阅读2分钟

通常重要的功能会放在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)其他操作与真机调试相同。