第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系列所有器件的比特流映射数据。
  • 工具链bitreadbitmergesegprint等。
  • 典型用法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 知识体系总览

下面这张图,是我自己画的。它把本章的知识点串起来了。

比特流逆向环境搭建 硬件工具 软件工具 开发板选型 JTAG调试器 逻辑分析仪 Project X-Ray prjxray Vivado Artix-7(入门) Kintex-7(中级) Virtex-7(高级) 比特流逆向实战 三者缺一不可,硬件负责读取,软件负责解析,开发板负责验证

嗯,这张图把本章的核心逻辑讲清楚了。硬件工具负责「读」,软件工具负责「解」,开发板负责「验」。三者缺一不可。

3.5 环境搭建实战建议

最后,我分享几个实战中的小技巧。

  1. 先搭软件环境:Vivado安装最慢,建议先装。prjxray依赖Python,记得用虚拟环境。
  2. 硬件连接测试:JTAG连上后,用vivado -mode tcl输入open_hw_manager,看看能不能识别到芯片。
  3. 跑一个最小设计:写一个LED闪烁的工程,生成比特流。然后用prjxray解析,看看能不能还原出LUT和FF。
  4. 备份配置文件:Vivado的工程文件、prjxray的数据库,都备份一份。我曾经重装系统后数据库丢了,重新下载花了半天。
一句话总结:环境搭好了,逆向就成功了一半。别急着动手,先把工具链跑通。

专注资料整理