【发布时间】:2014-06-04 00:46:21
【问题描述】:
我有一个混淆的 aarch64(64 位 ARM,又名 armv8)二进制文件,我试图理解它。该程序从其 .data 部分解码/解密机器指令,将它们存储到内存中,然后跳转到该地址。
我可以使用以下 gdb 命令检索机器指令。如上所述,这些指令无法使用 objdump 获得,因为它们是经过编码/加密的,并且二进制文件会在运行时对其进行解密。
set log on
x/2000i 0x******
set log off
这会在工作目录中生成一个 gdb.txt 文件,其中包含一个 aarch64 程序集 lisiting:
[...]
0x400ee4: svc #0x0
0x400ee8: orr x3, x0, x0
0x400eec: mov w2, w3
0x400ef0: mov w1, #0x1 // #1
0x400ef4: orr x0, x20, x20
0x400ef8: bl 0x402660 // Jump instr
0x400efc: mov w1, #0x3 // #3
0x400f00: orr x0, x20, x20
[...]
我希望能够:
-
使用快捷方式跳转到地址: 例如,我希望能够在指令
bl 0x402660中单击0x402660,然后按F3 跳转到以0x402660开头的行。我还希望能够回到我使用另一个快捷方式的位置。 - 生成控制流/图表
当然,您可以建议任何可行的工具/脚本组合(即,如果您认为最好的方法是在 Excel 中导入列表并编写 VB 宏,那很好)。但是,请记住我有一个 aarch64 二进制文件(很多工具与此架构不兼容),并且我的二进制文件在运行时解码其机器代码。
【问题讨论】:
-
您使用的是 ARM Foundation 模型还是 Qemu?我正在尝试使用 gdb 调试在 Foundation 模型上运行的我的二进制文件,但到目前为止,我无法像使用 Qemu 那样附加它。
标签: assembly arm reverse-engineering arm64