3、必备工具清单:硬件工具与软件工具介绍

做固件提取,说白了就是一场「物理取证」。你面对的可能是一块焊死的 Flash 芯片,也可能是一个加密打包的镜像文件。工欲善其事,必先利其器。这一章我把家底翻出来,给你列一份我这些年真正用过的、踩过坑的、值得信赖的工具清单。

核心观点:没有万能工具。硬件方案解决「读不出来」的问题,软件方案解决「读出来看不懂」的问题。两者缺一不可。

3.1 硬件工具:物理层攻坚

当设备不给你留 UART、不开放 SSH、甚至连调试焊盘都省了的时候,你就得从芯片引脚上直接下手。硬件工具就是干这个的。

3.1.1 编程器(Programmer)

编程器是提取固件的「最后手段」,也是我最信赖的方案。它直接通过 SPI 或并行总线读写 Flash 芯片里的原始数据,不受任何软件限制。

工具型号 适用场景 我的评价
CH341A 入门级,25系列 SPI Flash 便宜但供电不稳,我烧过两块芯片
FT2232H 专业级,SPI / JTAG / 串口 稳定,速度快,我主力工具
TL866II Plus 多协议,支持老式并行 Flash 适合古董设备,但软件闭源
Bus Pirate 调试 / 协议分析 / 低容量读取 灵活但速度慢,适合验证

我的习惯:现场勘查带 CH341A 做快速验证,回实验室用 FT2232H 做完整 Dump。CH341A 的 3.3V 输出经常飘到 3.6V,我建议你加个电平转换板再连芯片。

选编程器时,你重点看三个参数:支持的芯片列表、最大时钟频率、供电稳定性。我遇到过好几次,因为编程器供电纹波太大,读出来的数据每隔 64KB 就出现一段全 0xFF——嗯,那就是供电不稳导致芯片内部状态机复位了。

3.1.2 逻辑分析仪(Logic Analyzer)

逻辑分析仪不是直接提取固件的,它是用来「偷听」芯片通信的。当你不确定 Flash 芯片的引脚定义、或者想抓取 BootROM 的加载过程时,它就派上用场了。

  • Saleae Logic 8/16:我最常用的。采样率 100MHz 够用,软件界面清爽,支持 SPI / I²C / UART 协议解码。
  • DSLogic Plus:国产替代,采样率 400MHz,深度缓存,适合抓长时序。
  • 开源方案(fx2lafw + PulseView):零成本入门,但稳定性看人品。

我曾经踩过的坑:有一次用 Saleae 抓 SPI Flash 的读操作,发现 CS 片选信号在传输过程中莫名其妙拉高了一次。后来查出来是主控芯片的 GPIO 驱动能力不足,导致信号反射。如果你读出来的固件校验总是不通过,先拿逻辑分析仪看看时序,别急着换芯片。

3.2 软件工具:数据拆解与重组

硬件读出来的是一堆二进制原始数据,就像一本没有目录的书。软件工具负责帮你「拆书」——识别文件系统、解压缩、提取内核。

3.2.1 Binwalk:固件分析的瑞士军刀

Binwalk 是我用得最多的固件分析工具,没有之一。它能自动扫描固件中的文件签名,帮你快速定位文件系统、内核、引导加载程序的位置。

# 基本用法:扫描固件中的已知签名
binwalk firmware.bin

# 递归提取所有识别到的文件
binwalk -Me firmware.bin

# 只显示熵值分析结果(判断是否加密/压缩)
binwalk -E firmware.bin

Binwalk 的核心能力在于它的签名库。它内置了 Squashfs、JFFS2、Cramfs、LZMA、gzip 等几十种常见格式的魔数。你跑一遍扫描,它就能告诉你:
「从偏移 0x100000 开始,有一个 Squashfs 文件系统,大小约 4MB。」

个人经验:Binwalk 不是万能的。我遇到过厂商魔改的 Squashfs,把压缩块大小从 131072 改成了 65536,Binwalk 就认不出来了。这时候你得手动用 unsquashfs -s 去试参数。别完全依赖自动化工具。

3.2.2 Flashrom:开源编程器软件

Flashrom 是编程器的「灵魂」。它支持超过 500 种 Flash 芯片和 200 多种编程器硬件。不管你用 CH341A 还是 FT2232H,Flashrom 都能统一驱动。

# 检测编程器和芯片
flashrom -p ch341a_spi

# 读取整片 Flash 到文件
flashrom -p ch341a_spi -r backup.bin

# 写入固件(慎用!)
flashrom -p ch341a_spi -w new_firmware.bin

# 校验读取结果
flashrom -p ch341a_spi -v backup.bin
参数 说明 我的建议
-p 指定编程器类型 先 flashrom --list-supported 查支持列表
-r 读取(Read) 建议读两次,用 diff 对比一致性
-w 写入(Write) 写入前务必备份原固件
-v 校验(Verify) 我每次必加,防止写入错误

重要提醒:Flashrom 的 -w 参数会直接擦除并写入芯片。我见过有人把路由器 Flash 写成了 PC 的 BIOS 镜像,结果设备直接变砖。读取操作是安全的,写入操作请三思。

3.3 工具选择决策流程

面对一个陌生设备,你该怎么选工具?我画了一张流程图,帮你快速决策。

固件提取工具选择决策流程 固件提取工具选择决策流程 拿到目标设备 能否通过软件/调试接口提取? 是 → 使用 UART / SSH / TFTP 提取 Binwalk 分析提取结果 否 → 拆机,找 Flash 芯片 逻辑分析仪抓时序 Flashrom + 编程器 读取完整 Dump 得到原始固件镜像 用 Binwalk 拆解、分析、提取文件系统

3.4 我的工具包清单(实战版)

最后,分享一份我出差时随身带的工具清单。不是让你照搬,但你可以参考这个思路来配置自己的工具包。

  • 编程器:FT2232H 主用 + CH341A 备用
  • 逻辑分析仪:Saleae Logic 8(16通道版本更好)
  • 连接线:杜邦线(公母各20根)、测试夹(SOP8/SOP16)、热风枪
  • 软件环境:Ubuntu 22.04 虚拟机 + Binwalk(最新版)+ Flashrom(1.3+)
  • 辅助工具:万用表(测电压/通断)、放大镜(看芯片丝印)、镊子

我的习惯:每次读取 Flash 前,先用万用表测一下 VCC 和 GND 之间的电阻,确保没有短路。这个习惯救过我至少三次——有一次芯片引脚虚焊,一通电就冒烟,还好提前测出来了。