下一步是-e使用binwalk. 然后可以进一步分析这些提取的文件。binwalk使用-A引导加载程序和内核文件上的选项运行将提供有关固件指令集架构的线索。执行熵扫描-E可以深入了解提取文件的结构,并且对于识别压缩或加密区域很有用。
有多种用于提取 squashfs 文件系统的工具,例如squashfs-tools和sasquatch
。
固件分析中采用的方法的一个很好的例子可以在这里找到:逆向工程固件:Linksys WAG120N
固件下载链接可用后更新:
为确保binwalk可以正确提取 SquashFS 文件系统映像,请执行以下步骤:
安装squashfs-tools:
sudo apt-get install squashfs-tools
在~中,sasquatch从github克隆:
git clone https://github.com/devttys0/sasquatch.git
在~/sasquatch,执行build.sh(检查README.md以确保安装了所有依赖项)
还要检查binwalk本地安装的版本:
$ binwalk
Binwalk v2.1.2b
Craig Heffner, http://www.binwalk.org
萃取
计算固件二进制文件的 md5sum:
$ md5sum FW_E1200v2.0.7.005_US_20160713_code.bin
eb3752a5b72ccb0c9a92079fab88663e FW_E1200v2.0.7.005_US_20160713_code.bin
运行binwalk签名扫描以确认输出:
$ binwalk FW_E1200v2.0.7.005_US_20160713_code.bin
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
32 0x20 TRX firmware header, little endian, image size: 7684096 bytes, CRC32: 0xB533F216, flags: 0x0, version: 1, header size: 28 bytes, loader offset: 0x1C, linux kernel offset: 0x14FF20, rootfs offset: 0x0
60 0x3C gzip compressed data, maximum compression, has original file name: "piggy", from Unix, last modified: 2016-07-13 03:17:53
1376064 0x14FF40 Squashfs filesystem, little endian, non-standard signature, version 3.0, size: 6307458 bytes, 1721 inodes, blocksize: 65536 bytes, created: 2016-07-13 03:23:19
输出似乎与原始帖子中的输出匹配。
萃取:
$ binwalk -e FW_E1200v2.0.7.005_US_20160713_code.bin
文件被提取到目录_FW_E1200v2.0.7.005_US_20160713_code.bin.extracted/:
$ file *
14FF40.squashfs: data
piggy: FoxPro FPT, blocks size 0, next free block index 15993608
squashfs-root: directory
里面squashfs-root是提取的文件系统:
$ ll squashfs-root/
total 88
drwxrwxrwx 13 user01 user01 4096 Jul 12 2016 ./
drwxr-xr-x 3 user01 user01 4096 Jun 26 15:16 ../
drwxr-xr-x 2 user01 user01 4096 Jul 12 2016 bin/
drwxr-xr-x 2 user01 user01 4096 Jul 12 2016 dev/
drwxrwxrwx 4 user01 user01 4096 Jul 12 2016 etc/
drwxr-xr-x 3 user01 user01 4096 Jul 12 2016 lib/
drwxr-xr-x 2 user01 user01 4096 Jul 12 2016 mnt/
drwxr-xr-x 2 user01 user01 4096 Jul 12 2016 proc/
drwxr-xr-x 2 user01 user01 12288 Jul 12 2016 sbin/
drwxr-xr-x 2 user01 user01 4096 Jul 12 2016 sys/
drwxr-xr-x 2 user01 user01 4096 Jul 12 2016 tmp/
drwxrwxrwx 6 user01 user01 4096 Jul 12 2016 usr/
lrwxrwxrwx 1 user01 user01 7 Jun 26 15:16 var -> tmp/var
drwxr-xr-x 32 user01 user01 28672 Jul 12 2016 www/
小猪
运行file对piggy产生假阳性:
piggy: FoxPro FPT, blocks size 0, next free block index 15993608
运行binwalk反对piggy表明它包含 Linux 内核代码:
$ binwalk piggy
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
2617344 0x27F000 Linux kernel version "2.6.22 (zhang@sw3) (gcc version 4.2.3) #5 Tue Jun 7 18:33:13 HKT 2016"
2641040 0x284C90 CRC32 polynomial table, little endian
2656556 0x28892C CRC32 polynomial table, little endian
2852300 0x2B85CC Unix path: /usr/gnemul/riscos/
2854956 0x2B902C Unix path: /usr/lib/libc.so.1
2927975 0x2CAD67 Neighborly text, "NeighborSolicitsts"
2927999 0x2CAD7F Neighborly text, "NeighborAdvertisementsmp6OutDestUnreachs"
2928200 0x2CAE48 Neighborly text, "NeighborSolicitsirects"
2928228 0x2CAE64 Neighborly text, "NeighborAdvertisementssponses"
2930275 0x2CB663 Neighborly text, "neighbor %.2x%.2x.%.2x:%.2x:%.2x:%.2x:%.2x:%.2x lost on port %d(%s)(%s)"
由 生成的熵图binwalk -EJ piggy显示了一个大的连续区域,其熵大约为 0.68:

这种熵水平与包含目标代码的区域的预期一致。
我们可以做出什么样的二进制文件的指令集架构是通过运行一个受过教育的猜测binwalk与-A争论:
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
1788 0x6FC MIPSEL instructions, function epilogue
2636 0xA4C MIPSEL instructions, function epilogue
4540 0x11BC MIPSEL instructions, function epilogue
4932 0x1344 MIPSEL instructions, function epilogue
6092 0x17CC MIPSEL instructions, function epilogue
6476 0x194C MIPSEL instructions, function epilogue
6952 0x1B28 MIPSEL instructions, function epilogue
7040 0x1B80 MIPSEL instructions, function epilogue
8024 0x1F58 MIPSEL instructions, function epilogue
8392 0x20C8 MIPSEL instructions, function epilogue
9532 0x253C MIPSEL instructions, function epilogue
9840 0x2670 MIPSEL instructions, function epilogue
12552 0x3108 MIPSEL instructions, function epilogue
12682 0x318A MIPS instructions, function epilogue
12836 0x3224 MIPSEL instructions, function epilogue
13364 0x3434 MIPSEL instructions, function epilogue
ISA 可能是 MIPS 小端。