一、网表逆向基础:什么是网表?
大家好,我是老周。在硬件安全这行摸爬滚打了十几年,今天咱们来聊聊网表逆向这个有意思的话题。
先问个问题:你拆过芯片吗?我拆过,而且拆了不少。但今天不聊拆芯片,咱们聊更底层的东西——网表。
1.1 网表到底是什么?
网表,英文叫Netlist。说白了,它就是一张“接线图”。
你想想看,一个芯片里有几亿个晶体管,它们怎么连的?靠的就是网表。网表记录了每个逻辑门(AND、OR、NOT这些)的输入输出连接关系。
举个例子,一个简单的网表片段长这样:
// 一个简单的网表示例
module and_gate (
input a, b,
output y
);
wire n1;
nand U1 (n1, a, b);
inv U2 (y, n1);
endmodule
这段代码描述了一个AND门。它先用NAND门取反,再用反相器取回来。嗯,实际项目中没人这么干,但用来理解网表结构刚刚好。
我个人习惯把网表分成两类:
- 结构网表:描述门级连接关系,像电路原理图
- 行为网表:描述逻辑功能,更像代码
做逆向的时候,我们主要跟结构网表打交道。为什么?因为行为网表已经被综合工具优化过了,信息丢失严重。
1.2 网表在IC设计流程中的位置
这张图我画了很多次,每次讲课都会拿出来。它展示了网表在整个芯片设计流程中的位置:
看到没?网表是RTL代码和物理芯片之间的桥梁。综合工具把RTL代码翻译成网表,然后布局布线工具把网表变成版图。
我在项目中遇到过一件事:有个客户拿到的网表是综合后的版本,里面全是标准单元。他们想验证功能,结果发现网表里连个寄存器都找不到,全是DFF(D触发器)拆开后的样子。这就是综合优化的结果。
1.3 网表逆向的动机
为什么要做网表逆向?说白了,就三个原因:
- IP核验证:你买了个加密IP核,想确认它有没有后门
- 竞争分析:对手的产品功能很强,想看看用了什么架构
- 安全审计:检查芯片里有没有隐藏的硬件木马
我记得2018年有个案子,某公司采购的加密芯片被爆出有后门。他们找我们做逆向分析,结果在网表里发现了一个隐藏的状态机。这个状态机在特定条件下会泄露密钥。嗯,这就是网表逆向的价值所在。
核心观点:网表逆向不是破解,而是验证。就像你买了把锁,想看看里面有没有机关一样。
1.4 法律边界——这个必须说清楚
做逆向分析,法律红线一定要清楚。我见过太多人踩坑了。
| 行为 | 法律风险 | 我的建议 |
|---|---|---|
| 对自己购买的芯片做逆向 | 低(合理使用) | 可以,但别公开细节 |
| 对竞争对手产品做逆向 | 高(可能侵权) | 建议先咨询法务 |
| 破解加密IP核的保护 | 极高(违反DMCA) | 千万别碰,除非有授权 |
| 学术研究目的逆向 | 中(需注意范围) | 做好记录,保留证据 |
警告:我曾经有个朋友,帮客户逆向了一款加密芯片,结果客户拿去仿制了。最后朋友被牵连,吃了官司。记住:你可以分析,但别帮人仿制。
1.5 网表逆向的基本流程
做网表逆向,我一般按这个步骤来:
- 网表解析:把网表文件读进来,建立内部数据结构
- 层次化分析:识别模块边界,把大网表拆成小块
- 功能识别:找出标准单元(加法器、乘法器、状态机等)
- 控制流提取:分析状态机、控制逻辑
- 数据流分析:追踪关键信号路径
- 功能重构:把网表还原成RTL级别的描述
你想想看,这跟软件逆向很像。软件逆向是把机器码还原成高级语言,网表逆向是把门级网表还原成RTL代码。
小技巧:刚开始做网表逆向,别想着一步到位。先找几个简单的模块练手,比如时钟分频器、计数器这些。我刚开始也是从这些基础模块入手的。
1.6 常用工具
工欲善其事,必先利其器。做网表逆向,我常用的工具有:
- Yosys:开源的综合工具,也能做网表分析和转换
- Verilator:高性能的Verilog仿真器,适合大规模网表
- Netlist Explorer:我自己写的一个小工具,用来可视化网表结构
- Python + Pyverilog:写脚本处理网表,灵活度高
说实话,没有万能工具。每个项目都有自己的特点,选工具要看具体情况。
好了,这一章就聊这么多。网表逆向是个很有意思的领域,既有技术挑战,又有法律边界需要把握。后面我们会一步步深入,从网表解析开始,到功能识别,再到IP核保护破解实战。
记住:技术本身没有对错,关键看你怎么用。
公众号:蓝海资料掘金营,微信deep3321