以下是所引用固件的直接链接:
ftp://ftp2.dlink.com/PRODUCTS/DIR-601/REVB/DIR-601_REVB_FIRMWARE_2.01.ZIP
我无法更具体地通过使用命令dd
来提取固件二进制文件中的内核来从该特定路由器中提取文件系统。
我的步骤:
我曾经binwalk dir601_revB_FW_201.bin
发现有问题的 lzma 位于字节 #148(所以很早就发现了)。我尝试使用以下命令提取此 lzma 存档:
dd if=dir601_revB_FW_201.bin skip=148 bs=1 count=8388608 of=kernel.lzma
档案的字典大小在哪里count
但无济于事,因为当我尝试unlzma
提取档案时它一直给我compressed data is corrupt
错误。
如何提取并解压该档案?
答案1
在我的 Debian 中
binwalk -e dir601_revB_FW_201.bin
生成(除其他外)一个文件。下面是我使用和./_dir601_revB_FW_201.bin.extracted/94
获取相同文件的步骤,就像您尝试的那样。dd
unlzma
我运行了你的原始命令和来自另一个答案。在这两种情况下,我都可以用 进行提取7za
(虽然有错误),但不能用 sole 进行提取unlzma
。我能够改进方法,使其unlzma
有效。
首先你count=8388608
显然是错的,dir601_revB_FW_201.bin
因为更小。正确的数字在标题中:
uImage header, header size: 64 bytes, […] image size: 819799 bytes, […]
你的命令应该是
dd if=dir601_revB_FW_201.bin skip=148 bs=1 count=819799 of=x.lzma
如果我提取的字节数少了 1 个,unlzma x.lzma
我的 Debian 就会报错unexpected end of input
。如果我提取的字节数多了 1 个,它又会报错compressed data is corrupt
。
准确的数字819799
不会引发工具的抱怨,一切正常。之后我可以binwalk x
(正如另一个答案已经指出的那样)。
该文件与获得的x
文件相同(已通过 确认)。94
binwalk -e
cmp
答案2
我建议你稍微改变一下你的dd
选择。试试这样:
dd if=dir601_revB_FW_201.bin ibs=1 skip=148 of=x.lzma
然后你可以使用它来解压缩lzma -d x.lzma
,你binwalk x
会看到类似这样的内容:
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
77724 0x12F9C Certificate in DER format (x509 v3), header length: 4, sequence length: 30
1769504 0x1B0020 Linux kernel version 2.6.31
1832080 0x1BF490 CRC32 polynomial table, little endian
2081839 0x1FC42F Neighborly text, "neighbor %.2x%.2x.%.2x:%.2x:%.2x:%.2x:%.2x:%.2x lost on port %d(%s)(%s)"