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++
嗯,这里要注意:别只装 gcc,g++ 也得装上。很多 C++ 写的解析库,没有 g++ 你编译不过去。
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 的精确控制。
3.4 Flex & Bison:词法分析与语法分析
这两个工具,是解析比特流格式的利器。
你想想看,比特流本质上是一串二进制数据。你要从中提取出配置信息、路由信息、LUT 内容……手动写解析代码?累死你。
Flex 负责词法分析,说白了就是把二进制流切成一个个“单词”。Bison 负责语法分析,把这些“单词”按照规则组合成有意义的“句子”。
sudo apt-get install flex bison
我记得第一次用 Flex 写比特流解析器时,花了三天才把规则写对。但一旦写好了,后面解析任何厂商的比特流,都只需要改规则文件,不用动 C 代码。一劳永逸。
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
一行命令,全部搞定。
知识体系结构图
下面这张图,帮你理清这些工具之间的关系:
这张图你看懂了吗?从上往下,就是你的工作流程。先编译好解析器,然后用 Flex/Bison 解析比特流格式,最后通过 libftdi 烧录到 FPGA 里。缺一环,整个链条就断了。
好了,工具装完,下一章咱们就开始写真正的解析代码了。到时候你会感谢今天装好的这些东西。
公众号:蓝海资料掘金营,微信deep3321