• 关于binwalk->sasquatch插件安装错误的缓解方案


    一些相关报错:

    1. 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
    2. unsquashfs.c:1835:5: error: this ‘if’ clause does not guard… [-Werror=misleading-indentation] 1835 | if(swap)
    3. Filesystem uses lzma compression, this is unsupported by this version Decompressors available: gzip
    4. -bash: sasquashfs: command not found

    缓解方案:

    取消自动安装,改为手动安装squashfs-tools代替sasquashfs。

    1. 注释binwalk仓库里deps.sh的install_sasquatch后运行deps.sh
    install_pip_package "setuptools matplotlib capstone pycryptodome gnupg tk"
    #install_sasquatch
    install_yaffshiv
    install_jefferson
    install_ubireader
    
    if [ $distro_version = "18" ]
    then
    install_cramfstools
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    1. 获取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 # 可能需要再安装manpages和help2man,均包安装即可
    sudo make install
    
    • 1
    • 2
    • 3
    • 4
    • 5

    此时,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,并且网上的博客都叫我们去安装就好了。但是,实际上:

    1. 这个sasquatch应该是squashfs-tools的过去时。我个人测试了4.2和4.5、4.6均不会使用sasquatch这个二进制文件。
    2. sasquatch实际上是binwalk的一个替代解压方案,当binwalk搜不到unsquashfs(squashfs-tools),才会使用sasquatch。请看源码:
      在这里插入图片描述
      这是binwalk的解压配置文件,可以在最底下发现unsquashfs是优先被调用的。但因为不知道什么原因,就算有squashfs-tools,但要是squashfs-tools解压失败会导致binwalk使用sasquatch相关的报错信息。(这里注释sasquatch后重新编译也可测试出unsquashfs实际上是会被识别的)

    那么这个问题的产生原因就如上所言,是binwalk和sasquatch的版本脱节所致。

    而版本问题显然也有其它解决法,比如把sasquatch的build.sh的版本号改高,等等等等。

  • 相关阅读:
    【redis进阶】Redis String数据类型为什么不好用
    建构小小虎丘园林,每个人都是设计师
    [附源码]Python计算机毕业设计Django高校学生宿舍管理系统
    基于FPGA的高速数据采集系统实现
    从壹开始前后端开发【.Net6+Vue3】(二)前端创建
    AdaBoost:提升机器学习的力量
    Redis系列之实现分布式自增主键
    暑假第五周总结
    SparkContext 与 SparkContext 之间的区别是什么
    常见排序算法实现
  • 原文地址:https://blog.csdn.net/Air_cat/article/details/134015436