安卓逆向学习笔记 (4) - 使用IDA Pro动态调试so文件

时间:2022-04-20 02:46:26

在上篇文章中,我简单介绍了使用IDA Pro静态分析so文件。今天,我将介绍一下如何使用IDA Pro动态调试so文件。

本文的使用的IDA Pro版本为6.5版本,下面介绍一下动态调试so文件的流程:

(1)在IDA的安装路径中找到android_server文件。

安卓逆向学习笔记 (4) - 使用IDA Pro动态调试so文件

(2)将android_server拷贝到手机的/data/local/tmp目录下面。

安卓逆向学习笔记 (4) - 使用IDA Pro动态调试so文件

(3) 将手机插上电脑,打开命令提示符,
先输入”adb shell”,然后输入”su root”获取root权限。
接着输入” chmod 777 /data/local/tmp/android_server” 给android_server加上相应的权限。
接着输入” /data/local/tmp/android_server”启动android_server。
如下图所示:

安卓逆向学习笔记 (4) - 使用IDA Pro动态调试so文件

(4)重新打开一个命令提示符,
输入”adb forward tcp:23946 tcp:23946”进行tcp端口转发

安卓逆向学习笔记 (4) - 使用IDA Pro动态调试so文件

(5)adb root模式下执行” am start -D -n com.example.testjniso/com.example.testjniso.MainActivity”
    命令,启动所要调试的Activity。

安卓逆向学习笔记 (4) - 使用IDA Pro动态调试so文件

app会弹出”Waitting for debugger”对话框,如下图所示:

安卓逆向学习笔记 (4) - 使用IDA Pro动态调试so文件

(6)启动ida pro,点击”Debugger - > Attach -> Remote ArmLinux/Android debugger”,会看到以下对话框:

安卓逆向学习笔记 (4) - 使用IDA Pro动态调试so文件

点击”Debug options”按钮,在”Suspend on process entry point”, ”Suspend on thread start/exit”, ”Suspend on library load/unload” 等选项的前面打上勾,如下图所示:

安卓逆向学习笔记 (4) - 使用IDA Pro动态调试so文件

点击”ok”后会在以下对话框的hostname中填上”localhost”

安卓逆向学习笔记 (4) - 使用IDA Pro动态调试so文件

在弹出的”Choose process to attach to”窗口中找到”com.example.testjniso”进程,选中该进程,然后点击”ok”按钮。

安卓逆向学习笔记 (4) - 使用IDA Pro动态调试so文件


(7)打开eclipse ddms在Devices窗口中可以看到以下内容:

安卓逆向学习笔记 (4) - 使用IDA Pro动态调试so文件

其中可以看到com.example.testjniso进程的端口为8700。

(8)打开命令提示符,输入以下命令:jdb -connect com.sun.jdi.SocketAttach:port=8700,hostname=localhost
   如下图所示:

安卓逆向学习笔记 (4) - 使用IDA Pro动态调试so文件
(9)点击ida中的继续执行按钮,下图中的绿色三角形按钮(或者按F9)。

安卓逆向学习笔记 (4) - 使用IDA Pro动态调试so文件

在ida弹出的”Add map”窗口中,一律点击”Cancle”按钮。

安卓逆向学习笔记 (4) - 使用IDA Pro动态调试so文件

(10)点击app中的”点击加载so文件”按钮,确保so文件已经加载到了手机内存中。点击ida中的”Debugger -> Debugger windows -> Module list ”。在”Modules”窗口中找到libTestJni.so

安卓逆向学习笔记 (4) - 使用IDA Pro动态调试so文件

点击ida中的暂停调试按钮,暂停当前的调试,如下图所示:

安卓逆向学习笔记 (4) - 使用IDA Pro动态调试so文件

右击libTestJniSo.so文件,在弹出的框中点击”Jump to module base”,跳转到libTestJniSo.so文件的起始地址。

按下Alt+T,弹出查找对话框中输入” Java_com_example_testjniso_MainActivity_helloFromJni” 如下图所示:

安卓逆向学习笔记 (4) - 使用IDA Pro动态调试so文件

点击”ok”按钮后,即可跳转到 Java_com_example_testjniso_MainActivity_helloFromJni 函数所在的起始地址。

然后在地址处下断点:

安卓逆向学习笔记 (4) - 使用IDA Pro动态调试so文件

再按F9重新开始调试,点击app中的”点击加载so文件”按钮重新加载libTestJniSo.so,即可看到程序成功地停在了断点处:

安卓逆向学习笔记 (4) - 使用IDA Pro动态调试so文件

到此处就可以正常地调试so文件了。

本文资源下载地址:安卓逆向学习(4)