firmware-uncompress
条评论在调试一些固件的时候,发现它们的包binwalk识别不了,解不出来。这个时候就要另外想办法。
下面例举2个我遇到的情况。
1. 某 openwrt bin ,binwalk无法识别
Binwalk xxx.bin
可以看到只能识别到头部,下面xz compressed data 实际上是文件系统,被加密了。用binwalk解不出来。
这里用 firmware-mod-kit /trunk/src/others/squashfs-4.2/ unsquashfs 的工具解包。
具体做法如下:
1.1.dd 分离出下面文件系统部分,命令如下。
dd if=mt7620-WE1826-20190809_202616.bin of=mt2019.bin skip=0012ed53 bs=1,分离出的文件取名 mt2019
文件系统有个MagicValue值:shsq,所以skip位置要计算一下。另外这个文件的版本号 major = 3,位置如下图红框。
1.2.分析squashfs-4.2 文件下的源码 unsquashfs.c 文件,可以知道要解包的话,MagciValue要是0x73717368 也就是字符:hsqs,且版本号 major须是4。对应的源代码如下,read_super() 函数中的。
1.3.修改分离出的mt2019文件
改MagicValue为 68 73 71 73 ,修改版本号为 04,修改后取名mt2019_hsqs.bin
1.4.最后用 firmware-mod-kit /trunk/src/others/squashfs-4.2/ unsquashfs 工具解包,命令如下。
./unsquashfs mt2019_hsqs.bin 可解出。
2. 某link bin,binwalk无法识别
下面用到的方法参考链接给出。
2.1 利用旧版固件的解密程序
访问D-link的ftp:ftp://ftp2.dlink.com/PRODUCTS/DIR-882/REVA/
上面有发布过的旧版。这里选择的版本是:DIR-882_REVA_FIRMWARE_v1.10B02.zip
解压该文件,如下图。
用bingwalk 解密 DIR882A1_FW104B02_Middle_FW_Unencrypt.bin,这个bin文件是没有加密的。解密出系统之后,在目录:1
A1_FW104B02_Middle_FW_Unencrypt.bin.extracted/_A0.extracted/n.extracted/_A0.extracted/_8AB758.extracted/cpio-root/bin
下有个 imgdecrypt 文件,这个文件就是用来解密的。
2.2使用 imgdecrypt
这里我们要使用这个imgdecrypt 来解密,所以先启动一个shell。
进入目录:1
_DIR882A1_FW104B02_Middle_FW_Unencrypt.bin.extracted/_A0.extracted/_8AB758.extracted/cpio-root
使用命令1
sudo chroot . /bin/sh
shell启动成功后,使用命令 ./bin/imgdecrypt DIR867A1_FW100B07.BIN
DIR867A1_FW100B07.BIN就是binwalk无法识别的加密Bin
这个时候,再次使用 binwalk 解密 DIR867A1_FW100B07.BIN 就能成功。
参考
https://www.thezdi.com/blog/2020/2/6/mindshare-dealing-with-encrypted-router-firmware