【实战】如何优雅的在Win11/10系统下运行Rust编写的binwalk v3.1.1

【实战】如何优雅的在Win11/10系统下运行Rust编写的binwalk v3.1.1

写在前面binwalk For Win11主要改变纯净构建构建完成以后的文件列表binwalk_for_Win_v3 可能遇到的几个问题Fix 修复Win版本不能完美squashfs解压缩问题,本地需要WSL2 环境、docker环境或者qemu环境。Fix 修复Win系统中“lZMA解压失败”
binwalk_for_WinGUI的问题路由器固件解包以后重新打包的问题重新LZMA压缩编辑过的固件使用DD工具重新和头文件固件合并 或者和原始固件合并完成打包就可以去虚拟机运行固件 通过就可以烧录了
如何构建 dev-WinBinwalk 构建脚本使用说明简介特性工作原理使用方法Windows系统Linux/macOS系统

目录结构常见问题1. 下载依赖失败2. 权限不足3. 构建失败
清理构建环境注意事项故障排除查看日志文件
联系方式

写在前面

昨天海鲜市场上有个客户,咨询一个binwalk程序,希望有个使用双击exe文件就能运行的binwalk v3.1.1版本,所以就有了这个项目

binwalk For Win11

V3 .x以后是用RUST完全重构的,基本上抛弃了win版本,主要部署在linux、docker环境中。但是我们总有客户喜欢“双击exe”就能执行项目源地址:https://github.com/ReFirmLabs/binwalkdevWinGUi项目地址:https://github.com/aspnmy/binwalk.git -b devWin如果没兴趣看文章就行自己构建win版本的v3.1.1可以拉这个版本的代码,我会持续更新的,因为有客户需要双击exe执行


git clone -b devWin https://github.com/aspnmy/binwalk.git

这个版本和源项目https://github.com/ReFirmLabs/binwalk代码有很多不同的地方,所以不能在源项目上构建,构建会失败,或者运行程序会各种报错。

主要改变

由于原作者在v3.0以后的版本中完全去除了setup.py编译脚本,所以如果需要让v3.1.1能重新构建Win的版本,就要对rust的源码部分进行Win系统的代码适配:
主要影响到的代码 :main.rs 、squashfs.rssquashfs.rs是主要受影响代码,牵涉到squashfs解包LMZA文件格式为了提供代码的粗壮性,我还在项目中塞了一个unsquashfs.exe 位于.sqfs_for_winsqfs_for_win.7z 压缩包中,是squashfs压缩独立解包组件,命令行执行,作为备用方案。

纯净构建

纯净构建的意思是,运行项目下 python builderuild.py,会在此目录下自主安装构建程序用的依赖组件:Rust、mingwx64等,不需要依赖系统path环境,避免造成不必要的配置污染。为了小内存的设备需要,全程是用 mingwx64作为编译组件的比较少内存,如果需要使用vs作为构建组件,需要在build.py中修改对应代码。

构建完成以后的文件列表

readme.md 帮助文件binwalk.exe binwalk编译在win11的命令行工具 建议在pwsh下 输入 .inwalk –help 获得使用方法binwalk_gui.exe binwalk.exe程序WinGUI文件,双击执行即可,需要和binwalk.exe在同个目录下unsquashfs.exe 位于.sqfs_for_winsqfs_for_win.7z 压缩包中,是squashfs压缩独立解包组件,命令行执行,作为备用方案Tests 中是测试解包的Dlink的固件例子

binwalk_for_Win_v3 可能遇到的几个问题

Fix 修复Win版本不能完美squashfs解压缩问题,本地需要WSL2 环境、docker环境或者qemu环境。

下载 binwalk-devWin-v3.1.1-r4版本 ,解压后,首先运行Install.exe程序,安装本地Wsl/Wsl2环境(需要bios支持),然后完成安装后再运行binwalk_gui.exe文件就能用WinGUI文件正常解包squashfs文件了,原理就是再wsl环境中运行binwalk-docker版本,但是docker的虚拟宿主文件夹受binwalk_gui.exe文件夹管理,可以上传bin文件,解包后下载解包后的文件。本地设备没有wsl环境如何处理:运行Install.exe程序的时候,跳出提示,安装dockerdesktop版本、还是wsl版本,能用wsl用wsl,不能用可以选择dockerdesktop版本,这些都(需要bios支持),如果bios确实不支持的,选择安装qemu虚拟机版本,qemu版本会本地安装一个最小linux内核,一般装kali系统的命令行版或者是alnple或者是openart系统,运行成功以后,运行binwalk-linux版本,如下图:
binwalk-v3.1.1-rc2-devWin 和binwalk-devWin-v3.1.1-r4版本 在windows下运行实现的业务路径是不一样的:binwalk-devWin-v3.1.1-r4更完美但是体积更大,并且可以和源项目保持更新;binwalk-v3.1.1-rc2-devWin使用其他组件完成业务,体积比较小,但是兼容性较差,短期内不进行更新

Fix 修复Win系统中“lZMA解压失败”

可直接下载 v3.1.1-rc2-devWin版本,目前在Win系统中重构使用7-zip与LZMA本身的API实现了解压业务

Extraction of squashfs data at offset 0x1174A4 failed! 报错

这个是由于squashfs-tools工具链在win系统下不理想造成的解压失败

所以我这个适配版本中使用的是外部工具包“sqfs_for_win”

使用的时候把sqfs_for_win.zip 解压缩到binwalk.exe同级目录下的sqfs_for_win路径下即可【目前这个问题已经在v3.1.1-rc2-devWin中重构修复 】

binwalk_for_WinGUI的问题

考虑到部分用户只会双击exe 不会使用python脚本运行GUI交互界面,所以binwalk_gui.exe,使用pyinstaller进行编译后的独立exe GUI文件,使用binwalk_gui.exe的时候,需要和binwalk.exe在同级目录下,才能正确调用

-c参数可以解非标准bin文件

路由器固件解包以后重新打包的问题

重新LZMA压缩编辑过的固件

这个比较简单所以没写GUI程序,mksquashfs也在sqfs_for_win目录下在cmd 下运行


mksquashfs squashfs-root/ new_rootfs.bin -comp xz
# mksquashfs 输出的目录/  编辑过的bin文件路径 -comp xz

把自己修改过的bin文件重新进行LZMA压缩

使用DD工具重新和头文件固件合并 或者和原始固件合并


dd if=<原始固件> of=head.bin bs=1 count=<头部大小>
cat head.bin new_rootfs.bin > new_firmware.bin

DD 也有Win对应工具 就简单跳过了

完成打包就可以去虚拟机运行固件 通过就可以烧录了

如何构建 dev-Win

Binwalk 构建脚本使用说明

简介

这个构建脚本在
builder
目录下创建完全隔离的构建环境,包括MinGW64和Rust工具链,不依赖系统中已安装的环境,确保构建过程的一致性和可靠性。

特性

完全隔离的构建环境:所有依赖都安装在
builder/local_env
目录下跨平台支持:兼容Windows、Linux和macOS自动下载和配置:自动下载并安装所需的MinGW64和Rust工具链详细的日志输出:提供清晰的进度指示和错误信息健壮的错误处理:遇到问题时提供详细的排查建议路径规范化:自动处理不同操作系统的路径分隔符问题

工作原理


builder/local_env
目录下创建隔离的构建环境下载并安装MinGW64(仅Windows系统需要)下载并安装Rust工具链到本地环境配置GNU工具链和目标三元组创建Cargo配置文件,指定正确的链接器路径构建项目并输出结果

使用方法
Windows系统

确保已安装Python 3.6或更高版本打开命令提示符或PowerShell导航到项目的
builder
目录运行命令:
python build.py

注意:脚本会自动下载和安装7z工具到本地环境,无需预先安装系统7z

Linux/macOS系统

确保已安装Python 3.6或更高版本打开终端导航到项目的
builder
目录给脚本添加执行权限:
chmod +x build.py
运行脚本:
./build.py

python3 build.py

目录结构


binwalk/
├── builder/
│   ├── build.py         # 主构建脚本
│   ├── README.md        # 本文档
│   └── local_env/       # 本地构建环境(自动创建)
│       ├── mingw64/     # MinGW64工具链(Windows)
│       └── rust/        # Rust工具链
│           ├── cargo/   # Cargo配置和缓存
│           └── rustup/  # Rustup数据
├── .cargo/              # 自动创建的Cargo配置目录
└── target/              # 构建输出目录

常见问题

1. 下载依赖失败

症状:脚本无法下载MinGW64、Rust或7-Zip

解决方案

检查网络连接确保防火墙允许访问GitHub、Rust官网和7-Zip官网手动下载并放到指定目录:
MinGW64: 下载到
builder/local_env/mingw64.7z
Rust: 可以手动安装到
builder/local_env/rust
目录7-Zip: 下载到
builder/local_env/7z
目录,并确保包含7z.exe文件

2. 权限不足

症状:无法创建目录或写入文件

解决方案

Windows: 以管理员身份运行命令提示符或PowerShellLinux/macOS: 使用sudo或以root用户运行脚本

3. 构建失败

症状:Cargo构建过程报错或解压失败

解决方案

查看详细的错误输出确保磁盘有足够空间(至少需要2GB)检查项目的Cargo.toml文件是否正确尝试删除
builder/local_env
目录后重新运行脚本对于解压问题,脚本会自动尝试使用Python的py7zr库作为备选方案

清理构建环境

如果需要清理构建环境,只需删除
builder/local_env
目录即可:


# Windows
del /s /q builderlocal_env

# Linux/macOS
rm -rf builder/local_env

注意事项

首次运行会下载大量依赖,需要较长时间和稳定的网络连接本地环境占用约2-3GB磁盘空间构建脚本不会修改系统环境变量所有构建产物都位于项目根目录的
target
文件夹中脚本会自动下载和安装7z工具到本地环境,无需预先安装系统7z对于解压操作,脚本采用三级解压策略:优先使用本地7z工具 → 尝试系统7z → 使用Python的py7zr库

故障排除

如果遇到问题,请查看脚本输出的详细日志,日志中包含了完整的执行过程和错误信息。

对于Windows系统,构建失败后的排查步骤:

检查是否有足够权限访问
builder
目录尝试手动解压
builder/local_env/mingw64.7z
(如果脚本下载了但解压失败)以管理员身份运行脚本尝试使用Python的测试脚本验证7z功能:
python test_7z_extract.py

查看日志文件

脚本会生成详细的日志文件,可以帮助排查问题:

日志文件位置:
builder/build.log
包含完整的执行过程和错误详细信息

联系方式

如有其他问题,请在项目仓库提交Issue。


此构建脚本设计用于创建隔离的构建环境,确保在任何系统上都能获得一致的构建结果。

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
追风少年的头像 - 鹿快
评论 抢沙发

请登录后发表评论

    暂无评论内容