《固件安全与安全启动实战》
第3章 固件逆向分析基础
3、固件逆向分析基础:固件提取方法、binwalk工具使用、固件文件系统分析
3.1 固件提取方法
固件提取是逆向分析的第一步,常见方法包括:
| 提取方法 | 适用场景 | 工具/手段 |
|---|---|---|
| 芯片直读 | SPI Flash / NAND | 编程器、JTAG/SWD |
| OTA抓包 | 网络升级固件 | Wireshark、mitmproxy |
| 固件解包 | 官方固件包 | binwalk、unblob |
| 调试接口 | U-Boot/系统运行中 | UART、adb、ssh |
▲ 图3-1 固件提取方法流程示意图
3.2 binwalk工具使用
binwalk是固件分析的核心工具,支持签名扫描、熵分析、文件提取等功能。
常用命令示例:
# 扫描固件中的文件签名
binwalk firmware.bin
# 提取所有识别到的文件
binwalk -e firmware.bin
# 递归提取(针对嵌套文件系统)
binwalk -Me firmware.bin
# 显示熵分析图
binwalk -E firmware.bin
# 指定偏移量提取
binwalk -o 0x100000 -e firmware.bin
▲ 图3-2 binwalk分析流程
3.3 固件文件系统分析
提取后的文件系统常见类型及分析方法:
- SquashFS — 嵌入式Linux常用只读文件系统,使用
unsquashfs解压 - JFFS2 / UBIFS — NAND Flash常用,使用
jefferson或ubi_reader - CramFS — 老式嵌入式系统,使用
cramfsck解压 - initramfs / cpio — 内核初始化文件系统,使用
cpio -idmv - FAT / NTFS — 部分IoT设备使用,直接挂载分析
文件系统分析步骤:
# 1. 使用binwalk提取文件系统
binwalk -Me firmware.bin
# 2. 查看提取目录结构
ls -la _firmware.bin.extracted/
# 3. 识别文件系统类型
file squashfs-root/usr/bin/busybox
# 4. 挂载SquashFS(如果未自动解压)
unsquashfs -d ./output squashfs-root.squashfs
# 5. 分析关键文件
cat etc/passwd
ls -la etc/init.d/
strings sbin/init | grep -i "password\|backdoor"
▲ 图3-3 固件文件系统分析架构
💡 实战要点
- 提取前先使用
file命令识别固件类型 - binwalk的
-E参数可帮助识别加密/压缩区域 - 对于加密固件,需先寻找解密密钥或硬件漏洞
- 文件系统分析重点关注
/etc、/bin、/usr/bin目录 - 使用
strings和grep快速定位敏感信息
专注课程资料整理