《固件安全与安全启动实战》
第3章 固件逆向分析基础

3、固件逆向分析基础:固件提取方法、binwalk工具使用、固件文件系统分析

3.1 固件提取方法

固件提取是逆向分析的第一步,常见方法包括:

提取方法 适用场景 工具/手段
芯片直读 SPI Flash / NAND 编程器、JTAG/SWD
OTA抓包 网络升级固件 Wireshark、mitmproxy
固件解包 官方固件包 binwalk、unblob
调试接口 U-Boot/系统运行中 UART、adb、ssh
固件来源 芯片直读 OTA抓包 固件解包 原始固件 binwalk分析

▲ 图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"
固件文件系统 /bin (二进制) /etc (配置) /lib (库文件) /usr (用户程序) busybox passwd libc.so init.d/ 安全分析:后门、硬编码、漏洞

▲ 图3-3 固件文件系统分析架构

💡 实战要点

  • 提取前先使用 file 命令识别固件类型
  • binwalk的 -E 参数可帮助识别加密/压缩区域
  • 对于加密固件,需先寻找解密密钥或硬件漏洞
  • 文件系统分析重点关注 /etc、/bin、/usr/bin 目录
  • 使用 strings 和 grep 快速定位敏感信息

专注课程资料整理