一些相关报错:
WARNING: Extractor.execute failed to run external extractor ‘sasquatch -p 1 -le -d ‘squashfs-root’ ‘%e’’: [Errno 2] No such file or directory: ‘sasquatch’, ‘sasquatch -p 1 -le -d ‘squashfs-root’ ‘%e’’ might not be installed correctly unsquashfs.c:1835:5: error: this ‘if’ clause does not guard… [-Werror=misleading-indentation] 1835 | if(swap) Filesystem uses lzma compression, this is unsupported by this version Decompressors available: gzip -bash: sasquashfs: command not found
缓解方案:
取消自动安装 ,改为手动安装squashfs-tools代替sasquashfs。
注释binwalk仓库里deps.sh的install_sasquatch后运行deps.sh
install_pip_package "setuptools matplotlib capstone pycryptodome gnupg tk"
install_yaffshiv
install_jefferson
install_ubireader
if [ $distro_version = "18" ]
then
install_cramfstools
fi
获取4.5版本及以上的squashfs-tools,链接:https://github.com/plougher/squashfs-tools.git或https://sourceforge.net/projects/squashfs/files/squashfs/
git clone https://github.com/plougher/squashfs-tools.git
cd squashfs-tools
cd squashfs-tools
make
sudo make install
此时,binwalk 可正常使用squashfs-tools进行解压(-e). 若解压squashfs依旧error,请使用firmware-mod-kit的unsquashfs脚本
解释与补充
此时,虽然我们使用binwalk所报错的“sasquatch”命令会提示报错,但对于正常使用mksquashfs工具打包的squashfs系统已能正常解包。
题中这个问题的主要原因是,binwalk使用的sasquatch仓库所使用的squashfs工具并非是最新版。甚至是这个作者自己写了个patch folder给低版本的squashfs源码打补丁(但就算打了补丁,在高版本的kali和ubuntu20+的版本依旧很难编译)
并且,不仅是sasquatch这个仓库,binwalk自己对插件这类的支持也很怪。首先就是我们的报错1,相信那是大家搜到这个问题的直接原因。这个报错虽然指出了sasquatch,并且网上的博客都叫我们去安装就好了。但是,实际上:
这个sasquatch应该是squashfs-tools的过去时。我个人测试了4.2和4.5、4.6均不会使用sasquatch这个二进制文件。 sasquatch实际上是binwalk的一个替代解压方案,当binwalk搜不到unsquashfs(squashfs-tools),才会使用sasquatch。请看源码: 这是binwalk的解压配置文件,可以在最底下发现unsquashfs是优先被调用的。但因为不知道什么原因,就算有squashfs-tools,但要是squashfs-tools解压失败会导致binwalk使用sasquatch相关的报错信息。(这里注释sasquatch后重新编译也可测试出unsquashfs实际上是会被识别的)
那么这个问题的产生原因就如上所言,是binwalk和sasquatch的版本脱节所致。
而版本问题显然也有其它解决法,比如把sasquatch的build.sh的版本号改高,等等等等。