第1章:环境搭建与工具链
做逆向工程,说白了就是跟硬件和固件「掰手腕」。你手里没有源码,没有文档,只有一堆二进制数据。这时候,你的工具就是你的武器。
我刚开始搞思科固件逆向那会儿,踩过的坑能绕实验室三圈。工具装不对,解包解不开,串口乱码……嗯,今天咱们就把这些坑一个个填平。
1.1 Linux逆向工作站搭建
为什么非要用Linux?因为大部分逆向工具都是Linux原生的。Windows也能跑,但你会遇到各种兼容性问题。我个人习惯用Ubuntu 20.04 LTS,稳定,社区活跃,驱动支持好。
核心配置建议:
- 系统:Ubuntu 20.04 LTS 或 22.04 LTS
- 内存:至少16GB,32GB更佳(Ghidra吃内存大户)
- 硬盘:512GB SSD起步,固件解包后动辄几十GB
- CPU:多核优先,逆向分析经常并行跑任务
装好系统后,第一件事就是更新源和装基础包:
sudo apt update && sudo apt upgrade -y
sudo apt install build-essential git vim curl wget python3-pip -y
我在项目中遇到过一个问题:新装的Ubuntu没有装Python3的虚拟环境,结果装Binwalk时依赖冲突,折腾了两小时。所以建议你提前装好:
sudo apt install python3-venv python3-dev -y
1.2 Ghidra与IDA Pro的安装与配置
Ghidra:免费且强大
Ghidra是NSA开源的逆向工具,说白了就是IDA的免费替代品。但它有个毛病——依赖Java。我第一次装的时候,Java版本不对,Ghidra直接打不开。
安装步骤:
- 下载JDK 17(Ghidra 10.x以上必须用JDK 17)
- 从GitHub下载Ghidra压缩包
- 解压到
/opt/ghidra - 运行
./ghidraRun
wget https://github.com/NationalSecurityAgency/ghidra/releases/download/Ghidra_10.3.3_build/ghidra_10.3.3_PUBLIC_20231001.zip
unzip ghidra_10.3.3_PUBLIC_20231001.zip -d /opt/
cd /opt/ghidra_10.3.3_PUBLIC
./ghidraRun
小技巧:Ghidra默认内存只有2GB,分析大固件时会卡死。修改 ghidraRun 文件中的 MAXMEM 为 8G 或 16G。
IDA Pro:商业级的利器
IDA Pro虽然贵,但它的反编译引擎确实强。尤其是处理MIPS、ARM这些嵌入式架构时,Ghidra偶尔会翻车,IDA基本稳如老狗。
安装注意:
- IDA Pro 7.7以上版本支持Python 3
- 建议安装到
/opt/idapro - 首次运行需要激活license
我曾经用IDA分析一个思科交换机的固件,Ghidra死活识别不出某个函数调用,IDA一秒搞定。所以我的建议是:两个都装,互相验证。
1.3 Binwalk与固件解包工具
Binwalk是固件逆向的瑞士军刀。它能自动识别固件中的文件系统、压缩包、引导加载程序等。
安装Binwalk:
git clone https://github.com/ReFirmLabs/binwalk.git
cd binwalk
sudo python3 setup.py install
sudo apt install mtd-utils gzip bzip2 tar arj lhasa p7zip p7zip-full cabextract cramfsswap squashfs-tools -y
注意:Binwalk依赖很多外部工具来解压不同格式。上面那行apt命令装的是常用解压工具,缺一个就可能导致解包失败。
基本用法:
binwalk -Me firmware.bin # 自动扫描并解包
binwalk -Me -e firmware.bin # 强制提取所有文件
我记得有一次分析一个思科路由器固件,Binwalk扫出来一堆东西,但就是解不开squashfs文件系统。后来发现是缺少 squashfs-tools,装上就好了。你想想看,这种坑多冤枉。
1.4 串口调试工具(Putty/Screen)
串口是嵌入式设备的生命线。很多思科设备在启动时都会通过串口输出调试信息,甚至提供uboot命令行。没有串口,你就像瞎子摸象。
硬件准备
- USB转TTL模块(推荐CP2102或CH340)
- 杜邦线若干
- 思科设备上的串口引脚定义(通常是RJ45转DB9)
Screen:Linux下的串口神器
sudo apt install screen -y
screen /dev/ttyUSB0 115200 # 波特率通常为115200或9600
常用快捷键:
Ctrl+A + D:断开screen会话Ctrl+A + K:杀死当前会话Ctrl+A + [:进入滚动模式(查看历史输出)
Putty:Windows用户的备选
如果你在Windows上工作,Putty的串口模式也很好用。选择Serial,填上COM口和波特率就行。
避坑指南:我曾经因为串口线太长(超过2米),导致信号衰减,数据全是乱码。后来换成50cm的线,问题解决。串口线越短越好,这是血的教训。
1.5 本章知识体系
下面这张图是我自己画的,把本章的核心逻辑串起来了。你看一眼就能明白整个环境搭建的脉络:
这张图把四个核心工具的关系讲清楚了。Linux工作站是底座,Ghidra和IDA Pro负责静态分析,Binwalk负责拆解固件,串口工具负责动态调试。四者缺一不可。
我的建议:别急着把所有工具都装到最新版。先装稳定版,跑通一个完整流程再说。我见过太多人花三天装工具,结果一个固件都没分析过。
好了,环境搭建这块就这些。工具装好了,下一章咱们就开始真刀真枪地拆固件了。