反编译 ARM 原生二进制文件 - IDA Pro 将文件检测为共享对象

逆向工程 艾达 安卓 手臂 反编译
2021-06-16 03:13:37

我正在尝试使用 Hex-Rays IDA Pro 反编译 Android ARM 原生二进制文件。IDA 检测可能的格式为

  • ELF for ARM(共享对象)
  • 二进制文件

如果我为 ARM(共享对象)选择 ELF,那么它会正确反编译并检测大多数标准函数,例如 tan/sin/cos 等。但是当我尝试运行远程 android 调试器时,我收到警报消息

  • 输入文件是动态库,不能自行运行。请指定主机应用程序。
  • 调试器插件无法加载该文件。请验证参数是否有效。

如果我选择二进制文件,则它无法正确反编译。此外,远程 android 调试器选项未列在调试器列表中。

我可以直接在 Android ARM 模拟器上执行二进制文件。

我究竟做错了什么?如何使用 IDA pro 调试 ARM 二进制可执行文件的 ELF?


编辑:我已经尝试过android_server在 AVD 和物理设备上运行。当我尝试连接 [ELF for ARM (Shared object)] 时,可以看到以下输出android_server

=========================================================
[7] Accepting connection from 127.0.0.1...
[7] Closing connection from 127.0.0.1...

是否所有 ARM 二进制可执行文件都被检测为共享对象?还是我的可执行文件被错误识别为.so文件?

3个回答

您需要创建一个 Android 虚拟设备,将您的 ELF 程序复制<IDA directory>\dbgsrv\android_server到虚拟设备,然后android_server在虚拟设备上运行然后您可以使用 IDA 来调试 ELF 文件。

以下是两页详细说明如何执行此操作的页面:

在此处输入图片说明

正如我在对您的问题的评论中所述,该文件作为共享对象加载,然后它可能是一个“.so”文件,实际上是一个共享库。您确定此应用程序可以独立于命令行 (adb) 运行吗?

如果它是一个共享库,您将需要附加到一个进程,该进程可以加载和调用您想在 IDA 中逐步执行的功能。您可以使用我创建并在线发布的“垫片”应用程序来执行此操作;

https://github.com/rednaga/native-shim

它包括有关如何编译它、将其推送到设备以及将 IDA Pro 指向它的说明。这允许您将共享库作为参数传递并允许它通过 IDA Pro“运行”。希望这能解决您的问题。

您可以在此链接上查看教程。它解释了如何使用 gdb 和 IDA Pro 进行调试:http : //www.aldeid.com/wiki/Category :Architecture/Android#tab= Android_Remote_debugging