用途:拿到固件文件(.bin/.img/升级包/IoT 镜像)后解开看内容,判断打包方式、架构与字节序。已是文件系统镜像、需运行固件或需硬件提取的场景不适用。
主要工具与安装:binwalk 分 v3(Rust,主线,用 Docker 镜像 / cargo install binwalk / 源码构建,pip 已非官方入口)与 v2(legacy,PyPI 停在 2.1.0,发行版仓库为 2.x 线;apt install binwalk、dnf、pacman、brew 或 pip install binwalk),用 binwalk --version 确认 major。unblob 推荐为主力,pip install unblob(建议 venv)。另有 dd、hexdump(apt install bsdmainutils 或 dnf install util-linux)、sasquatch(源码编译处理厂商魔改 squashfs)。
操作步骤:1) 自动解包,unblob firmware.bin 或 binwalk firmware.bin、binwalk -Me firmware.bin,产物为目录,文件系统转 rootfs 流程、ELF 转二进制分析;2) 手工 magic 扫描 hexdump -C;常见魔数如 JPEG FF D8 FF、gzip 1F 8B、squashfs hsqs、cramfs 45 3D CD 28、U-Boot 27 05 19 56、jffs2 85 19、ELF 7F 45 4C 46;3) 字节序判断用 file、readelf -h、strings;4) 嵌套容器逐层解;5) 自动失败时用 dd 按偏移切分。
MCU 镜像:无文件系统、单镜像、几十 KB 且无 OS 特征时进入。Intel HEX 需按记录类型(02/04 扩展地址)落位到实际地址再导入;二进制需手动给基址。复位向量位置:8051/AVR 在 0x0000、MSP430 在 0xFFFE、PIC 多为 0x0000。字节序上 AVR/PIC/MSP430 小端,8051 惯例大端。反汇编可选支持对应架构的工具。
限制:厂商自定义头、加密层会导致自动解包失败;芯片读保护可能使镜像不可得;熔丝位/配置位不体现在镜像内;扩展名可能伪装,需以 file/魔数为准;自行验证偏移与产物,避免签名误报与字节序错误。