从零开始在CentOS上成功安装Binwalk:一次真实的小爱音箱固件逆向准备之旅
写在前面最近我在尝试逆向小爱音箱Redmi版的固件需要对固件文件进行分析和提取。Binwalk作为固件分析的神器自然成了我的首选工具。然而在CentOS系统上安装Binwalk的过程却一波三折。本文将完整记录这次安装过程中的所有坑和解决方案希望能帮助到同样遇到问题的朋友。我的环境操作系统: CentOS Stream (或其他RHEL系Linux)Python版本: 3.9.23目标: 安装Binwalk用于分析小爱音箱固件踩坑实录一次完整的安装历程第一阶段天真的yum安装最开始我以为直接yum安装就能搞定bashsudo yum install binwalk结果text未找到匹配的参数: binwalk 错误没有任何匹配: binwalk原因CentOS官方仓库不包含binwalk需要EPEL仓库。第二阶段尝试EPEL仓库bashsudo yum install epel-release sudo yum install binwalk # 依然找不到原因即使是EPEL某些版本也没有预编译的binwalk包。第三阶段pip安装尝试bashsudo pip3 install binwalk # 成功安装了2.1.0 binwalk --version新问题pythonTraceback (most recent call last): File /usr/local/bin/binwalk, line 25, in module import binwalk File /usr/local/lib/python3.9/site-packages/binwalk/__init__.py, line 3, in module from binwalk.core.module import Modules, ModuleException ModuleNotFoundError: No module named binwalk.core原因pip安装的2.1.0版本不完整缺少核心模块。第四阶段尝试安装更新版本bashsudo pip3 install binwalk2.3.4 # 失败PyPI没有这个版本 sudo pip3 install githttps://github.com/ReFirmLabs/binwalk.git # 失败项目重构新发现Binwalk项目已经用Rust重写了主分支不再使用Python的setup.py第五阶段源码编译正确的姿势bash# 下载旧版本源码v2.3.2 wget https://github.com/ReFirmLabs/binwalk/archive/refs/tags/v2.3.2.tar.gz tar -zxvf v2.3.2.tar.gz cd binwalk-2.3.2 sudo python3 setup.py install验证安装bashwhich binwalk # /usr/local/bin/binwalk binwalk --version # Binwalk v2.3.2 ✅最终解决方案完整安装步骤1. 彻底清理环境bash# 卸载已有的binwalk sudo pip3 uninstall binwalk -y 2/dev/null # 删除残留文件 sudo rm -f /usr/local/bin/binwalk /usr/bin/binwalk 2/dev/null sudo rm -rf /usr/local/lib/python3.9/site-packages/binwalk* 2/dev/null # 清理临时目录 cd /tmp sudo rm -rf binwalk binwalk-* *.tar.gz 2/dev/null # 刷新命令缓存 hash -r2. 下载正确版本的源码从GitHub Releases下载v2.3.2或其他2.3.x版本的源码包网址https://github.com/ReFirmLabs/binwalk/releases选择Source code (tar.gz)不要下载最新的主分支代码3. 上传并安装bash# 将下载的tar.gz上传到虚拟机的/tmp目录 cd /tmp tar -zxvf binwalk-2.3.2.tar.gz cd binwalk-2.3.2 # 确认setup.py存在 ls setup.py # 应该能看到文件 # 安装 sudo python3 setup.py install # 验证 binwalk --version4. 安装系统依赖重要bash# Binwalk提取文件需要的系统工具 sudo yum install -y xz squashfs-tools unzip lzma file为什么这么折腾根本原因问题原因yum找不到包CentOS官方仓库不含binwalkpip安装的2.1.0不完整PyPI上的旧版本有bug2.3.4安装失败PyPI没有这个版本git clone安装失败主分支已迁移到Rust不再使用setup.py最终解决方案使用2.3.2版本的Python源码包关键经验不要用最新的主分支Binwalk已经用Rust重写主分支没有setup.py使用2.3.x的旧版本这些是稳定的Python版本从GitHub Releases下载比git clone更稳定必须安装系统依赖否则提取功能不完整实际应用分析小爱音箱固件安装完成后我就可以开始分析小爱音箱的固件了bash# 1. 扫描固件文件 binwalk xiaomi_firmware.bin # 2. 提取所有嵌入的文件 binwalk -e xiaomi_firmware.bin # 3. 递归提取处理嵌套的文件系统 binwalk -Me xiaomi_firmware.bin # 4. 查看特定类型的文件 binwalk --dd.* xiaomi_firmware.bin总结这次安装经历让我深刻体会到版本选择很重要不是越新越好理解项目结构Binwalk已经迁移到Rust安装方式完全变了清理要彻底残留文件会导致各种奇怪问题耐心是关键逆向工程的准备工作往往比想象中复杂希望这篇教程能帮助到正在为安装Binwalk而苦恼的朋友们。如果你也在做固件逆向欢迎交流讨论参考资料Binwalk GitHub: https://github.com/ReFirmLabs/binwalk本文中使用的版本v2.3.2 (Python版本)