为固件二进制文件重建符号表

逆向工程 艾达 拆卸 符号 核心
2021-06-26 21:30:27

我正在尝试对Linksys WAG120N路由器固件进行逆向工程我已经能够解压缩它并提取引导加载程序、内核和文件系统。

内核是 MIPS 大端。我将内核加载到 IDA pro 中,起始地址为0x80002000. 入口点是0x801B2040

我现在的问题是所有函数都命名为sub_. 我需要一个符号表来帮助我反转这个二进制文件。Binwalk 没有找到任何符号表,我不知道如何重建符号表,因为我是这类东西的新手。

我读了一篇文章Rebuild symbol table,但那是关于静态和共享库的,我的内核不是。

file在我的内核上运行给出

kernel: data

我不知道二进制文件是否有符号表,但如果有,我不知道如何提取它。还是有另一种反转二进制的方法?

任何帮助表示赞赏。

编辑:我发现了一个符号表。它具有 libc 字符串函数和许多其他函数。但是在反汇编中对这些函数名称的交叉引用并不多。我如何使用它?

1个回答

听起来您不确定自己到底想做什么。您是否特别想对固件的任何部分进行逆向工程?我建议您首先阅读devttys0.com上的一些博客文章,因为他似乎是有关逆向工程路由器固件的信息的绝佳来源。

如果二进制文件包含符号,IDA Pro 应该会自动为您加载它们。路由器固件的符号经常被剥离。但是,Linux 内核是根据 GPL 许可的,这意味着制造商有义务提供内核的源代码。Linksys确实提供了路由器内核的源代码你可以先看看那个。

然而,有趣的东西通常在 rootfs 中的内核模块和/或二进制文件中,而不是内核本身。为你的路由器下载了固件并用 解压binwalk -Mrev,binwalk 确实能够解压 rootfs。浏览它,看看你是否能找到任何有趣的东西。

例如,让我们看看主要的 Web CGI 二进制文件usr/sbin/setup.cgi. file针对此文件运行会得到以下结果:

usr/sbin/setup.cgi: ELF 32-bit MSB executable, MIPS, MIPS-I version 1 (SYSV), dynamically linked, interpreter /lib/ld-uClibc.so.0, stripped

二进制文件已被剥离,但查看带有 的符号表readelf -s usr/sbin/setup.cgi,我们仍然可以看到不少有趣的函数名称。接下来,我们可以查看二进制文件中的字符串strings(我个人更喜欢使用,strings -n8因为通常少于 8 个字符的字符串是误报,当它们不是时,无论如何它们通常都不重要。)通常二进制文件的字符串可以揭示很多关于二进制文件的作用以及二进制文件的方式工作,而且这更容易,因为路由器制造商喜欢使用它system(3)来运行 Linux shell 命令。

一旦您知道您发现了一个有趣的二进制文件,您就可以将其加载到 IDA Pro 中以对其进行反汇编并开始对其进行逆向工程。