Hey guys,
I'm trying to unpack SquashFS on the WNR1000v3 1.0.2.26 but have been running into lots of issues.
The firmware image is available here: http://www.downloads.netgear.com/files/ … 0.59NA.chk
The source for it is available here: http://www.downloads.netgear.com/files/ … rc.tar.zip
binwalk 0.4.2 provides the following output:
DECIMAL HEX DESCRIPTION
-------------------------------------------------------------------------------------------------------
58 0x3A TRX firmware header, little endian, header size: 28 bytes, image size: 2584576 bytes, CRC32: 0x9861D9FF flags/version: 0x10000
86 0x56 LZMA compressed data, properties: 0x5D, dictionary size: 65536 bytes, uncompressed size: 1634304 bytes
592666 0x90B1A Squashfs filesystem, little endian, non-standard signature, version 3.0, size: 1988809 bytes, 421 inodes, blocksize: 65536 bytes, created: Fri Jul 16 06:30:19 2010
Extract the filesystem at offset 592666:
$ dd if=WNR1000v3-V1.0.2.26_51.0.59NA.chk of=filesystem.bin bs=592666 skip=1
3+1 records in
3+1 records out
1991968 bytes (2.0 MB) copied, 0.0391462 s, 50.9 MB/s
As noted by binwalk, the filesystem has a non-standard magic number:
$ hexdump -C filesystem.bin | head -n2
00000000 73 68 73 71 a5 01 00 00 84 7a 00 37 dc 7c 00 de |shsq.....z.7.|..|
00000010 8a 04 08 40 06 01 40 02 00 63 00 09 03 00 00 00 |...@..@..c......|
Trying to unpackage it immediately returns the following error:
$ unsquashfs filesystem.bin
Can't find a SQUASHFS superblock on filesystem.bin
...which is to be expected. Correct the magic number to "hsqs" and now:
$ unsquashfs filesystem.bin
Parallel unsquashfs: Using 2 processors
gzip uncompress failed with error code -3
read_block: failed to read block @0x1e547f
read_fragment_table: failed to read fragment table block
FATAL ERROR aborting: failed to read fragment table
A little sleuthing returns that the filesystem is actually compressed using lzma, not gzip, so try a different compilation:
$ ../../../firmware-mod-kit-read-only/trunk/src/others/squashfs-4.0-lzma/unsquashfs-lzma filesystem.bin
Parallel unsquashfs: Using 2 processors
uncompress failed, unknown error -3
read_block: failed to read block @0x1e547f
read_fragment_table: failed to read fragment table block
FATAL ERROR aborting: failed to read fragment table
I can confirm that none of the publicly available unsquashfs utilities I can find are able to unpackage the file. I've tried using every version of unsquashfs, every variant of it, in every package that incorporates it (e.g., firmware-mod-kit). firmware-mod-kit's scripts are unsuccessful as well.
Looking through the firmware source code, I see:
$ find . -name *squash*
./src/router/mipsel-uclibc/target.squashfs
./src/router/squashfs
./src/router/squashfs/mksquashfs.c
./src/router/squashfs/mksquashfs.h
./src/linux/linux/scripts/squashfs
./src/linux/linux/scripts/squashfs/mksquashfs
./src/linux/linux/scripts/squashfs/mksquashfs.c
./src/linux/linux/scripts/squashfs/mksquashfs.h
./src/linux/linux/scripts/squashfs/squashfs_fs.h
./src/linux/linux/fs/squashfs
./src/linux/linux/fs/squashfs/.squashfs2_0.o.flags
./src/linux/linux/fs/squashfs/squashfs2_0.o
./src/linux/linux/fs/squashfs/squashfs.o
./src/linux/linux/fs/squashfs/squashfs.h
./src/linux/linux/fs/squashfs/squashfs2_0.c
./src/linux/linux/fs/squashfs/.squashfs.o.flags
./src/linux/linux/include/linux/squashfs_fs_i.h
./src/linux/linux/include/linux/squashfs_fs.h
./src/linux/linux/include/linux/squashfs_fs_sb.h
./src/linux/linux/include/config/squashfs.h
./src/linux/linux/include/config/squashfs
...and unfortunately no unsquashfs.c code. In the meantime, I've contacted Netgear asking if they have it available.
The exact version they're using is a bit confusing:
$ grep "mksquashfs version" -r .
./src/router/mipsel-uclibc/target/lib/modules/2.4.20/build/scripts/squashfs/mksquashfs.c: printf("mksquashfs version 2.2-r2\n");\
./src/router/squashfs/mksquashfs.c: printf("mksquashfs version 3.2-r2 (2007/01/15)\n");\
./src/linux/linux/scripts/squashfs/mksquashfs.c: printf("mksquashfs version 2.2-r2\n");\
Grepping for our non-standard magic number reveals:
$ grep 0x73687371 -r .
./src/router/mipsel-uclibc/target/lib/modules/2.4.20/build/include/linux/squashfs_fs.h:#define SQUASHFS_MAGIC_LZMA_SWAP 0x73687371
./src/linux/linux/include/linux/squashfs_fs.h:#define SQUASHFS_MAGIC_LZMA_SWAP 0x73687371
Okay, great. Some Googling and it seems that this patch should do the trick: https://dev.openwrt.org/browser/trunk/t … ?rev=28489
Patch unsquashfs, rebuild, and:
$ ./unsquashfs ../../filesystem.bin
Parallel unsquashfs: Using 2 processors
lzma uncompress failed with error code 1
read_block: failed to read block @0x1e547f
read_fragment_table: failed to read fragment table block
FATAL ERROR aborting: failed to read fragment table
Would anyone have any advice to offer, or mind lending a hand trying to get this filesystem unpackaged? Thank you in advance.
(Last edited by mncoppola on 2 Mar 2012, 20:09)