第二章 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拼快得多。
我的经验:逆向CLB配置时,重点关注LUT的初始化值。那16位或64位数据,直接暴露了设计者想实现的逻辑功能。我曾经靠分析一个LUT的初始值,还原出了某个加密算法的S盒。

2.1.2 IOB(输入输出块)——FPGA的嘴巴

IOB负责芯片和外界通信。每个IOB可以配置成输入、输出或双向。支持多种电平标准:LVCMOS、LVDS、HSTL等等。

嗯,这里要注意:IOB里还有延迟单元和上拉/下拉电阻。逆向时,IOB的配置决定了信号怎么进出芯片,这个信息对理解系统接口非常关键。

2.1.3 Block RAM——FPGA的记忆

BRAM是专用的存储单元,每个块通常18Kb或36Kb。可以配置成单口、双口、甚至FIFO。

你想想看,BRAM里存的是什么?可能是代码、可能是数据、也可能是查找表。逆向时,BRAM的内容往往是最有价值的信息——尤其是当你发现它存着某个算法的常数表时。

避坑指南:我曾经在逆向一块通信板时,花了三天分析LUT逻辑,结果发现核心算法全存在BRAM里。早该先读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或设置密码。

核心观点:配置模式决定了你获取比特流的难度。主串模式最容易(直接读Flash),JTAG模式最灵活(如果能访问的话)。逆向的第一步,先搞清楚目标板用的是什么配置模式。

2.4 知识体系总览

下面这张图,是我自己总结的FPGA逆向知识体系。你把它刻在脑子里,后面每一章都会用到。

FPGA逆向知识体系 FPGA芯片 CLB(逻辑) IOB(接口) BRAM(存储) DSP(计算) 布线 配置模式 厂商差异 比特流结构 主串模式 从并模式 JTAG模式 Xilinx Intel/Altera Lattice 帧结构 配置寄存器 加密/校验 逆向目标:还原设计意图

这张图你看懂了,FPGA逆向的骨架就有了。后面每一章,都是往这个骨架上填肉。

我的建议:初学者别急着上手工具。先把本章内容吃透,尤其是CLB和BRAM的结构。我见过太多人,工具用得贼溜,但连LUT和触发器都分不清,最后逆向出来的东西全是错的。

好了,这一章就到这里。记住:FPGA逆向,懂架构是前提。下一章,我们开始真正动手——从比特流文件里提取配置数据。


公众号:蓝海资料掘金营,微信deep3321