固件逆向-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++中开发的之外,我们没有找到任何其他东西。好吧,我们继续。 宾...