3、环境搭建(上):Linux虚拟机安装与配置、必备工具链安装
做固件逆向分析,第一件事不是拿IDA去怼二进制文件,而是先把你的工作环境收拾利索了。我见过太多新手,上来就装个Windows版的binutils就开始搞,结果遇到符号链接问题、路径分隔符问题,折腾半天连个文件都解不开。
说白了,固件逆向的战场在Linux上。你想想看,思科的路由器、交换机,底层跑的都是Linux或者类Unix系统。你用Windows去分析Linux的固件,就像拿着筷子喝汤——不是不行,但别扭得很。
我个人习惯用Ubuntu LTS版本,稳定、社区活跃、遇到问题好搜。今天我们就从零开始,把Linux虚拟机搭起来,再把必备的工具链装好。
3.1 虚拟机选型与安装
虚拟机软件我推荐两个:VMware Workstation Pro 和 VirtualBox。前者功能强、性能好,但收费;后者免费开源,够用。我个人用VMware多一些,但如果你刚入门,用VirtualBox完全没问题。
这里有个小坑:记得开启CPU的虚拟化技术(VT-x/AMD-V)。我遇到过好几次,装好虚拟机一启动就报错,查了半天发现BIOS里没开虚拟化。嗯,这个别忘了。
Ubuntu版本我建议选22.04 LTS,别追新。为什么?因为很多工具链在LTS版本上测试最充分,你追个24.04,说不定哪个包就编译不过了。我在项目里吃过这个亏,追新版本结果binutils的某个补丁没跟上,折腾了两天。
- CPU:至少2核(推荐4核)
- 内存:至少4GB(推荐8GB)
- 磁盘:至少40GB(推荐80GB)
- 网络:NAT模式(后续可改桥接)
3.2 必备工具链安装
装好系统后,第一件事就是装工具链。别急着去官网一个个下载,Ubuntu的apt源里基本都有。
打开终端,先更新一下源:
sudo apt update
sudo apt upgrade -y
然后安装核心工具链:
sudo apt install -y build-essential binutils
build-essential 这个包包含了gcc、g++、make等编译工具。你可能会问:我又不写C代码,装这个干嘛?
原因很简单:逆向分析时经常需要编译一些小工具,比如解包脚本、模拟器插件。没有编译环境,你寸步难行。我记得有一次分析一个思科交换机的固件,需要自己写个解包器,没有gcc的话,那活儿根本干不了。
binutils 就更关键了。它包含了 objdump、readelf、strings、nm 这些逆向必备的命令。说白了,没有binutils,你连固件里有什么符号都看不到。
dpkg -L binutils 看看都装了哪些工具。你会发现很多平时没注意到的实用小工具,比如 size、addr2line 这些。
3.3 Python3与pip环境配置
Python在固件逆向里有多重要?这么说吧,我写的分析脚本里,80%都是Python。从解析固件头、提取文件系统,到调用Capstone反汇编引擎,Python都是首选。
Ubuntu 22.04默认带了Python3,但版本可能不是最新的。先检查一下:
python3 --version
pip3 --version
如果pip没装,手动装一下:
sudo apt install -y python3-pip
然后升级pip到最新版:
pip3 install --upgrade pip
这里有个坑:千万别用sudo pip install。我刚开始做逆向时,习惯性sudo pip装包,结果把系统Python环境搞乱了,重装了两次系统才长记性。建议用虚拟环境或者加 --user 参数:
pip3 install --user <包名>
接下来装几个逆向必备的Python库:
pip3 install --user capstone pyelftools binascii
- capstone:轻量级反汇编框架,支持ARM、MIPS、x86等多种架构
- pyelftools:解析ELF文件的利器,分析固件头时经常用到
- binascii:二进制和ASCII互转,处理固件数据时必备
pip3 install --user capstone[mips]
3.4 Git版本控制基础
做逆向分析,代码和脚本的版本管理很重要。你可能觉得一个人写脚本不需要Git,但等你写了十几个分析脚本,改来改去发现改坏了,想回退却找不到原始版本时,就知道Git有多重要了。
安装Git:
sudo apt install -y git
配置基本信息:
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
我个人习惯再加几个别名,用起来顺手:
git config --global alias.st status
git config --global alias.ci commit
git config --global alias.br branch
git config --global alias.co checkout
基础操作其实就几个:
- git init:初始化仓库
- git add:添加文件到暂存区
- git commit:提交修改
- git log:查看历史
- git diff:查看改动
举个例子,我通常这样管理分析脚本:
mkdir cisco_firmware_analysis
cd cisco_firmware_analysis
git init
# 写了一个解包脚本
vim unpack.py
git add unpack.py
git commit -m "初始版本:思科固件解包脚本"
为什么要用Git?因为固件分析是个反复试错的过程。你可能会写一个脚本,跑完发现不对,改了几次才找到正确的方法。有了Git,你可以随时回退到某个版本,对比不同思路的差异。我曾经因为没做版本控制,把一个写好的解包脚本改废了,花了半天才重新写回来——从那以后,我写任何脚本前都会先git init。
3.5 本章知识体系
下面这张图概括了本章的核心内容,你可以把它当作环境搭建的检查清单:
环境搭建说难不难,说简单也不简单。关键是每一步都要稳,别图快。我见过太多人急着开始分析,结果环境没配好,后面各种报错,反而更浪费时间。
好了,虚拟机装好了,工具链也齐了,Python和Git都就位了。下一章我们开始真正接触固件——先看看思科固件长什么样,怎么把它拆开。
公众号:蓝海资料掘金营,微信deep3321