固件逆向-part1
这篇文章会用到以下工具
- binwalk
- dd
固件架构
- 完整固件—主要由操作系统Linux、windows等组成,例如BusyBox、kernel、bootloader、lib库和应用程序。
- 部分固件—缺少上述组件之一,应用程序可以kernel权限直接运行,可以具有自定义操作系统,也可以只是相关文件
- 操作系统——Linux、windows、μClinux、μC/OS-II、eCos、FreeRTOS、VxWorks、OpwnWRT和国产的RT-thread、LiteOS等
- 文件系统—CramFS, SquashFS、JFFS2、yaffs2、UBIFS、ext4 等
- bootloader——uboot、Redboot、vivi、blob、armboot 等。
- 压缩机制——zip、LZMA、tar 等
解开固件后,可能会发现以下内容:bootloader、kernel、文件系统、应用程序和网络服务器。需要提取文件系统映像来分析。
在这里,我们可以看到使用的压缩格式/归档(LZMA)、大小和其他属性。也有一些文件格式,如压缩文件、临时文件、NTFS等。最受欢迎的是方形和临时抱佛脚。我们需要打开档案以进一步检查,这可能会给我们关于引导加载器、内核、网络服务器、文件系统等的信息。让我们在上面的二进制文件中尝试命令“strings”和“hexdump”
“字符串”命令试图列出一些可读的字符串,这意味着文件没有加密:
不幸的是,没有识别标题。我想在一个简单的固件文件上展示上述例子的原因是,有时在进行分析时可能没有任何线索。在侦察阶段,它可能会失败;然而,关键是上述文件没有加密,这可能是一个安全问题。 现在让我们转到一个更真实的固件文件,DLink路由器固件。这可以从DLink网站下载。让我们检查一下这个文件,希望它能给我们更多的结果。 让我们以字符串的形式再次运行“字符串”命令。这可能会给我们一些线索。输出显示文件是用C/ C++语言编写的,但也给出了没有加密的线索。不幸的是,由于一些错误,我们无法获得引导加载程序信息。此外,我们可能会检查整个输出是否有其他有趣的东西,但是除了它是在C/C++中开发的之外,我们没有找到任何其他东西。好吧,我们继续。
宾沃克为我们提供了一些有趣的信息。我们需要小心假阳性。压缩类型是“lzma”。文件系统被压缩文件包。结果显示这是一个Realtek固件头,创建日期已经过去;1543680字节(1.48兆字节)的图像大小也小于1543708字节的总文件大小。所有这些都表明这是一个有效的结果。关于加密的信息似乎是假阳性,因为我们已经看到我们能够以明文读取字符串。文件系统压缩文件似乎是有效的,因为它的大小远远低于实际文件大小,并且创建日期已经过去。 我们将在这里使用一个名为“dd”的工具,它主要用于取证调查,从磁盘中提取一大块数据。
评论
发表评论