一、Binwalk是什么?
Binwalk是一个用于固件分析的命令行工具,可以扫描固件并从中提取有用的信息和文件。它可以识别固件中的许多不同类型的文件和系统,包括压缩文件、文本文件、二进制文件、图片文件和各种文件系统。Binwalk主要由Craig Heffner编写,目前在GitHub上开源发布,可以在Linux、Mac OS和Windows平台上使用。
二、环境准备
在使用Binwalk之前,需要安装一些必要的软件库和工具。确保您的系统已经安装了以下内容:
- Python2.7
- Python的一些必要模块(例如lxml、argparse、numpy、matplotlib和scipy)
- 一些必要的命令行工具(例如binutils、openssl、swig和mksquashfs)
- 一个交叉编译工具链(如果您需要编译和使用Binwalk的依赖项)
三、Binwalk安装
在您的Linux或Mac系统中,可以使用以下命令获取最新版本的Binwalk:
git clone https://github.com/ReFirmLabs/binwalk.git
cd binwalk
python setup.py install
如果您使用的是Windows系统,则需要下载预编译的二进制版本,可以在GitHub页面上找到。
四、基本用法
一旦安装依赖项并完成了Binwalk的安装,就可以使用以下命令运行Binwalk:
binwalk [选项] 文件名
选项包括:
-B
:不执行任何提取,只显示可能包含文件的偏移量。-e
:将所有提取文件保存到当前目录下的一个子目录中。-M
:尝试包含另一个已知格式(以逗号分隔的列表)。-y
:尝试所有提取操作/文件类型。
例如,在扫描某个固件时:
binwalk firmware.bin
将生成以下输出:
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 Ubiquiti Atheros AR231x initramfs, 0x206E bytes
77600 0x12D10 LZMA compressed data, properties: 0x5D, dictionary size: 65536 bytes, uncompressed size: 2190536 bytes
79168 0x13440 Squashfs filesystem, little endian, version 4.0, compression:xz, size: 5947533 bytes, 1450 inodes, blocksize: 131072 bytes, created: Tue Dec 22 07:34:32 2020
6019024 0x5BD730 Squashfs filesystem, little endian, version 4.0, compression:xz, size: 87651006 bytes, 10308 inodes, blocksize: 131072 bytes, created: Tue Dec 22 07:34:32 2020
Binwalk将扫描文件,并将检测到的文件和系统报告出来。如果要提取任何文件,请使用-e
选项,例如:
binwalk -e firmware.bin
将提取所有检测到的文件和系统,并将它们保存在一个名为_firmware.bin.extracted
的子目录中。
五、使用实例
1. 提取网络流量包
您可以使用Binwalk从网络流量中提取有用的信息。以下是一个简单的例子,演示提取由nc捕获的流量的内容。
首先,我们将使用以下命令将nc命令通向40.40.40.40:8080:
nc -l 8080 > packet.bin
然后,我们可以使用Binwalk扫描文件,并通过使用-e
选项将所有提取内容保存到一个子目录中:
binwalk -e packet.bin
这将提取所有可用的文件和信息,并将它们保存在一个名为_packet.bin.extracted
的子目录中。
2. 提取固件内容
如果您已经有一个固件文件并希望从中提取内容,可以使用Binwalk轻松实现这一点。以下是一个简单的例子,演示如何从固件文件中提取文件系统。
首先,我们将使用以下命令扫描固件文件:
binwalk firmware.bin
然后,我们可以看到报告中包含一个Squashfs文件系统。我们可以使用以下命令提取该文件系统:
binwalk -e firmware.bin
该命令将提取所有检测到的文件和系统,并将它们保存在一个名为_firmware.bin.extracted
的子目录中。我们可以浏览该目录以查找我们需要的内容。
3. 在固件文件中查找危险代码
您还可以使用Binwalk来扫描固件文件,以查找可能包含危险代码(例如漏洞或后门)的文件。以下是一个简单的例子,演示如何使用Binwalk来查找漏洞程序。
首先,我们将使用以下命令扫描固件文件:
binwalk firmware.bin
然后,我们可以看到报告中包含一个LZMA压缩的二进制文件。我们可以使用以下命令对其进行提取和分析:
binwalk -Me firmware.bin
cd _firmware.bin.extracted
grep -r "vulnerable_function" .
这将提取所有文件和系统,并将它们保存在一个名为_firmware.bin.extracted
的子目录中。然后,我们进入该目录并使用grep
命令搜索可能包含脆弱代码的文件。从输出中,我们将能够找到任何包含“vulnerable_function”的文件。
总结
Binwalk是一个功能强大的命令行工具,用于提取和分析固件文件。它可以扫描文件并从中提取有用的信息和文件,快速定位漏洞,并允许您深入了解设备的特定方面。此外,Binwalk不仅易于使用,而且非常灵活,并且可以与其他工具和库集成使用。使用本文中的提示和技巧,您应该能够轻松开始使用Binwalk,并开始探索您需要的固件。