binwalk是一款强大的固件分析工具,它不仅可以用于提取文件系统,也可以用于协助研究人员对固件进行分析和逆向工程。它的开源代码可以在Github中找到(https://github.com/ReFirmLabs/binwalk),这个Github中也有关于binwalk如何安装的指导步骤(https://github.com/ReFirmLabs/binwalk/blob/master/INSTALL.md)。本书中虽然也提供了详细的binwalk安装步骤,但可能由于作者使用的操作系统或binwalk版本较低,如果完全按照书中的指示,binwalk安装过程将会很复杂。实践中,我在最新版本的binwalk安装说明文档末尾发现,在Ubuntu系统中安装binwalk,只需要几条命令就可以:
$ sudo apt install git
$ git clone https://github.com/ReFirmLabs/binwalk.git
$ cd binwalk
$ sudo ./deps.sh
$ sudo python setup.py install
安装完成以后,我们可以找一个路由器固件测试一下。
书中的第三章提供了一个在D-Link官方技术支持网站可以进行下载的固件链接地址:
ftp://ftp2.dlink.com/PRODUCTS/DIR-605L/REVA/DIR-605L_FIRMWARE_1.13.ZIP
下载下来并且拷贝到Ubuntu16.04的虚拟机中,然后对这个压缩包进行解压,再打开命令行终端程序,使用binwalk -e,再加上固件文件作为参数,就可以对这个固件解包了:
test@ubuntu:~$ cd Desktop/
test@ubuntu:~/Desktop$ ls
DIR-605L_FIRMWARE_1.13.ZIP dir605L_FW_113.bin
test@ubuntu:~/Desktop$ binwalk -e dir605L_FW_113.bin
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
11280 0x2C10 LZMA compressed data, properties: 0x5D, dictionary size: 8388608 bytes, uncompressed size: 2129920 bytes
563234 0x89822 Squashfs filesystem, big endian, version 2.0, size: 64160 bytes, 7 inodes, blocksize: 65536 bytes, created: 2012-05-25 04:03:47
628788 0x99834 Squashfs filesystem, big endian, version 2.0, size: 2301312 bytes, 495 inodes, blocksize: 65536 bytes, created: 2012-05-25 04:04:00
固件解包后,就可以拿到固件中包含的各种程序,如经常出现漏洞的Web服务器程序(boa):
test@ubuntu:~/.../squashfs-root-0$ ls
bin etc mydlink sbin usr web
dev lib proc tmp var web-lang
test@ubuntu:~/.../squashfs-root-0$ ls bin/boa
bin/boa
拿到了存在或可能存在漏洞的程序后,我们就可以进一步通过IDA静态分析或动态调试等手段进行漏洞分析了。
当然了,如果需要动态分析,还需要将提取到的程序以调试模式运行起来。然而,虚拟机是x86或x64架构,而路由器一般都采用ARM或MIPS架构,所以我们还应该使用开源的qemu工具,使ARM或MIPS架构的Linux程序在x86或x64架构的系统中运行起来。这也是下一节中我要分享的内容。
本节内容只介绍了binwalk的一个最常用用法,但binwalk的有用功能还很多,感兴趣的读者可以在网络上搜索进行深入学习。binwalk功能虽然强大,支持的固件种类有很多,但也不能全部都指望binwalk,如果遇到binwalk不能解析的固件,可以参考嘶吼的固件逆向分析过程中的工具上、固件逆向分析过程中的工具下这两篇文章进行固件解析,也可以通过”ROM助手“之类的软件进行尝试。
本节内容相对比较简单,但也希望能够为你带来收获和启发。谢谢大家。