使用 shsq 幻数提取 SquashFS 文件系统

逆向工程 二元分析 文件格式 固件
2021-07-06 03:35:33

有几天我试图提取路由器固件的文件系统。检查供应商提供的图像,我可以看到上面有 SquashFS 标志:

DECIMAL     HEX         DESCRIPTION
-------------------------------------------------------------------------------------------------------
52          0x34        uImage header, header size: 64 bytes, header CRC: 0x1A27096C, created: Tue Nov 27 06:52:32 2012, image size: 3448768 bytes, Data Address: 0x80000000, Entry Point: 0x8023A000, data CRC: 0x584BBD98, OS: Linux, CPU: MIPS, image type: OS Kernel Image, compression type: lzma, image name: "Linux Kernel Image"
116         0x74        LZMA compressed data, properties: 0x5D, dictionary size: 33554432 bytes, uncompressed size: 2445108 bytes
983092      0xF0034     Squashfs filesystem, little endian, non-standard signature,  version 3.0, size: 2463170 bytes,  637 inodes, blocksize: 65536 bytes, created: Tue Nov 27 06:51:11 2012 

提取文件并使用 hexdump 检查后,我发现了以下幻数shsq

00000000  73 68 73 71 7d 02 00 00  00 00 00 54 03 00 00 08  |shsq}......T....|
00000010  1c 71 b7 a0 12 71 b7 19  1f 73 00 18 03 00 00 00  |.q...q...s......|
00000020  38 72 10 00 c0 02 01 cf  54 b4 50 d4 0c 1f 10 00  |8r......T.P.....|
00000030  00 00 00 00 00 01 00 2c  00 00 00 02 00 a2 bf c2  |.......,........|
00000040  95 25 00 00 00 00 00 b6  95 25 00 00 00 00 00 be  |.%.......%......|

这不是我第一次找到这个标题,但我找不到解压缩它的解决方案。

到目前为止我尝试过的事情:

您可以在此链接中找到有关此问题的更多信息,但没有解决方案:

http://forums.modem-help.co.uk/viewtopic.php?t=9668

任何人都知道如何实现这一目标?

2个回答

0x73687371显然是一些供应商用来表示 LZMA 压缩的魔法值

我无法测试它,因为我没有图像,但这里有一篇博客文章,其中包含一些描述和源代码链接,应该可以处理它:

http://www.poppopret.org/?p=204

编辑:经过与下载站点的一些斗争,我能够获得解密的 shsq 二进制文件。我可以使用7-Zip 9.21 beta轻松打开它

在此处输入图片说明

据推测,任何更高版本也可以使用。

您可以在7z922.tar.bz2文件中找到处理 SquashFS 的源代码CPP/7zip/Archive/SquashfsHandler.cpp以便您可以尝试找出它为什么起作用以及其他方法有什么问题。

尝试补丁:http : //sourceforge.net/p/squashfs/patches/20/

在 X86_64 Debian 安装上似乎可以正常工作。