3、必备工具安装:GCC、Make、CMake、Flex、Bison、libelf、libftdi1-dev

好,咱们开始动手装工具。这一章没什么花哨的,全是硬货。

你要逆向比特流,光靠脑子想是不行的。你得有一整套工具链,把代码编译、链接、解析、烧录这些活全包了。我这些年折腾下来,发现最核心的就是这六个东西:GCC、Make、CMake、Flex、Bison、libelf、libftdi1-dev。少一个,你后面就得卡壳。

3.1 GCC:编译器的老大哥

GCC 是 GNU 编译器套件。说白了,它能把 C/C++ 代码变成机器码。你写个解析器,总得编译吧?

我个人习惯用 gcc 而不是 clang,原因很简单:在嵌入式逆向这个圈子里,GCC 的兼容性最好。你拿到的那些老掉牙的 FPGA 工具链,多半只认 GCC。

安装命令很简单:

sudo apt-get install gcc g++

嗯,这里要注意:别只装 gccg++ 也得装上。很多 C++ 写的解析库,没有 g++ 你编译不过去。

我的经验: 如果你在 Ubuntu 20.04 以上,默认装的是 GCC 9 或更高版本。够用了。别追新,稳定第一。

3.2 Make:自动化构建的基石

Make 是个老古董,但你别小看它。你写个比特流解析器,源文件可能几十个。难道每次改一行代码,都要手动敲一遍编译命令?

Make 就是干这个的。你写个 Makefile,它自动帮你搞定依赖关系和增量编译。

sudo apt-get install make

我曾经在一个项目里,因为 Makefile 写错了依赖,导致每次改一个头文件,整个项目都要重新编译。那叫一个慢啊……后来老老实实把依赖关系理清了,编译时间从 5 分钟降到了 10 秒。

3.3 CMake:跨平台的构建系统

Make 虽然好用,但跨平台是个大问题。你在 Linux 上写的 Makefile,拿到 macOS 上可能就跑不了。CMake 就是来解决这个问题的。

CMake 不直接编译代码,它先生成本地构建文件(比如 Makefile 或 Visual Studio 项目),然后再调用 Make 去编译。

sudo apt-get install cmake

我个人建议:版本别低于 3.10。太老的 CMake 不支持很多现代特性,比如 target_link_libraries 的精确控制。

避坑指南: 我曾经在 Ubuntu 18.04 上直接用 apt 装 CMake,结果版本是 3.5。后来编译一个依赖 libftdi 的项目,死活报错。查了半天,发现是 CMake 版本太低,找不到 ftdi 的库路径。最后手动升级到 3.16 才解决。

3.4 Flex & Bison:词法分析与语法分析

这两个工具,是解析比特流格式的利器。

你想想看,比特流本质上是一串二进制数据。你要从中提取出配置信息、路由信息、LUT 内容……手动写解析代码?累死你。

Flex 负责词法分析,说白了就是把二进制流切成一个个“单词”。Bison 负责语法分析,把这些“单词”按照规则组合成有意义的“句子”。

sudo apt-get install flex bison

我记得第一次用 Flex 写比特流解析器时,花了三天才把规则写对。但一旦写好了,后面解析任何厂商的比特流,都只需要改规则文件,不用动 C 代码。一劳永逸。

注意: Flex 和 Bison 的版本要匹配。Flex 2.6 以上搭配 Bison 3.0 以上,基本没问题。别一个装 2.5,一个装 3.8,那会出怪毛病。

3.5 libelf:ELF 文件操作库

为什么逆向比特流需要 libelf?

因为很多 FPGA 厂商(比如 Xilinx)会把比特流打包成 ELF 格式。你要解析比特流,就得先解析 ELF 文件头,找到真正的比特流数据段。

libelf 提供了一套 API,让你可以读取、修改、创建 ELF 文件。不用自己手写 ELF 解析器。

sudo apt-get install libelf-dev

嗯,这里要强调一下:装的是 libelf-dev,不是 libelf。前者包含头文件和静态库,后者只有运行时库。你编译代码时,需要的是前者。

3.6 libftdi1-dev:FTDI 芯片驱动库

最后这个,是硬件层面的。你要把比特流烧录到 FPGA 里,总得有个通道吧?

FTDI 芯片(比如 FT2232H)是最常用的 USB 转 JTAG 桥接芯片。libftdi1-dev 就是它的驱动库,让你可以通过 USB 直接操作 JTAG 引脚。

sudo apt-get install libftdi1-dev

我曾经踩过一个坑:装完 libftdi1-dev 后,发现系统里还有另一个叫 libftdi-dev 的包(注意没有“1”)。这两个包不兼容!libftdi1 是新的 API,libftdi 是老版本。如果你用新 API 链接老库,编译能过,运行就崩。

总结一下安装命令:
sudo apt-get update
sudo apt-get install gcc g++ make cmake flex bison libelf-dev libftdi1-dev
一行命令,全部搞定。

知识体系结构图

下面这张图,帮你理清这些工具之间的关系:

比特流逆向工具链结构图 比特流逆向工程 代码编译与构建 格式解析与生成 硬件通信与烧录 GCC Make CMake Flex(词法分析) Bison(语法分析) libelf(ELF解析) libftdi1-dev(FTDI驱动) JTAG协议 USB通信 工具链核心逻辑: 编译代码 → 解析格式 → 硬件通信 → 完成逆向

这张图你看懂了吗?从上往下,就是你的工作流程。先编译好解析器,然后用 Flex/Bison 解析比特流格式,最后通过 libftdi 烧录到 FPGA 里。缺一环,整个链条就断了。

安装顺序建议: 先装 GCC 和 Make,再装 CMake,然后是 Flex 和 Bison,最后装 libelf 和 libftdi1-dev。因为 CMake 在配置时会检测 GCC 和 Make 是否存在,Flex/Bison 生成代码后需要 GCC 编译,libelf 和 libftdi 是最后链接时用的。

好了,工具装完,下一章咱们就开始写真正的解析代码了。到时候你会感谢今天装好的这些东西。


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