第3章:比特流逆向环境搭建
做芯片逆向,说白了就是跟比特流打交道。这玩意儿是FPGA的灵魂,也是我们逆向工程师的「金矿」。
我个人习惯,先把环境搭好再动手。你想想看,工具不趁手,后面全是坑。今天我就把硬件、软件、开发板这三块掰开揉碎了讲。
3.1 硬件工具:JTAG调试器与逻辑分析仪
硬件工具是逆向的「眼睛」和「手」。没有它们,你连比特流都读不出来。
3.1.1 JTAG调试器
JTAG是FPGA的调试接口。说白了,它就是芯片的「后门」。
- Xilinx Platform Cable USB II:官方工具,稳定但贵。我建议新手别买,性价比太低。
- Digilent HS2/HS3:第三方兼容方案,便宜好用。我在项目中用过HS2,读写速度完全够用。
- 自制JTAG调试器:用FT2232H芯片自己焊一个。嗯,这个适合动手能力强的朋友。
我的经验:别在JTAG线上省钱。我曾经用一根劣质线,结果读出来的比特流全是乱码,排查了三天才发现是线的问题。
3.1.2 逻辑分析仪
逻辑分析仪用来抓取FPGA引脚上的信号。逆向时,你需要知道每个引脚在干什么。
- Saleae Logic 8/16:入门首选,采样率够用,软件好用。
- DSLogic Plus:国产替代,性价比高。我推荐预算有限的朋友选这个。
- Zeroplus LAP-C:老牌厂商,深度存储大,适合长时间抓取。
注意:逻辑分析仪的采样率至少要是信号频率的4倍。比如信号是50MHz,采样率至少要200MS/s。否则抓出来的波形会失真。
3.2 软件工具:Project X-Ray、prjxray、Vivado
软件工具是逆向的「大脑」。硬件把数据读出来,软件负责解析。
3.2.1 Project X-Ray
这是Xilinx 7系列比特流逆向的「圣经」。开源社区搞出来的,专门用来解析比特流格式。
- 功能:把比特流反解成LUT、FF、BRAM等基本单元。
- 安装:从GitHub克隆,依赖Python 3.6+和Vivado。
- 使用:
python3 xray.py --bitstream your.bit
核心思想:Project X-Ray通过大量实验,建立了比特流位与FPGA资源的映射关系。说白了,就是一本「比特流字典」。
3.2.2 prjxray
prjxray是Project X-Ray的Python库。它提供了更底层的API,方便你写脚本批量处理。
- 数据库:包含7系列所有器件的比特流映射数据。
- 工具链:
bitread、bitmerge、segprint等。 - 典型用法:
bitread -y your.bit > output.txt
我个人习惯用prjxray做批量逆向。比如一次处理100个比特流,写个Python脚本循环调用就行。
3.2.3 Vivado
Vivado是Xilinx的官方工具。逆向时,我们主要用它来生成参考比特流。
- 版本:2017.4以上,推荐2019.1。
- 用途:写一个简单的设计,综合、实现、生成比特流。然后用这个比特流去验证逆向结果。
- 技巧:用
write_bitstream -bin_file生成二进制格式,方便解析。
避坑指南:我曾经用Vivado 2020.1生成的比特流,prjxray死活解析不了。后来发现是版本不兼容。建议用2019.1,最稳。
3.3 开发板选型:Xilinx 7系列
开发板是逆向的「靶子」。选对了,事半功倍。
3.3.1 为什么选7系列?
7系列是Xilinx的经典架构。Artix-7、Kintex-7、Virtex-7,覆盖了从低端到高端的全部需求。
- Artix-7:低功耗、低成本,适合入门。比如XC7A35T。
- Kintex-7:性能均衡,适合中等复杂度项目。比如XC7K325T。
- Virtex-7:高端系列,适合大型设计。比如XC7VX690T。
3.3.2 推荐开发板
| 型号 | 芯片 | 价格(二手) | 适合场景 |
|---|---|---|---|
| Nexys 4 DDR | XC7A100T | 约500元 | 入门学习 |
| Basys 3 | XC7A35T | 约300元 | 低成本实验 |
| KC705 | XC7K325T | 约2000元 | 中等复杂度逆向 |
| VC707 | XC7VX485T | 约5000元 | 高端逆向 |
注意:二手开发板水很深。我建议买之前先问清楚:JTAG口是否完好?有没有被锁?曾经有人买到被锁死的板子,JTAG根本连不上。
3.4 知识体系总览
下面这张图,是我自己画的。它把本章的知识点串起来了。
嗯,这张图把本章的核心逻辑讲清楚了。硬件工具负责「读」,软件工具负责「解」,开发板负责「验」。三者缺一不可。
3.5 环境搭建实战建议
最后,我分享几个实战中的小技巧。
- 先搭软件环境:Vivado安装最慢,建议先装。prjxray依赖Python,记得用虚拟环境。
- 硬件连接测试:JTAG连上后,用
vivado -mode tcl输入open_hw_manager,看看能不能识别到芯片。 - 跑一个最小设计:写一个LED闪烁的工程,生成比特流。然后用prjxray解析,看看能不能还原出LUT和FF。
- 备份配置文件:Vivado的工程文件、prjxray的数据库,都备份一份。我曾经重装系统后数据库丢了,重新下载花了半天。
一句话总结:环境搭好了,逆向就成功了一半。别急着动手,先把工具链跑通。