IDA调试安卓so库

IDA调试安卓so库


打 2025 轩辕杯,第一次使用 IDA 调试安卓 so 程序,记录一下调试方法

环境搭建

基本工具

  • IDA
  • 安卓设备/虚拟机 (需要 root 权限)
  • Java JDK
  • ADB 工具

配置雷电模拟器

安装雷电模拟器,打开 ROOT 权限,开启 ADB 调试

雷电模拟器自带 ADB 工具
可在 雷电安装路径/leidian/LDPlayer9/adb.exe 找到

列出设备

adb devices

打开设备 shell

adb shell

配置IDA远程调试服务

查看设备架构

getprop ro.product.cpu.abi
x86_64

上传 IDA 远程服务程序
可在 IDA 安装路径/dbgsrv/ 找到
上传对应设备架构的调试服务

adb push android_x64_server /data/local/tmp/

设置执行权限

chmod 755 /data/local/tmp/android_x64_server

启动 IDA 远程服务程序

su # 提升权限
/data/local/tmp/android_x64_server # 启动程序

IDA Android x86 64-bit remote debug server(ST) v9.1.31. Hex-Rays (c) 2004-2025
2025-05-20 19:26:48 Listening on :::23946...

另开一个终端,建立端口通讯

adb forward tcp:23946 tcp:23946 # 前本机,后手机

开始调试

使用IDA进行Attach

将 apk 程序直接拖入雷电模拟器安装
或者使用 adb install hookme.apk

查看手机所有包名

pm list packages
...
package:com.example.hookme

以调试模式启动程序

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

建议 IDA 先打开要调试的 so 文件
可以直接解压 apk,找到需要调试的 so 文件

打开 Debugger 菜单
选择 Remote Linux debugger,配置 Hostname 为 localhost

选择 Attach to process...,搜索要调试的程序

如果只有一个进程,说明没有以 root 模式启动 IDA 远程调试服务

程序启动了

恢复应用执行

相关命令

adb jdwp # 列出所有可以调试的进程 pid
adb forward tcp:xxx jdwp:<pid> # 在PC的xxx端口与手机进程建立连接
jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=xxx # jdb连接

建立 jdb 端口通讯

adb forward tcp:8700 jdwp:2882
# pid 2882 可以在刚刚 IDA attach 中看到

jdb 可在 Java 安装路径/bin 可以找到
我的是 C:\Program Files\Java\jdk-17\bin\jdb.exe

启动连接,然后恢复 IDA 执行

jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8700
设置未捕获的java.lang.Throwable
设置延迟的未捕获的java.lang.Throwable
正在初始化jdb...

程序正常跑起来了

完成啦

正常动调程序即可
have fun 😃

参考

IDA 动态调试原生层程序 - CTF Wiki

posted @ 2025-05-26 19:34  HUOE  阅读(262)  评论(0)    收藏  举报