我有一个必须反转的 ROM 转储固件(作为一项任务)。Binwalk 输出:
十进制十六进制描述 -------------------------------------------------- ------------------------------ 88 0x58 uImage header, header size: 64 bytes, header CRC: 0x535A17E8, created: 2015-05-13 06:08:01, image size: 1168920 bytes, Data Address: 0x80002000, Entry Point: 0625A17E8, 0624A0000000000000x300 OS:Linux,CPU:MIPS,镜像类型:OS Kernel Image,压缩类型:lzma,镜像名称:“Moxa-IW awk series” 152 0x98 LZMA压缩数据,属性:0x5D,字典大小:16777216字节,未压缩大小:3392000字节 1169108 0x11D6D4 Squashfs 文件系统,小端,4.0 版,压缩:lzma,大小:5833114 字节,806 个 inode,块大小:131072 字节,创建时间:2015-05-13 06:07:57 7005944 0x6AE6F8 Squashfs 文件系统,小端,4.0 版,压缩:lzma,大小:2733378 字节,330 个 inode,块大小:131072 字节,创建时间:2015-05-13 06:07:58
提取数据并解压缩 LZMA 后,我有二进制文件“98”,binwalk 输出:
十进制十六进制描述 -------------------------------------------------- ------------------------------ 1866012 0x1C791C DER 格式的证书 (x509 v3),头部长度:4,序列长度:4 2169826 0x211BE2 mcrypt 2.5 加密数据,算法:“!0B”,密钥大小:12290 字节,模式:“B”, 2605176 0x27C078 Linux 内核版本“2.6.31--LSDK-WLAN-10.2.85 () #1 PREEMPT Wed May 13 14:00:35 CST 2015” 2613200 0x27DFD0 gzip 压缩数据,最大压缩,来自 Unix,最后修改时间:2015-05-13 06:00:00 2693056 0x2917C0 CRC32 多项式表,小端 2724896 0x299420 CRC32 多项式表,大端 3024579 0x2E26C3 邻居文本,“邻居 %.2x%.2x.%.2x:%.2x:%.2x:%.2x:%.2x:%.2x 在端口 %d(%s)(%s) 上丢失” 3391488 0x33C000 ASCII cpio 存档(无 CRC 的 SVR4),文件名:“/dev”,文件名长度:“0x00000005”,文件大小:“0x00000000” 3391604 0x33C074 ASCII cpio 存档(无 CRC 的 SVR4),文件名:“/dev/console”,文件名长度:“0x0000000D”,文件大小:“0x00000000” 3391728 0x33C0F0 ASCII cpio 存档(无 CRC 的 SVR4),文件名:“/root”,文件名长度:“0x00000006”,文件大小:“0x00000000” 3391844 0x33C164 ASCII cpio 存档(SVR4 无 CRC),文件名:“TRAILER!!!”,文件名长度:“0x0000000B”,文件大小:“0x00000000”
在偏移量 1866012 之前有一些无法识别的数据。当我解压这个二进制文件时,我得到内核配置文件、cpio 存档和一些二进制文件 1C791C.crt,据我所知,其中包含内核文件。如何正确提取引导加载程序和 Linux 内核文件?看: