反转 FPGA 电路

逆向工程 硬件 FPGA
2021-06-14 01:42:26

假设我有一个带有 FPGA 的设备,我设法从它的闪存中提取了比特流。我将如何恢复其行为?

一个简单的例子是它是否实现了一个软处理器——在这种情况下,应该在某处有该处理器的固件,我可以反汇编它。但如果它只是一堆 IP 块和一些额外的逻辑呢?

3个回答

虽然 FPGA 制造商不只是把他们的格式扔在那里,但在低层次上有大量的文档。Xilinx 器件就是一个很好的例子。

要对位流进行逆向工程,您可能会生成实现简单逻辑的测试用例,并查看它们如何转换为位流,然后继续进行设计以执行芯片的不同部分。

在基本层面上,您会想知道如何控制 CLB,然后是 IOB 和互连。CLB 是连接到引脚的 IOB 的逻辑,互连连接 CLB 和 IOB。本文档应该让您深入了解 FPGA 是如何实现的,以及如何对比特流进行逆向工程。请注意,较新的 FPGA 正在转向 6 输入 lut,而不是常见的 4 输入。

请记住,位流不是软件 - 它是硬件配置映像。因此,它实际上与 ENIAC 的编程方式非常相似 - 重新布线电路和翻转开关以对其进行编程 - 除非在这种情况下您要在 CLB 中设置具有互连和逻辑的路由。

Ben NanoNote 背后的人也在编写一个fpga 工具链,我非常关注它。由于我的 SparcStation 收集爱好的次要目的是在 FPGA 中重新实现 Sun4m,一种 SparcStation 架构。毕竟谁不想能够从带有您自己的处理器设计的 FPGA 配置 FPGA。

更新:值得注意的是,IceStorm(主要是 ice40 芯片)和 NextPNR(Multi 针对 ice40/ECP5/Xilinx Series 7)是当前最先进的反向工程 FPGA 工具链。

Xilinx Virtex II 有一个“开放”比特流,这意味着比特流格式被记录和公开。然后人们可以按照他们认为合适的方式操纵比特流。从那时起,该格式已被关闭 (IMO) 以防止人们 (1) RE'ing 设备,这对某些利益来说是一个大问题,以及 (2) 使他们的技术对竞争对手保密。

较新的技术允许从 FPGA 工具链内部对比特流进行加密,并在对 FPGA 进行编程之前进行内部解密。因此,在尝试分析之前,您需要确保您捕获的比特流已被解密。

此外,随着 Partial Reconfiguration(通过 Xilinx)的实现,RE 尝试将变得更加复杂,因为您不能再坐视设备的行为。

RapidSmith 为您做到这一点。http://rapidsmith.sourceforge.net/

还有一篇论文可以作为起点阅读:“FPGA 逆向工程的最新进展” Hoyoung Yu、Hansol Lee、Sangil Lee、Youngmin Kim 和 Hyung-Min Lee