逻辑分析仪助力固件提取,避免拆卸风险
想从一个来源不明的设备中提取固件,最常见且直接的方法是什么?将闪存芯片从电路板上拆下来,放进读取器里进行读取。虽然这种方法简单直接,但隐含的前提是必须动用烙铁。如果这个设备只能用一次,若一不小心损坏了,就没有机会再用了,这样一来,“拆卸芯片”就显得不那么理想。如果有人试图直接在电路上读取数据,但也不幸失败了——不然,接下来的故事就没有发生了。那么,还有什么替代方案呢?换个思路:与其直接读取芯片,不如倾听芯片的通讯。Matthew "wrongbaud" Alt 提出了用逻辑分析仪的办法。他在技术记录中详细展示了如何识别、捕捉并最终解码 SPI 读取操作的全过程。他的目标是一种常见的 W25Q 系列闪存芯片,设备在启动时,CPU 会通过 SPI 总线从该芯片中读取固件。逻辑分析仪的功能就是静静地在总线上“偷听”。CPU 读取了什么,它就记录下什么。然而,这种方法抓取的信息有一个重要限制:只能获取 CPU 实际读取的内容,而并非整个芯片的所有数据。因此,得到的是“被用到的部分”,而非完整的芯片镜像。对于在陌生设备上摸索的人而言,这已经是一个相当不错的进展。
在开始解码之前,wrongbaud 首先进行了基础但至关重要的工作:详细解析 SPI 通讯的基本机制。他手中有两样工具——逻辑分析仪抓取的原始数据和闪存芯片的数据手册。有了这两者,他便能够解释总线上的各种信号代表了什么。即使对于不感兴趣“从神秘盒子中提取固件”的人来说,这部分内容也是一份相当出色的 SPI 入门材料,能够帮助人们更清楚地理解芯片间的通讯机制。
在掌握基本概念和数据后,wrongbaud 开始解码,使用的工具是 Scapy。虽然这个工具通常与网络数据包处理相关联,但在这个案例中,它被用来处理另一类数据。经过处理后,Scapy 可以读取逻辑分析仪生成的抓取文件,将其转换为镜像文件,并直接交给 binwalk 进行分析。到此,事情看起来仍然在顺利进行中,但镜像中却缺少了一部分。wrongbaud 发现,固件镜像中确实包含 bootloader 和 Linux 内核,但原本应有的文件系统位置却是空白的。这意味着,还有事情没有完成。问题在于,CPU 要在加载文件系统前切换至更快的 Quad-SPI 模式,而这个模式还额外增加了两条数据线。原本的抓取方式无法涵盖这一部分。因此,他的流程变为:再进行一次抓取,加上一些额外处理,最后用一条 dd 命令将两个镜像文件合并成一个。经过这些步骤,他们最终获得了完整的内容。
这一过程的真正价值体现在哪儿呢?若这是你第一次接触 wrongbaud 的作品,都值得一提:从他提供的硬件黑客路线图到具体技术如故障注入的深入分析,他产出的材料质量极高,几乎每次都能带给人新的知识。回到这个 SPI 读取的案例,其重要性不仅在于“又一种提取固件的方法”。它展示了在受限条件下的策略和取舍,面对拆卸不可行时,如何找到从总线侧入手的解决方案;在获取信息上无法一次完成时,如何先抓取 CPU 实际读取的部分,再分多次合并完整数据。虽然每一步可能并不是完美的方案,但每一步都在不断进步。对于在完全陌生的设备上进行逆向分析的人来说,这种“尽管不尽善尽美但能持续推进”的方法,往往比仅仅依赖理论完美却难以实践的方法更为有效。而且,就算你完全不打算拆除任何组件,单单了解 SPI 的工作原理和芯片间的通讯机制,已然是物超所值的学习体验。