完整安装 binwalk

之前安装 binwalk 时都是 apt 一键安装, 后面使用时发现 apt 安装的 binwalk 会因为缺少一些命令行工具无法正常工作, 因此卸载掉了 apt 安装的 binwalk, 跟着官方文档手动安装 binwalk

然而官方文档都是基于 ubuntu 进行安装的, debian 下会缺少一些包。同时官方的依赖脚本也有些过时, 我根据自己机器的情况做了一些更改

我个人有一些强迫症, 不希望软件被装到 /usr/bin, 而是 ~/.local/bin, pip 安装时都加了 –user 参数

安装本体

pip 上的版本有点老旧, 这里直接从仓库安装

1
pip3 install git+https://github.com/ReFirmLabs/binwalk.git --user

crypto

pycrypto 已停止更新, 使用 pycryptodome

1
pip3 install pycryptodome --user

图片生成以及可视化

需要依赖 pyqtgraph 和 matplotlib

1
pip3 install matplotlib PyQt5 pyqtgraph --user

运行时报错

1
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.

这是因为 libqxcb.so 找不到 libxkbcommon-x11.so.0, libxkbcommon-x11.so.0, 在 pyqt5 的更新日志中有提及

1
2
3
- [QTBUG-65503] Removed xkbcommon from bundled sources. This library is
present on all supported platforms. The minimal required version now is
0.5.0.

由于我是在 wsl 下安装的, 系统没有自带桌面环境, 是用 X11 转发到 vcxsrv 上是使用 GUI的, 因此没有带这个运行库

直接 apt 安装即可

1
sudo apt install libxkbcommon-x11-0

反汇编

binwalk 使用 capstone 进行反汇编

1
pip3 install capstone --user

安装提取工具

binwalk 运行时会依赖一些命令行工具用于提取固件

APT 一键安装的命令行工具

1
sudo apt install mtd-utils gzip bzip2 tar arj lhasa p7zip p7zip-full cabextract cramfsswap squashfs-tools sleuthkit default-jdk lzop srecord

软件包 cramfsprogs 包含命令 cramfsck, 在新版 ubuntu 和 debian 中已被移除, 我直接下载了旧版的包然后使用 dpkg 安装

1
2
3
wget http://mirrors.tuna.tsinghua.edu.cn/debian/pool/main/c/cramfs/cramfsprogs_1.1-6_amd64.deb
sudo dpkg -i cramfsprogs_1.1-6_amd64.deb
rm cramfsprogs_1.1-6_amd64.deb

安装 sasquatch

sasquatch 用于提取非标准的 SquashFS 镜像

编译时出现了同 #6 的报错, 这里使用了 @E3V3A 的解决方案, 使用 sed 修改了源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
sudo apt install build-essential liblzma-dev liblzo2-dev zlib1g-dev
git clone https://github.com/devttys0/sasquatch
cd sasquatch
wget https://downloads.sourceforge.net/project/squashfs/squashfs/squashfs4.3/squashfs4.3.tar.gz
rm -rf squashfs4.3
tar -zxvf squashfs4.3.tar.gz
cd squashfs4.3
patch -p0 < ../patches/patch0.txt
cd squashfs-tools
cd LZMA/lzmadaptive/C/7zip/Compress/LZMA/
mv LZMA.h LZMA2.h
cd ../../../../../../LZMA/lzmalt/
mv LZMA.h LZMA3.h
cd ../../
sed -i "s/#include \"LZMA.h\"/#include \"LZMA2.h\"/g" LZMA/lzmadaptive/C/7zip/Compress/LZMA/LZMADecoder.h
sed -i "s/#include \"LZMA.h\"/#include \"LZMA2.h\"/g" LZMA/lzmadaptive/C/7zip/Compress/LZMA/LZMAEncoder.h
sed -i "s/#include \"LZMA.h\"/#include \"LZMA3.h\"/g" LZMA/lzmalt/LZMADecoder.h
make
cp ./sasquatch ~/.local/bin
cd ../../../
rm -rf sasquatch

安装 jefferson

jefferson 用于提取 JFFS2 文件系统

1
2
3
sudo apt install liblzma-dev
pip2 install pyliblzma cstruct --user
pip2 install git+https://github.com/sviehb/jefferson.git --user

安装 ubi_reader

ubi_reader 用于提取 UBIFS 文件系统

ubi_reader 在更新后增加了错误检查, 有些 UBIFS 提取时会会因为 “Added fatal error check if UBI block extends beyond file size” 中断

commit:

https://github.com/jrspruitt/ubi_reader/commit/af678a5234dc891e8721ec985b1a6e74c77620b6)

由于本人有强迫症, 旧版 ubi_reader 不支持 python3, 因此直接安装的新版, 碰上问题再说吧

1
2
3
sudo apt install liblzo2-dev
pip3 install python-lzo
pip3 install git+https://github.com/jrspruitt/ubi_reader.git --user

安装 yaffshiv

安装 yaffshiv 用于提取 YAFFS 文件系统

1
pip2 install git+https://github.com/devttys0/yaffshiv --user

安装 unstuff 提取 StuffIt 档案文件

这玩意是闭源的, 没有 x64 版本

1
2
3
4
5
6
mkdir -p /tmp/unstuff
cd /tmp/unstuff
wget -O - http://my.smithmicro.com/downloads/files/stuffit520.611linux-i386.tar.gz | tar -zxv
cp bin/unstuff ~/.local/bin
cd -
rm -rf /tmp/unstuff