如何从固件中提取的ELF文件中确定ARM架构?

逆向工程 拆卸 固件 手臂 反汇编者 固件分析
2021-06-22 14:31:22

我已经从打印机的闪存转储中提取了 ELF 文件,我在打印机上找不到关于 SoC 芯片的太多信息。从 ELF 文件确定 ARM 架构(ARMv7-R、ARMv7-M、ARMv7-A)的最佳实践是什么?如果我能弄清楚ARM内核类型就更好了。我想我可以寻找一些模式或一些特定的说明来做出明智的猜测,但我真的不知道。

flash dump里面的ELF文件是经过压缩的,有点不规范,我自己解压了,修改了一下,加上了程序头表。

我知道 readelf 和 binwalk -A 等工具,但我想知道的不是非常广泛的 ARM32 或 ARM64 分类,而是特定的 ARM 架构,或者更好的是特定的 ARM 内核类型。因为我什至不确定打印机上使用的芯片是 ARM Cortex A/R 还是 M 系列。我在打印机上找不到 Linux,所以它可能不是 Cortex-A。

2个回答

还有一些其他选项可以帮助您缩小特定架构/核心/SoC 的范围。

  1. 确定它包含哪些 ARM/THUMB16/THUMB32 指令组合。

  2. 查看反汇编以识别关键内存区域(代码、数据、闪存等)的偏移量

  3. 同样,SoC 往往具有内存映射外设。确定此处访问的内容会有所帮助。

  4. 查看 MRS 和 MSR 指令的反汇编 - 许多特殊寄存器是特定于内核的。

  5. 打开打印机并查看 PCB 以直观地识别芯片。(或谷歌图片搜索打印机品牌/型号 PCB。)

ELF 标头应包含有关目标体系结构的信息。您可以使用 Unix 实用程序file来获取有关该文件的一些基本信息,并且readelf -h应该为您提供那里的大部分信息。

如果由于某种原因没有帮助,我想您可以尝试针对不同的架构进行反汇编,直到它产生一些可读的东西。