第二章 FPGA基础与架构:从底层看懂你的对手
做逆向工程,第一件事是什么?
不是拿工具开干,而是先搞懂你要逆向的东西长什么样。FPGA逆向更是如此——你连芯片内部长啥样都不知道,怎么去分析比特流?
这一章,我带你把FPGA的底裤扒干净。从CLB到布线资源,从Xilinx到Lattice,咱们一个一个说清楚。
2.1 FPGA内部结构:五个核心模块
FPGA说白了就是一块“万能积木”。你给它一堆配置数据,它就能变成CPU、GPU、甚至是个挖矿机。这背后靠的是五个核心模块。
2.1.1 CLB(可配置逻辑块)——FPGA的肌肉
CLB是FPGA干活的主力。每个CLB里包含几个Slice,Slice里又有LUT(查找表)、触发器和进位链。
- LUT:本质是个小RAM。4输入LUT就是16×1的RAM,6输入就是64×1。你写的逻辑表达式,最后都存成这张真值表。
- 触发器:用来寄存数据。每个Slice通常有4-8个。
- 进位链:做加法用的专用硬件,比用LUT拼快得多。
2.1.2 IOB(输入输出块)——FPGA的嘴巴
IOB负责芯片和外界通信。每个IOB可以配置成输入、输出或双向。支持多种电平标准:LVCMOS、LVDS、HSTL等等。
嗯,这里要注意:IOB里还有延迟单元和上拉/下拉电阻。逆向时,IOB的配置决定了信号怎么进出芯片,这个信息对理解系统接口非常关键。
2.1.3 Block RAM——FPGA的记忆
BRAM是专用的存储单元,每个块通常18Kb或36Kb。可以配置成单口、双口、甚至FIFO。
你想想看,BRAM里存的是什么?可能是代码、可能是数据、也可能是查找表。逆向时,BRAM的内容往往是最有价值的信息——尤其是当你发现它存着某个算法的常数表时。
2.1.4 DSP Slice——FPGA的计算核心
DSP是专门做乘加运算的硬核。Xilinx 7系列用的是DSP48E1,支持25×18位乘法,还能级联做FIR滤波器。
为什么单独提DSP?因为很多加密算法、信号处理算法,最终都会映射到DSP上。逆向时,DSP的配置模式(乘加、乘减、累加等)直接告诉你设计者想算什么。
2.1.5 布线资源——FPGA的血管
这是FPGA里最复杂、也最容易被忽视的部分。布线资源包括:
- 局部连线:CLB内部的短连线
- 通用布线:连接不同CLB的纵横网格
- 长线:跨芯片的高速连线
- 全局时钟网络:低抖动的时钟树
布线资源占了FPGA芯片面积的70%以上。逆向时,布线配置决定了信号怎么走、走多快。我见过有人花一个月解出了LUT配置,结果布线没看懂,整个逆向白做。
2.2 主流厂商架构差异
三大厂商的FPGA,表面看都是CLB+BRAM+DSP,但细节上天差地别。逆向时,你得先认爹。
| 特性 | Xilinx | Intel/Altera | Lattice |
|---|---|---|---|
| CLB结构 | Slice含4个LUT+8个FF | LAB含10个ALM | PFU含4个LUT+4个FF |
| LUT输入 | 6输入(7系列起) | 8输入(可拆成两个4输入) | 4输入(主流) |
| BRAM大小 | 36Kb(可拆两个18Kb) | 20Kb(M20K) | 18Kb |
| DSP | DSP48E1(25×18) | DSP Block(18×19) | DSP Block(18×18) |
| 配置位流 | .bit文件,明文可解析 | .sof/.pof,加密较多 | .bit流,结构相对简单 |
我个人习惯:逆向首选Lattice,因为它的比特流结构最规整,文档也相对透明。Xilinx的7系列虽然市场占有率高,但配置位流加密选项多,逆向难度大。Intel/Altera的Cyclone系列介于两者之间。
2.3 配置模式:比特流怎么进去的
搞逆向,你得知道比特流是怎么加载到芯片里的。不同模式,意味着你能从哪个接口抓到配置数据。
2.3.1 主串模式(Master Serial)
FPGA自己从外部SPI Flash读配置。上电后,FPGA产生时钟,从Flash里把比特流串行读进来。这是最常见的模式。
逆向价值:直接读SPI Flash就能拿到比特流。我遇到过很多产品,Flash芯片没加密,比特流直接明文存储。
2.3.2 从并模式(Slave Parallel)
外部处理器(比如ARM)通过并行总线把配置数据写进FPGA。速度快,但需要外部控制器。
逆向价值:抓取处理器和FPGA之间的总线数据。我曾经用逻辑分析仪抓过从并模式的配置过程,虽然数据量大,但配合时钟信号,还原比特流并不难。
2.3.3 JTAG模式
通过JTAG接口(TCK、TMS、TDI、TDO)加载配置。主要用于调试和开发阶段。
逆向价值:JTAG是逆向的“后门”。如果芯片没锁JTAG,你可以直接读出配置数据。但很多产品会禁用JTAG或设置密码。
2.4 知识体系总览
下面这张图,是我自己总结的FPGA逆向知识体系。你把它刻在脑子里,后面每一章都会用到。
这张图你看懂了,FPGA逆向的骨架就有了。后面每一章,都是往这个骨架上填肉。
好了,这一章就到这里。记住:FPGA逆向,懂架构是前提。下一章,我们开始真正动手——从比特流文件里提取配置数据。
公众号:蓝海资料掘金营,微信deep3321