1. 固件镜像文件格式识别
任务目标
给定一个未知格式的固件镜像文件 router_fw.bin,使用 file 和 binwalk 工具识别其文件系统类型、CPU 架构及内部文件布局,为后续逆向分析与 OTA 漏洞挖掘建立基础。
环境准备
在 Linux 主机(推荐 Ubuntu 22.04+)上安装所需工具:
sudo apt update
sudo apt install -y binwalk file
# 如需递归提取 SquashFS/ubi 文件系统,可额外安装:
sudo apt install -y mtd-utils ubi-reader
关键完整代码(识别脚本)
以下脚本对目标固件执行 file 与 binwalk 扫描,并输出结构化结果:
#!/bin/bash
# identify_fw.sh — 固件镜像格式识别脚本
# 用法: ./identify_fw.sh <firmware_image>
if [ $# -ne 1 ]; then
echo "用法: $0 <firmware_image>"
exit 1
fi
IMG="$1"
echo "===== [1] file 识别结果 ====="
file "$IMG"
echo ""
echo "===== [2] binwalk 文件签名扫描 ====="
binwalk "$IMG"
echo ""
echo "===== [3] binwalk 熵分析(判断是否加密/压缩) ====="
binwalk -E "$IMG" | tail -20
echo ""
echo "===== [4] 尝试提取已知文件系统 ====="
# 仅提取,不递归展开(避免超大输出)
binwalk -e -M --dd='.*' "$IMG" 2>/dev/null || \
echo "自动提取失败,请手动检查上述签名输出"
运行方式
chmod +x identify_fw.sh
./identify_fw.sh router_fw.bin
验证方法与判定标准
以典型 OpenWrt 路由器固件为例,预期输出应包含以下关键特征,满足即判定识别成功:
- file 输出:包含
Linux kernel ARM boot executable zImage或uImage字样,表明架构为 ARM;若为 MIPS 则显示MIPS相关标识。 - binwalk 签名扫描:在偏移
0x0或附近出现SquashFS filesystem、JFFS2 filesystem、ubi filesystem等条目,并显示文件系统版本(如little endian, version 4.0)。 - 熵分析:若固件未加密,熵值曲线在文件系统区域呈现中等水平(约 5~7);若整体熵值接近 8 且无文件签名,则表明镜像可能被加密或压缩,需进一步处理。
- 提取结果:
_router_fw.bin.extracted目录下出现squashfs-root或jffs2-root文件夹,内含/etc、/bin等标准 Linux 目录结构。
常见问题
- binwalk 未识别出文件系统:可能镜像经过自定义加密或头部偏移。尝试
binwalk -R手动指定签名,或使用binwalk -A查看所有架构字符串。 - file 显示 "data":说明镜像头部无标准魔数,需依赖 binwalk 的熵分析和字符串扫描(
strings命令辅助)判断内部结构。 - 提取后文件系统无法挂载:确认是否缺少
squashfs-tools,安装后使用unsquashfs手动解包。
上述流程完成后,即可确认固件的文件系统类型(如 SquashFS、JFFS2、CramFS)与 CPU 架构(ARM/MIPS/RISC-V 等),为后续固件解包、漏洞分析或恶意代码植入提供必要前提。