提取 ARM 启动 zImage

逆向工程 固件 手臂
2021-06-19 05:49:43

我正在尝试分析运行 Linux 并连接各种家庭自动化和安全设备的系统的固件。每次启动时,运行 ARMv5TEGM8125 处理器都会从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 个文件和数百个提取ZlibJFFS2数据的文件夹分析完这些后,我想我应该看看启动映像。

我通过运行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=39736file返回arm.gz: gzip compressed data, unknown method, has CRC, extra field, has comment, encrypted, last modified: Mon Sep 15 08:57:49 1975gunzip拒绝解压缩,说unknown method 60 -- not supported大多数后来出现的1f8b都没有在字节的开头对齐,所以我认为它们不是雕刻和解压缩的好候选。似乎第一次发生和随后的发生都可能只是偶然。

这是一个真正的zImage的,或者可以binwalkfile混淆?我怎么知道?我如何提取它?

不幸的是,我无法提供二进制文件供您自己阅读。

更新 - 2019 年 6 月 25 日

我已经按照朱利安的要求包含了文件的熵图。看起来有问题的部分确实被压缩了。

spidump_entropy

更新 - 7/5/2019

与专家进一步审查后,似乎binwalk错误地识别了文件的类型。看起来有一个自定义解包器,我需要反汇编或运行它,然后从内存中获取解包的图像。

0个回答
没有发现任何回复~