IDA调试安卓so
安装java JDK 并且配置java adb 环境变量 确认adb 连接可用
下载安卓SDK工具包
1.确认安卓设备驱动是否连接正常,可通过SDK工具\sdk\tools\ddms.bat查看(若连接正常则开不开都可以)
1.1若设备连接不正常,请检查
1.2设备USB驱动,
1.3设备是否开启USB调试模式,
1.4设备USB连接方式,选择文件传输或者,USB受控于此设备
1.5数据线是否可用
1.6电脑主机USB端口是否开放
1.7设备USB管理是否关闭USB切换
2.有线调试
2.1方式一,手动启动
通过DOS cmd.exe输入
adb shell+回车
//su +回车(获取安卓设备权限)
/data/local/tmp/77_server ./ssu -p23456 (32位应用调试)
/data/local/tmp/77_server64 -p23456 (64位应用调试) (安卓设备根目录下放置ida的驱动程序(区分ida版本以及32或者34位/\[P.Y.G]IDA Pro 7.5 SP3 (x86, x64, ARM, ARM64, PPC, PPC64, MIPS)\dbgsrv\android_server)),-p12345为指定端口,不指定使用默认端口,该端口与下一步转发端口要一致.
2.2方法二,手动启动
adb shell
cd /data/local/tmp
./ssu
/data/local/tmp/77_server -p23456 (32位应用调试)
/data/local/tmp/77_server64 -p23456 (64位应用调试)
2.3方法三,脚本启动
adb forward tcp:23456 tcp:23456
adb shell "/data/local/tmp/ssu -c '/data/local/tmp/77_server -p23456'"
(将以上脚本写入bat文件,即可一键启动)
3.再打开一个DOS命令行程序转发端口输入(若是端口占用,重新选择另一个端口链接)
adb forward tcp:23456 tcp:23456 (32位应用调试)
adb forward tcp:12345 tcp:12345 (64位应用调试)
4.最后打开安卓设备与ida attach-android debugger
在跳出的窗口中
-Hostname:127.0.0.1,port 23456(端口与之前一致)
4.1若有起始调试需要则(
打开安卓设备与ida attach-android debugger
在跳出的窗口中
先进 debug options 勾选 Suspend on process entry point 和 Suspend on library load/unload
在进入车型时需要手动F9,走过所有SO
)
5.若已经打开安卓设备并且进入到指定车型诊断,则直接搜索以下例子为改程序调试入口
com.cnlaunch.diagnoseservice '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''该程序7.0版本apk之后需要进车型才会刷出来
方式二.
前两步与方式一一致,无需先打开安卓设备
3.再打开一个DOS命令行程序转发端口输入
adb forward tcp:12345 tcp:12345
adb shell am start -D -n com.cnlaunch.x431.pro3S/com.cnlaunch.x431pro.activity.MainActivity
adb shell am startservice -D -n com.cnlaunch.x431.pro3S/com.cnlaunch.diagnosemodule.service.DiagnoseService(多出的两个命令行用于设置ida入口断点)(脚本打开安卓设备)
4.最后打开安卓设备与ida attach-android debugger
在跳出的窗口中
先进 debug options 勾选 Suspend on process entry point 和 Suspend on library load/unload
-Hostname:127.0.0.1,port 12345(端口与之前一致)
5.并且进入到指定车型诊断,则直接搜索以下例子为改程序调试入口
com.cnlaunch.diagnoseservice '' '' ''
6.进入诊断车型后
打开新的DOS命令行程序
jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700(断点放行)//端口是不是8700要根据ddms在Devices窗口中可以看到
7.在进入车型时需要手动F9,走过所有SO
8.G 输入地址转跳,F8单步调试,F9过程调试 X函数上级 G地址输入 Edit->Plugins->Hex-Rays-Decompiler->Options->default-radix切换进制,输入16就是16进制显示 tab切换汇编 F5伪代码
9.soBASE地址:6cc15000(可能每次打开都不一样)
+函数地址:D404
按g,搜索到位置将鼠标位置对准函数起始得地址,按P,后编译,然后按F5成功自动编译伪代码
若不行,则需要从函数起始地址手动选择函数范围,按p后再次搜索地址或者点击函数+F5编译
参数看不到地址看不到内存,则按TAB 看伪代码,打断点到参数位置,在 Hex View-1中按G,输入参数名,例如R2, [R6,#0x10] 中的R6,则可见
过滤异常,silient
10.附加静态so调试
10.1.使用IDAPRO 打开一个需要附加调试的.so
10.2.在IDAPRO 工具栏打开Debugger->Select debugger... F9->安卓选择 Remoto ARM Linux/Android debugger->ok确定
10.3.继续在IDAPRO 工具栏打开Debugger->Attach to process...->选择对应的调式程序即可
11.无线调试 (设备重启失效)若没有失效直接adb connect并且进行第四步
首先使用有线连接设备
11.0 C:\Users\furen.yang>adb shell
PL280:/ $ getprop
而后
11.1 C:\Users\furen.yang>adb tcpip 5555
restarting in TCP mode port: 5555
(若提示adb: inaccessible or not found
1. 手机端开启adb tcp连接端口
:/$setprop service.adb.tcp.port 5555
:/$stop adbd
:/$start adbd
getprop
(若不行关闭DOS窗口,再打开一个输入adb tcpip 5555)
再进行11.2即可
)
11.2 C:\Users\furen.yang>adb connect 172.16.132.152(该地址是设备WIFI IP地址)
connected to 172.16.132.152:5555(成功并拔掉有线)
11.3 C:\Users\furen.yang>adb shell
PL280:/ $
11.4 启动调试脚本设置设备server文件 root权限即可调试
一键启动调试脚本:
adb forward tcp:23456 tcp:23456 (端口自定义)
adb shell "/data/local/tmp/ssu -c '/data/local/tmp/77_server -p23456'"(文件名77_server自定义,与安卓设备上/data/local/tmp/77_server名字相同,来自IDA\dbgsrv\android_server)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理