第三章:逆向环境搭建——必备工具链与硬件选型
做FPGA逆向,说白了就是跟芯片内部那些看不见摸不着的逻辑门打交道。环境搭得好,后面能省一半的力气。我刚开始干这行的时候,以为装个Vivado就能搞定一切,结果第一次抓信号就吃了大亏——示波器带宽不够,高频信号全被滤掉了,折腾了两天才发现是工具的问题。
今天咱们就把这套环境掰开揉碎了讲清楚。从软件工具链到硬件选型,我会把踩过的坑、试过的方案,一股脑儿倒出来。
3.1 软件工具链:三驾马车
逆向FPGA,你至少得有三套工具。缺一个,活儿就干不痛快。
3.4.1 Vivado / ISE —— 官方参考系
Vivado和ISE是Xilinx的官方工具。逆向的时候,它们不是用来做设计的,而是用来当「参照物」的。
- Vivado:针对7系列及之后的芯片(比如Artix-7、Kintex-7、Virtex-7)。我建议装2018.3或2019.1版本,稳定,bug少。
- ISE:针对Spartan-6及更老的芯片。这玩意儿在Windows 10上兼容性很差,我一般用虚拟机跑。
用Vivado逆向,主要干三件事:
- 读
.bit文件的头信息,确认芯片型号和封装 - 用
open_hw_manager连上开发板,抓取内部信号 - 对比自己逆向出来的网表和官方综合结果是否一致
3.4.2 OpenFPGA —— 开源逆向框架
OpenFPGA是个好东西。它能把FPGA的位流文件反解成逻辑网表。说白了,就是把你从二进制数据里解放出来。
我记得第一次用OpenFPGA反解一个Xilinx Spartan-6的位流,跑了大概20分钟,出来一个Verilog网表。虽然里面全是LUT #(.INIT(16'hABCD))这种原始描述,但至少能看懂逻辑关系了。
- 位流解析:把
.bit文件拆成配置帧 - 逻辑映射:把配置帧映射到LUT、FF、BRAM等资源
- 网表生成:输出Verilog或EDIF格式的网表
安装OpenFPGA有点麻烦,依赖库多。我建议用Docker跑,省心。命令如下:
# 拉取镜像
docker pull openfpga/openfpga:latest
# 运行容器
docker run -it --rm \
-v $(pwd):/workspace \
openfpga/openfpga:latest \
openfpga --bitstream my_design.bit --output my_design.v
3.4.3 Project X-Ray —— Xilinx 7系列数据库
Project X-Ray是逆向Xilinx 7系列芯片的「字典」。它把芯片内部每个配置位的含义都标出来了。没有它,你对着位流文件就是看天书。
这个项目维护了Artix-7、Kintex-7、Virtex-7的完整数据库。包括:
- CLB(可配置逻辑块)的配置位映射
- IOB(输入输出块)的配置位映射
- BRAM(块RAM)的配置位映射
- 时钟资源的配置位映射
bit2fasm,但那个项目已经不怎么维护了。
3.2 硬件选型:逻辑分析仪与示波器
软件搞定了,硬件才是大头。我见过太多人花几万块买设备,结果用不上。也见过有人用几百块的逻辑分析仪,干出了漂亮活儿。
3.2.1 逻辑分析仪选型
逻辑分析仪用来抓数字信号。FPGA逆向中,最常用的是抓取内部状态机的跳转、总线协议的数据。
| 参数 | 入门级 | 进阶级 | 专业级 |
|---|---|---|---|
| 采样率 | 100 MHz | 500 MHz | 2 GHz |
| 通道数 | 8 | 16 | 32 |
| 存储深度 | 64 Kb | 1 Mb | 16 Mb |
| 价格 | 200-500元 | 2000-5000元 | 1万+元 |
| 推荐型号 | Saleae Logic 8 | Digilent Analog Discovery 2 | Keysight 16860系列 |
我个人习惯用Saleae Logic 8。便宜、好用、软件界面清爽。抓个SPI、I2C、UART完全够用。但如果你要抓DDR内存的读写信号,那得上专业级——采样率至少1 GHz起步。
3.2.2 示波器选型
示波器用来抓模拟信号。FPGA逆向中,主要用来看电源纹波、时钟抖动、信号完整性。
选示波器,记住三个数字:
- 带宽: 至少是你要测信号频率的5倍。比如FPGA跑100 MHz,示波器带宽至少500 MHz。
- 采样率: 至少是带宽的2倍。500 MHz带宽,采样率至少1 GSa/s。
- 存储深度: 越大越好。10 Mpts起步,不然抓一段长波形就卡死了。
| 场景 | 带宽 | 采样率 | 推荐型号 | 价格 |
|---|---|---|---|---|
| 低速调试(<50 MHz) | 100 MHz | 1 GSa/s | Rigol DS1104Z | 2000元 |
| 中速逆向(50-200 MHz) | 500 MHz | 2 GSa/s | Siglent SDS2504X | 8000元 |
| 高速信号(>200 MHz) | 1 GHz | 5 GSa/s | Keysight DSOX3104T | 3万+元 |
3.3 环境搭建流程图
下面这张图,是我自己总结的环境搭建流程。照着走,基本不会漏东西。
3.4 环境验证:先跑个Demo
环境搭好了,别急着上手逆向。先跑个Demo验证一下。
我一般这么干:
- 用Vivado生成一个简单的计数器工程,输出到LED
- 把
.bit文件下载到开发板 - 用逻辑分析仪抓LED引脚的信号
- 用OpenFPGA反解位流,看生成的网表里有没有这个计数器
如果逻辑分析仪能抓到方波,OpenFPGA能反解出counter模块,那环境就通了。如果抓不到,先检查触发设置——我当年就是忘了设触发条件,白抓了半小时。
- ✅ Vivado能识别开发板并下载位流
- ✅ OpenFPGA能解析位流并输出网表
- ✅ Project X-Ray数据库能正确映射配置位
- ✅ 逻辑分析仪能稳定抓取信号
- ✅ 示波器能测量时钟频率和幅度
嗯,这套环境搭下来,大概需要半天到一天时间。别急,慢慢来。工具顺手了,后面逆向才能快得起来。
公众号:蓝海资料掘金营,微信deep3321