我正在尝试分析运行 Linux 并连接各种家庭自动化和安全设备的系统的固件。每次启动时,运行 ARMv5TE的GM8125 处理器都会从SPI 闪存加载固件映像。我使用 Bus Pirate 连接到闪存并取消了固件映像。当我运行binwalk
它时,我得到以下信息。
$ binwalk spidump.bin
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
271284 0x423B4 Sega MegaDrive/Genesis raw ROM dump, Name: "ETIR_ON", "ECCAS",
744708 0xB5D04 CRC32 polynomial table, big endian
786432 0xC0000 gzip compressed data, maximum compression, from Unix, last modified: 1970-01-04 16:05:57 (bogus date)
917760 0xE0100 Linux kernel ARM boot executable zImage (big-endian)
9306332 0x8E00DC Zlib compressed data, compressed
9307424 0x8E0520 Zlib compressed data, compressed
9308196 0x8E0824 Zlib compressed data, compressed
9309036 0x8E0B6C Zlib compressed data, compressed
9310040 0x8E0F58 Zlib compressed data, compressed
9310220 0x8E100C Zlib compressed data, compressed
9311200 0x8E13E0 Zlib compressed data, compressed
9312104 0x8E1768 JFFS2 filesystem, little endian
9317132 0x8E2B0C Zlib compressed data, compressed
9317428 0x8E2C34 JFFS2 filesystem, little endian
9318332 0x8E2FBC Zlib compressed data, compressed
[...]
如果我运行binwalk -Mre
它,它会给我将近 6000 个文件和数百个提取Zlib
和JFFS2
数据的文件夹。分析完这些后,我想我应该看看启动映像。
我通过运行dd if=spidump.bin of=carved.bin bs=1 skip=917760 count=8388572
. 运行file
返回carved.bin: Linux kernel ARM boot executable zImage (big-endian)
。
到现在为止还挺好。这是我迷路的地方。
通过阅读此处和其他地方的其他帖子,似乎我应该搜索压缩开始位置的神奇字节——因为这是大端,我运行objdump
了很多结果(仅列出了前几行)。
$ arm-none-eabi-objdump -EB -D -m armv5te -b binary carved.bin | grep 1f8b
9b38: 1f8b3c36 svcne 0x008b3c36
1f8b0: bf2e3abe svclt 0x002e3abe
1f8b4: 0811cabb ldmdaeq r1, {r0, r1, r3, r4, r5, r7, r9, fp, lr, pc}
1f8b8: baaee7f4 blt 0xfebd9890
1f8bc: fc3711aa ldc2 1, cr1, [r7], #-680 ; 0xfffffd58
20c38: f3b1f8b9 ; <UNDEFINED> instruction: 0xf3b1f8b9
233c0: d1f8badf ldrsble fp, [r8, #175]! ; 0xaf
2c7d8: 011f8b05 tsteq pc, r5, lsl #22
2d990: e9ff1f8b ldmib pc!, {r0, r1, r3, r7, r8, r9, sl, fp, ip}^ ; <UNPREDICTABLE>
我通过运行从第一次出现的魔术字节开始雕刻文件dd if=carved.bin of=arm.gz bs=1 skip=39736
。file
返回arm.gz: gzip compressed data, unknown method, has CRC, extra field, has comment, encrypted, last modified: Mon Sep 15 08:57:49 1975
并gunzip
拒绝解压缩,说unknown method 60 -- not supported
。大多数后来出现的1f8b
都没有在字节的开头对齐,所以我认为它们不是雕刻和解压缩的好候选。似乎第一次发生和随后的发生都可能只是偶然。
这是一个真正的zImage的,或者可以binwalk
和file
混淆?我怎么知道?我如何提取它?
不幸的是,我无法提供二进制文件供您自己阅读。
更新 - 2019 年 6 月 25 日
我已经按照朱利安的要求包含了文件的熵图。看起来有问题的部分确实被压缩了。
更新 - 7/5/2019
与专家进一步审查后,似乎binwalk
错误地识别了文件的类型。看起来有一个自定义解包器,我需要反汇编或运行它,然后从内存中获取解包的图像。