我试图弄清楚TP-Link wr702n设备(基于AP121 MIPS板)的引导程序如何启动操作系统(VxWorks 5.5.1)。引导加载程序是从固件更新文件中提取的,并且是二进制文件(无ELF,PE等)。我坚持下一步。 IDA Pro分解了一些功能,但是(我想)它需要有关ROM起始地址,加载地址和偏移量的更多信息才能正确执行。我在哪里可以找到这些信息?

我没有RE的经验,我正在做这个是为了娱乐/教育。有关进一步阅读或下一步操作的任何提示都将很棒。

#1 楼

您猜对了,您必须找出引导加载程序映像的正确起始地址。基于最新固件映像(TL-WR702N_V1_141203)中的引导加载程序,我建议您尝试使用0x80400000作为起始地址。

尽管我不知道一种简单而准确的方法来计算起始地址I尝试多解释一下如何找到它。

您可以尝试以下技术:

识别函数启动和指向函数的指针并尝试匹配它们。如果反汇编整个二进制文件,则可以非常准确地确定函数的起始地址。因此,您可以收集相对的起始地址。在大多数二进制文件和引导加载程序中,在代码部分之后,您将找到各种数据项,例如指向函数的指针。如果可以识别其中的某些指针,则可以尝试找到相应的相对地址。

您可以从代码本身中找到提示。尽管引导加载程序使用相对分支,但使用绝对地址访问数据项。在图中,您可以找到绝对地址0x804B7F10,依此类推。

根据此地址和代码区的长度(0x9B6A4),您可能会有一些聪明的猜测,例如0x80400000或0x80408000或类似的内容。


评论


谢谢你的建议。我有相同的想法,但是在我的反汇编中传播的地址太大。但是,看来我的拆卸是错误的。 IDA分解了0xCC周围的区域,将其作为一串qword遍历显示的地址,例如0x804B7EF0出现在我的转储中的适当位置。

–user3422070
2015年10月15日在7:41

可能在以后的代码中有一些指向0xCC的参考,这混淆了IDA。在这种情况下,我只在二进制文件的开头反汇编了一些函数,以查看绝对地址引用。

– ebux
2015年10月15日在8:01

#2 楼

来自http://www.nulltrace.org/2013/04/mips-bootstrapping.html:


MIPS引导程序

引导程序是进行CPU只是处于复位状态,
串行获取并执行指令,以适应更复杂的运行环境。称为“引导程序
加载程序”或“引导程序代码”或简称为“引导代码”的程序。

第一条指令获取

上电时应用于处理器并退出复位状态,它
从硬连线的地址获取其第一条指令。此
地址称为“引导向量”或“重置向量”。 MIPS
处理器的引导向量位于物理地址0x1FC00000
MIPS处理器一上电就启用MMU。因此,
MIPS内核提供了一个虚拟地址0xBFC00000。 MMU
将该地址转换为boot
向量0x1FC00000的物理地址。再次翻译此翻译。通常,该地址上存在引导设备
,并且响应
处理器的读取请求。


评论


本页介绍了MIPS引导过程以及首先执行的内存地址。但是,由于我不知道二进制文件在ROM中的存储位置以及二进制blob的哪一条指令首先执行,因此它无法回答这与引导加载程序二进制blob的关系。

–user3422070
15年10月13日在13:11

“它需要有关ROM起始地址,加载地址和偏移量的更多信息才能正确执行。在哪里可以找到这些信息?” -我的理解是,引导加载程序ROM已加载到上述地址。

–詹森·格夫纳(Jason Geffner)
15年10月13日在13:30

Stefan在他的博客文章中解释并解决了一个非常类似的问题。我想,我正在寻找所需的ROM起始地址以在IDA中设置正确的地址。 Jason的帖子是下一步,因为它指示二进制文件中第一个执行的指令。

–user3422070
15年10月13日在13:44

@ user3422070在操作系统已经运行时,是否尝试将内存转储到该地址?在许多情况下,操作系统不使用引导加载程序地址,您可以从内存中转储它。完成后,您可以在文件中找到相同的二进制序列,并从中获取加载地址。

–TMR232
15-10-14在6:01