如何找到任意引导加载程序映像的映像库?

逆向工程 安卓
2021-06-14 12:26:09

我拿起了一个有根的 Acer 手机并 dd-edLK分区以在 IDA 中分析它。目标是查明处理 fastboot 命令的例行程序。剥离前 512 个字节会产生明显有意义的反汇编。但是,字符串的交叉引用fastboot: processing commands\n看起来不是很有意义。这让我相信图像可能需要重新基于某个地址才能使引用正确。知道我该怎么做吗?

在此处输入图片说明

在此处输入图片说明

1个回答

当我需要做类似的事情时,我尝试执行以下操作:

  1. 我找到了所有已知的LDR宏(据我所知它们不是相对的)
  2. 我找到了一些必须有机会直接引用的字符串的地址(多于 10 个,少于 100 个)
  3. 之后,我在第 4 步中对所有 32 位地址范围进行了强制处理,以便找到符合LDR正确引用的最大字符串数的移位当然,这可以通过 IDAPython 来完成。

从这个转变可以得出地址。

此外,您可以交叉引用具有跳转和绝对寻址调用的函数序言。

顺便说一句,如果我没记错的话,您可能会在图像的开头找到一个中断表 - 绝对跳转,如下例所示:

00000000   LDR   PC, =Reset
00000004   LDR   PC, =Undef
00000008   LDR   PC, =SVC
0000000C   LDR   PC, =PrefAbort
00000010   LDR   PC, =DataAbort
00000014   NOP
00000018   LDR   PC, =IRQ
0000001C   LDR   PC, =FIQ

加载的地址的值可以暗示要搜索的区域。