第二章 数字电路基础回顾:从布尔代数到有限状态机

说实话,很多刚入行的朋友觉得数字电路基础太简单,翻翻书就过了。但我做了这么多年逆向,可以负责任地告诉你——你越往后走,越会发现基础决定上限。尤其是做FPGA逆向,你面对的是一堆网表和比特流,没有扎实的数字电路功底,根本读不懂芯片在说什么。

这一章,我带你把几个核心概念再过一遍。不是照本宣科,而是结合我实际踩过的坑来讲。

2.1 布尔代数与逻辑门:逆向工程的“字母表”

布尔代数,说白了就是0和1的游戏。与、或、非,这三个基本操作构成了所有数字逻辑的基础。你想想看,一个复杂的FPGA设计,最终拆解到最底层,就是一堆逻辑门的组合。

我在逆向一个通信芯片时,遇到过这样的情况:对方用了一大堆看似冗余的逻辑门,实际上是在做逻辑混淆。如果你不懂布尔代数的化简规则,比如德摩根定律、吸收律,你根本看不穿他的真实意图。

核心逻辑门速查表

逻辑门布尔表达式真值表(A,B)我的备注
与门 (AND)Y = A · B只有11得1常用作使能信号
或门 (OR)Y = A + B有1就得1注意毛刺问题
非门 (NOT)Y = ¬A取反最简单的反相器
异或门 (XOR)Y = A ⊕ B相同得0,不同得1逆向中常用来做数据比较或加密

嗯,这里要注意:在FPGA中,实际使用的查找表(LUT)可以模拟任何逻辑门。所以你在逆向时看到的可能不是标准门,而是LUT的配置值。这时候,布尔代数知识就派上用场了——你得能反推出LUT实现了什么功能。

2.2 组合逻辑与时序逻辑:分清“当下”和“过去”

这是新手最容易混淆的地方。我简单说:

  • 组合逻辑:输出只取决于当前输入。没有记忆,没有时钟。比如一个加法器,输入变了,输出立刻变。
  • 时序逻辑:输出不仅取决于当前输入,还取决于之前的状态。说白了,它有“记忆”。

为什么这个区分在逆向中很重要?

我曾经逆向过一个加密协处理器,一开始我把它所有的逻辑都当成组合逻辑来分析,结果死活对不上波形。后来才发现,里面藏了一个状态寄存器,它的输出反馈到了输入——这就是典型的时序逻辑。如果不区分清楚,你分析出来的功能图完全是错的。

我的小技巧:在网表中,看到反馈回路或者时钟驱动的节点,基本可以判定是时序逻辑。组合逻辑通常没有时钟引脚。

2.3 触发器与寄存器:数字电路的“记忆细胞”

触发器(Flip-Flop)是时序逻辑的基本单元。最常见的D触发器,它只在时钟上升沿(或下降沿)采样输入,然后保持住这个值。

多个D触发器并在一起,就构成了寄存器。比如一个8位寄存器,就是8个D触发器共享同一个时钟。

我在逆向一个老旧FPGA项目时,发现对方用了一个非常奇怪的移位寄存器结构。正常来说,移位寄存器就是串进并出或者并进串出。但他那个设计,中间插了好几个“幽灵”触发器——看起来没用,实际上是为了调整时序,让信号在特定时钟周期到达。如果你不懂触发器的建立时间和保持时间,你根本看不懂他为什么要这么干。

避坑指南:我曾经在分析一个高速接口时,忽略了触发器的建立时间约束,结果在仿真时一切正常,但实际芯片跑起来就出错。后来发现,对方的时钟树设计故意让某些触发器的时钟偏斜,导致采样错误。所以,逆向时不仅要看逻辑,还要关注时钟路径。

2.4 有限状态机基础:芯片的“大脑”

有限状态机(FSM)是数字电路中最常用的控制逻辑。它由状态寄存器、次态逻辑和输出逻辑三部分组成。

我习惯把FSM分为两类:

  • Moore型:输出只取决于当前状态。稳定,但响应慢一拍。
  • Mealy型:输出取决于当前状态和输入。响应快,但容易有毛刺。

在逆向中,识别FSM是关键一步。为什么?因为FSM往往代表了芯片的控制流程——比如协议解析、指令译码、加密状态切换。你找到了FSM,就找到了芯片的“大脑”。

下面这张图是我自己总结的FSM逆向分析流程,你可以参考一下:

FSM逆向分析流程 步骤1:网表提取 找出所有触发器 步骤2:状态寄存器识别 寻找反馈回路 步骤3:状态编码 独热/二进制/格雷 步骤4:次态逻辑分析 组合逻辑还原状态转移 步骤5:输出逻辑分析 区分Moore/Mealy 步骤6:状态图重建 绘制完整FSM 步骤7:功能理解 推断芯片行为

实际逆向中,我见过最复杂的FSM有128个状态,用格雷编码实现。当时我花了整整三天才把状态转移图还原出来。但一旦画出来,整个芯片的工作模式就一目了然了。

经验之谈:如果你在网表中看到一组触发器,它们的输入来自同一个组合逻辑块,而且输出又反馈回去,十有八九就是FSM的状态寄存器。这时候,优先关注复位值——那往往是FSM的初始状态。

好了,这一章的内容就这些。数字电路基础是FPGA逆向的基石,别觉得简单就跳过。我见过太多人,一上来就想着破解加密、提取密钥,结果连基本的组合逻辑和时序逻辑都分不清,最后分析出来的东西漏洞百出。

把这些基础打牢,后面我们讲网表分析、时序逆向的时候,你才能跟得上。


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