BinWalk固件提取分析
一、 实验目的
1.理解binwalk工具的作用
2.掌握binwalk固件分析的常用命令
二、 实验环境
虚拟机环境:VMware Workstation Pro
操作系统:Kali linux
实验工具: BinWalk相关软件
三、 实验原理及背景
1.固件(Firmware)
固件(Firmware)一般存储在设备中的电可擦除只读存储器、带电可擦可编程读写存储器(Electrically Erasable Programmable Read Only Memory,EEPROM)或者Flash中,它是嵌入式系统或者物联网产品中最为接近底层的软件。固件是一个系统最基础和最底层的软件。
在嵌入式硬件或者物联网设备中,固件是硬件设备的灵魂和大脑,用户通过固件安装软件,并控制设备。嵌入式设备和物联网设备除固件外,还有密钥和安装在固件中的其他软件,因此固件的安全性在嵌入式系统和物联网系统中起到至关重要的作用。固件升级变得越来越简单,固件程序与程序的区别也越来越小。
2.Binwalk
Binwalk是基于Kali Linux提供的一款固件分析工具。它内置了强大的特征码文件。用户可以借助其特征码扫描并识别固件中的各个文件,提取固件并进行分析。Binwalk还支持压缩数据的提取和解压。对于不能识别的固件,可以使用Binwalk提供的熵分析功能,帮助用户获取有价值的信息。同时,Binwalk还提供固件比对功能,帮助用户发现不同版本固件的差异。
四、 实验核心思路
1.利用BinWalk命令对固件进行分析
2.保存固件扫描结果
五、 实验步骤及截图
1.利用BinWalk命令对固件进行分析
打开kali linux虚拟机终端:
输入命令执行对固件firmware.bin的自动扫描:“binwalk code/firmware.bin”,“code/ /firmware.bin”是实验中固件的存放地址:
运行结果:
在终端输入“binwalk -e code/firmware.bin”,“-e”表示提取已知的文件及系统类型。这个命令可以按照预定义的配置文件中的提取方法从固件中提取探测到的文件及系统:
在终端输入“binwalk -Me code/firmware.bin”,“-Me”表示根据magic签名的扫描结果对固件进行递归提取:
选项“-d”和“–depth==”用于限制递归提取的深度,默认深度为8,仅当“-Me”选项存在时有效。在终端下输入“binwalk -Me -d 5 code/firmware.bin”,这个命令可以限制递归的提取深度为5:
终端输入“binwalk -I code/firmware.bin”。选项“-I”用于显示所有的扫描结果,包括扫描过程中被定义为“invalid”的项:
终端输入“binwalk -W code/firmware.bin code/firmware2.bin”。选项“-W”对给定的文件进行字节比较,可以指定多个文件,这些文件的比较结果会按dexdump方式显示,绿色表示在所有文件中这些字节都是相同的,红色表示在所有文件中这些字节都是不同的,蓝色表示这些字节仅在某些文件中是不同的。该选项可以与“–block”、“–length”、“–offset”及“–terse”选项一起使用,由于对比时间过长,可选择按“Ctrl+C”终止对比:
选项“-W”与“–block”和“–length”一起使用时,可以对指定模块中某一固定长度的数据进行比较,从而节省不必要的比较时间。输入“binwalk -W --block=8 --length=64 code/firmware.bin code/firmware2.bin”这个命令用于对模块8中前64字节的数据进行比较:
BinWalk执行结果的内容通常是很多的,所以它往往是以文件方式来保存记录。选项“-f”和“–log=”用于将扫描结果保存到一个指定的文件中。如果不与“-q”或“–quit”选项合用,会同时在屏幕以及日志文件中输出。在终端下输入“binwalk -f code/firmware.log -q code/firmware.bin”后,仅在code/binwalk.log文件中可以看到结果:
2.保存固件扫描结果
打开binwalk.log文件,可以看到已保存的扫描结果:
六、 实验总结
binwalk是一个可靠且流行的工具,用于处理运行某种操作系统的设备的固件。它被谈论的很多,binwalk虽然不是固件分析工具的全部,但却非常有用和简单。
默认情况下, binwalk会在高层级中遍历二进制文件中的所有字节,寻找魔术字节。如果找到一个,它将在打印到stdout的表上进行报告。
它还可以“分割”或“提取”它找到的每个片段,因此可以单独查看它。使用-e标志指定它应该提取文件,而不是将它发现的所有内容打印到stdout。根据运行binwalk的文件的文件名,提取的文件全部进入名为_filename.extracted(或_filename- [int] .extracted,如果该文件夹已存在)的目录中。
由于它的性质,几乎肯定会遇到误报。文件越大,得到误报的可能性就越大。巧合的是,文件将包含给定顺序的魔术字节,以防binwalk的魔术字节解析器把所报告的内容都误认为是有效的。
所以,当使用binwalk时,通常可以根据运行的环境估计出能看到什么文件类型。如果正在查看的设备运行的是嵌入式Linux,那么就会获得某种ROM文件系统,不过也可能是squashfs、cramfs或jffs2。还可以假设你将看到zImage或uImage块,通常情况下可能还希望看到引导加载程序映像。
本次的binwalk固件提取分析实验,帮助我理解了binwalk工具的作用与功能,并对binwalk固件分析的常用命令和对应的结果有了一定的掌握,这些都为未来的关于固件分析的深入学习打下了基础。
版权归原作者 Champhoenix 所有, 如有侵权,请联系我们删除。