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 工具选择决策流程
面对一个陌生设备,你该怎么选工具?我画了一张流程图,帮你快速决策。
3.4 我的工具包清单(实战版)
最后,分享一份我出差时随身带的工具清单。不是让你照搬,但你可以参考这个思路来配置自己的工具包。
- 编程器:FT2232H 主用 + CH341A 备用
- 逻辑分析仪:Saleae Logic 8(16通道版本更好)
- 连接线:杜邦线(公母各20根)、测试夹(SOP8/SOP16)、热风枪
- 软件环境:Ubuntu 22.04 虚拟机 + Binwalk(最新版)+ Flashrom(1.3+)
- 辅助工具:万用表(测电压/通断)、放大镜(看芯片丝印)、镊子
我的习惯:每次读取 Flash 前,先用万用表测一下 VCC 和 GND 之间的电阻,确保没有短路。这个习惯救过我至少三次——有一次芯片引脚虚焊,一通电就冒烟,还好提前测出来了。