1. 固件文件类型识别
任务目标
给定一个未知格式的固件文件 firmware.bin,通过 file 与 binwalk 工具识别其文件类型、目标 CPU 架构以及是否包含可提取的文件系统或引导加载程序。
环境准备
在 Linux 虚拟机(推荐 Kali Linux 或 Ubuntu 22.04+)中执行以下命令安装所需工具:
sudo apt update
sudo apt install -y binwalk file
操作步骤与关键代码
首先使用 file 命令获取固件的基本类型信息:
file firmware.bin
预期输出示例(取决于固件内容):
firmware.bin: u-boot legacy uImage, Linux Kernel Image (ARM), Linux...
若输出为 data 或 application/octet-stream,说明文件头未被识别,需使用 binwalk 进行深度扫描。
使用 binwalk 扫描固件中的嵌入文件与文件系统特征:
binwalk firmware.bin
该命令会列出文件偏移量、描述与可能的文件系统签名。若需要提取嵌入内容,执行:
binwalk -e firmware.bin
提取结果默认保存在 _firmware.bin.extracted 目录中。
当 binwalk 识别出 SquashFS、JFFS2、CramFS 等文件系统时,可进一步确认架构。例如识别到 SquashFS 后,使用 binwalk -A 查看 CPU 架构信息:
binwalk -A firmware.bin
验证方法与判定标准
- 类型识别成功:
file或binwalk输出中明确包含以下任一信息:Linux kernel、uImage、filesystem、SquashFS、JFFS2、gzip compressed等,而非仅返回data。 - 架构识别成功:输出中出现
ARM、MIPS、x86、RISC-V等架构关键字。 - 文件系统提取验证:若固件包含文件系统,执行
binwalk -e后,在_firmware.bin.extracted目录下能看到非空的文件系统目录(如squashfs-root),且其中包含/bin、/etc等典型 Linux 目录结构。
常见问题
- binwalk 输出大量偏移地址但无文件系统:可能固件经过加密或自定义压缩,需结合
binwalk -E(熵分析)判断是否有加密段。 - file 识别为 data:不代表固件无效,多数 IoT 固件直接为裸二进制,需依赖 binwalk 的签名扫描。
- 提取失败:若
binwalk -e报错,尝试binwalk -Me递归提取,或手动使用dd按偏移量切割后单独分析。
完成上述识别后,即可确定固件的基本类型与目标平台,为后续逆向分析(如提取文件系统、定位漏洞)建立基础。