逆向工程 MIPS 引导加载程序

逆向工程 固件 米普 六线谱
2021-07-08 08:06:16

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

我没有 RE 经验,我这样做是为了娱乐/教育。关于进一步阅读或下一步的任何提示都会很棒。

2个回答

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

虽然我不知道计算起始地址的简单而准确的方法,但我尝试解释一下,无论如何你是如何找到它的。

您可以尝试以下技巧:

  • 识别函数开始和指向函数的指针并尝试匹配它们。如果反汇编整个二进制文件,则可以非常准确地确定函数起始地址。因此,您可以收集相对起始地址。在大多数二进制文件和引导加载程序中,在代码部分之后,您会发现各种数据项,例如函数指针。如果你能识别出其中的一些指针,你可以尝试找到对应的相对地址。
  • 您可以从代码本身中找到提示。尽管引导加载程序使用相对分支,但数据项是通过绝对地址访问的。在图中,您可以找到绝对地址为 0x804B7F10 等。 根据这个地址和代码区的长度(0x9B6A4),你可能会有智能猜测,比如 0x80400000 或 0x80408000 或类似的。
    在此处输入图片说明

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

    MIPS 引导

    Bootstrapping 是将 CPU 刚从复位、连续获取和执行指令到更复杂的运行环境的过程。执行此操作的程序称为“引导加载程序”或“引导带代码”或简称为“引导代码”。

    第一条指令提取

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