ida动态调试apk(so层)

本文详细介绍了如何在Android环境中使用IDA进行调试,包括adb命令的使用、android_server的安装与提权、端口转发、DDMS的开启以及解决monitor.bat报错问题。同时,讲解了调试过程中需要注意的事项,如端口号的选择和JDK版本的要求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

查看所有设备

adb devices

在IDA里面找到android_server(dbgsrv目录)

adb push C:\Program Files\IDA Pro 7.5 SP3\dbgsrv\android_server  data/local/tmp/android_server
adb push C:\Program Files\IDA Pro 7.5 SP3\dbgsrv\android_server64  data/local/tmp/android_server64

提权

adb shell 
su
cd data/local/tmp
chmod 777 android_server64 
chmod 777 android_server

运行android_server服务端进行监听

在这里插入图片描述
端口号默认是:23946
补充:运行andorid_server并且修改端口号:./android_server -p端口号

端口转发

因为android_server监听的是23946,所以呢,我们转发端口也就需要转发23946

adb forward tcp:23946 tcp:23946

打开DDMS:观察程序的端口号

在这里插入图片描述

打不开monitor.bat报错(Androidstudio/tools)

报错1

在这里插入图片描述

原因

因为你的jdk不是64bit

报错2

在这里插入图片描述

!ENTRY org.eclipse.osgi 4 0 2021-06-16 15:16:45.533
!MESSAGE Application error
!STACK 1
java.lang.IllegalStateException: Unable to acquire application service. Ensure that the org.eclipse.core.runtime bundle is resolved and started (see config.ini).
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:74)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:353)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:567)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:629)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1438)

原因

因为你的jdk不是1.8的

总结monitor.bat所需的jdk

  1. 版本不能太高(最好是1.8,也就是JAVASE8)
  2. 必须是64bit,不能是32bit

挂起程序

adb shell am start -D -n 包名/类名

adb shell am start -D -n com.example.ichunqiu_2/com.example.ichunqiu2.P_ichunqiu

注意

这里的包名和类名不一定一样,(不一样的时候不能省略,不能写成这样)

adb shell am start -D -n com.example.ichunqiu_2/.P_ichunqiu

打开ida,进行调试

  1. 打开ida,选择debugger -第二项-Remote ARMlinux(第四项)
  2. 添加hostname和port:

hostname:主机号(默认127.0.0.1)
port:端口号(之前android_server运行时的端口号或者端口转发的端口号)
在这里插入图片描述
如果出现以下原因

由于目标计算机积极拒绝,无法连接。 when connecting to 127.0.0.1:23946

在这里插入图片描述

因为没进行端口转发

在cmd里面输入adb forward tcp:23946 tcp:23946

在这里插入图片描述

进程列表:选择要调试的程序(可以ctrl+f,搜索包名)

进入后勾选三项:

  1. Suspend on process entry point程序入口点 断下
  2. Suspend on thread start/exit线程的退出或启动 断下
  3. Suspend on library load/unload库的加载和卸载 断下

补充:

可以直接在这里F9(左上角有一个三角形)运行程序,然后放手;
也可以,直接执行第九步,然后IDA运行程序

挂载、释放(放手)

jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=端口号

补充:此时观察DDMS,被调试的程序前面有一个绿色的虫子;

### 反编译 Flutter APK 中的 SO 文件 对于反编译 Flutter 应用程序中的 `.so` 文件,通常涉及几个关键步骤。`.so` 文件是共享库文件,在 Android 平台上用于提供本地方法支持。 #### 获取 .so 文件 首先需要从 APK 文件中提取出所需的 `.so` 文件。APK 实际上是一个压缩包,可以像 ZIP 文件一样处理。通过将 APK 后缀名改为 zip 进行解压[^2]。在解压后的目录结构里找到 `lib/armeabi-v7a` 或者其他 ABI 特定子文件夹下的 `.so` 文件。 #### 使用工具分析 .so 文件 为了理解这些二进制形式存在的 `.so` 文件的内容,一般会借助专门设计来解析 ELF (Executable and Linkable Format) 的工具: - **IDA Pro**: 是一款强大的交互式多平台反汇编器和调试器,能够加载并分析各种类型的可执行文件。 - **Ghidra**: 由美国国家安全局发布的开源软件逆向工程工具套件,具备良好的图形界面和支持多种处理器架构的能力。 - **Radare2**: 开源命令行框架,可用于逆向工程、恶意软件分析以及漏洞研究等领域。 由于 `.so` 文件通常是编译过的机器码,直接阅读非常困难。上述提到的专业级静态分析工具有助于转换为更易读的形式如伪代码或中间表示(IR),从而便于进一步的研究工作。 ```bash # 解压 APK 文件获取 so 文件 unzip app-release.apk -d output_dir/ cd output_dir/lib/arm64-v8a/ # 利用 Ghidra 导入 so 文件进行分析 ghidraProjectPath="/path/to/Ghidra" "$ghidraProjectPath/support/analyzeHeadless" /tmp ghidra_project \ -import ./libapp.so -postScript DecompileFunction.java ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寻梦&之璐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值