MENU

Android Native层调试记录

October 22, 2021 • Read: 874 • Reverse

工具准备

  1. IDA Pro
  2. Android Studio
  3. DDMS

其中 DDMS 可以在 Android Stduio 中选择安装,在 File ->Settings 搜索 SDK,找到以下页面

选择 SDK Toolsimage.png

去掉勾选 Hide Obsolete Packages

image.png

选择并下载 Android SDK Tools(Obsolete),如果已经勾选则说明已经安装

image.png

安装后的目录在你 SDK 目录下的 tools\lib\monitor-x86_64\,选择 monitor.exe 即可打开

环境配置

检查环境变量

首先在控制台输入 adb,查看是否存在以下回显

image.png

如果不存在以下回显的话,要把 SDK 目录下的 platform-tools 设置为环境变量

查看设备是否连接

设置好后,将手机用数据线连接至电脑,并且使用 adb devices 可以看到设备

image.png

使用 adb 把调试文件置入手机

首先找到 IDA Pro 的安装位置,然后在其目录下的 dbgsrv 文件夹中找到 android_server64 文件,使用 adb push 命令将其传输到安卓手机中,这里选择传输到目录/data/local/tmp 下

image.png

设置文件权限

使用 adb shell 进入手机的远程 shell,并输入 su 来提升权限为 root,再 cd 到/data/local/tmp 目录下,给上述文件权限,再选择执行文件,可以看到 IDA 的远程调试服务器就配置好了,同时在监听 23946 端口

image.png

设置转发

程序在手机内部开启端口,我们需要使用 adb 将其转发至本机的 23946 端口。再一个新的窗口中输入 adb forward tcp:23946 tcp:23946,来设置转发。

image.png

启动调试

首先来了解几个 adb 命令

查看所有包名

这个算是 shell 的命令,使用 pm list packages 可以查看

image.png

adb install

使用 adb install 可以远程安装 app 程序,如果安装失败,可以尝试加上 -r 参数强制安装

image.png

使用调试模式启动程序

如果需要调试程序启动初期的代码,那么必须要用这种形式来启动,而如果不是初期的代码,那么使用正常启动后再附加的方式也可以。

adb shell am start -D -n com.example.test/.MainActivity

image.png

使用调试模式启动后。

使用 IDA 打开 So 文件,

image.png

在此处选择 Remote ARM Linux/Android debugger

然后在这里设定调试选项

image.png

修改 Debugger options,选择需要的选项,我这里需要调试 so 库的 JNI_OnLoad,所以至少需要勾选 Suspend on library load/unload。

下面的 Autoload PDB files 建议勾选,如果不勾选无法把当前解析出来的内容在调试过程中显示,在调试过程就不能看伪代码了。

image.png

设置好后,在此处选择 Attch to process

image.png

选择需要调试的程序

image.png

点击 OK 后会断在一个 libc 处

image.png

这时候需要打开 ddms 了

如果 ddms 看不到进程,有可能是以下两个问题

  1. 说明没有设置 ro.debuggable(网上有大量教程,这里不再赘述)
  2. ADB 连接问题,重启 adb(adb kill-server 和 adb start-server)

然后就可以看到我们之前用调试模式启动的程序旁边有一个红色的虫子

image.png

记录下 ddms 中的端口为 8700

在 Andoroid Studio 中找到 jdb 文件,在安装目录下的 jrebin,可以将其设置为环境变量

然后在控制台输入,后面的端口就是 DDMS 中显示的端口。

jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700

image.png

此时可以发现 ddms 中的小虫子变成了绿色,说明程序继续执行成功了

image.png

然后在 IDA 中按多次 F9 继续执行,加载到我们当前 IDA 分析的 so 文件时,IDA 提示会提示是否匹配,选择 Same

image.png

此时会断在 linker 处,可以选择单步到初始化位置

image.png

或者可以选择去下断点,在右侧搜索和找到想要调试的 so 模块,然后点击查看,可以搜索定位到我们需要下断函数

image.png

按 F9 再次执行后就可以断下,如果在上面勾选了自动加载 PDB,那么这个时候应该是可以使用 F5 查看伪代码的,同时这个伪代码是具有符号信息的。

image.png

Last Modified: June 6, 2022
Archives QR Code
QR Code for this page
Tipping QR Code