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





评论

这看起来像一个开发问题,该问题不在本网站上,因此我投票关闭它。您可能会在Stack Overflow上问它。

这里使用哪个处理器?

ARM 32,Little Endian

我不会低估从位置0开始的图像,因为那是ARM存储一些与硬件相关的信号的跳转地址的位置。您的字符串引用对我来说似乎很好;加载当前指令和字符串之间的偏移量,然后添加PC是获取位置无关代码的标准ARM方法。有关此问题的更多信息,请点击此处。

#1 楼

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


我找到了所有已知的LDR宏(据我所知它们不是相对的)
我找到了地址一些必须有机会被直接引用的字符串(大于10,小于100)
之后,我用步骤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


加载的地址的值可能会提示要搜索的区域。

评论


创造性的方法!

– 0xC0000022L♦
18年6月17日在20:23