2. 环境搭建:在Ubuntu 22.04上从源码编译Avatar2,解决常见依赖问题
说实话,环境搭建往往是整个课程里最劝退的一步。我自己带过不少学生,很多人兴致勃勃地下载了Avatar2源码,结果卡在编译错误上,一卡就是半天。今天我就把这条路给你趟平了,咱们一步步来。
2.1 为什么非要自己编译?
你可能会问:直接用pip装不行吗?嗯,理论上可以。但Avatar2是个多架构仿真框架,它需要和QEMU、GDB、各种硬件模拟器深度绑定。预编译的包往往缺少某些后端支持,比如我常用的ARM TrustZone调试功能,pip版本就默认没开。
说白了,自己编译才能拿到完整能力。尤其是做内核逆向,你后面会用到很多定制化的模拟器插件,这些都得从源码搞起。
2.2 系统准备:Ubuntu 22.04 LTS
我建议你直接用Ubuntu 22.04的桌面版或者服务器版都行。为什么选这个版本?因为它的Python 3.10和GCC 11.3搭配起来,跟Avatar2的依赖树冲突最少。我之前在20.04上试过,折腾了半天才搞定libffi的版本问题。
sudo apt update && sudo apt upgrade -y,把内核和基础库都刷到最新。这一步能避免很多莫名其妙的编译错误。
2.3 安装基础依赖
打开终端,咱们先把编译工具链装上:
sudo apt install -y build-essential git cmake pkg-config
sudo apt install -y python3 python3-pip python3-venv python3-dev
sudo apt install -y libglib2.0-dev libpixman-1-dev libfdt-dev
sudo apt install -y libcapstone-dev libunwind-dev
sudo apt install -y ninja-build
这里我特别想强调一下 libpixman-1-dev 这个包。很多人编译QEMU的时候卡住,就是因为缺了这个。它负责像素缓冲区管理,Avatar2的图形化调试界面要用到。
2.4 克隆Avatar2源码
找个干净的目录,比如 ~/workspace:
mkdir -p ~/workspace && cd ~/workspace
git clone https://github.com/avatartwo/avatar2.git
cd avatar2
我个人习惯用 git checkout 切到最新的稳定tag,而不是直接跑master分支。master有时候会有实验性代码,编译不过去挺闹心的。
git tag -l | sort -V | tail -n 1
git checkout v0.9.0 # 假设最新稳定版是0.9.0
2.5 创建虚拟环境
千万别直接在系统Python里装依赖!我吃过这个亏——有一次把系统的 requests 库升级了,结果apt直接崩了。用虚拟环境隔离:
python3 -m venv avatar2-env
source avatar2-env/bin/activate
看到终端前面多了 (avatar2-env) 前缀,就说明环境激活成功了。
2.6 安装Python依赖
先升级pip和setuptools:
pip install --upgrade pip setuptools wheel
然后安装核心依赖:
pip install -r requirements.txt
这里有个坑——requirements.txt 里列的是最小依赖集。如果你要做全架构支持,还得额外装:
pip install pyelftools capstone unicorn pygdbmi
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
2.7 编译Avatar2本体
Avatar2的编译系统用的是setuptools,但需要先构建一些C扩展:
python setup.py build_ext --inplace
这一步会编译 avatar2/arch/x86 和 avatar2/arch/arm 下的底层接口。如果报错说缺 Python.h,那就是你没装 python3-dev,回去补上。
编译完成后,安装到当前虚拟环境:
pip install -e .
-e 参数表示可编辑模式,这样你修改源码后不用重新安装,直接就能生效。做逆向分析时经常要改Avatar2的底层逻辑,这个模式能省不少事。
2.8 编译QEMU后端(可选但推荐)
Avatar2默认会用系统自带的QEMU,但版本可能太老。我建议自己编译一个带补丁的版本:
cd ~/workspace
git clone https://github.com/avatartwo/avatar-qemu.git
cd avatar-qemu
git submodule init && git submodule update --recursive
mkdir build && cd build
../configure --target-list="arm-softmmu,aarch64-softmmu,x86_64-softmmu" \
--enable-debug --enable-capstone --enable-pie
make -j$(nproc)
编译QEMU大概需要10-20分钟,取决于你的CPU核心数。这时候可以去泡杯咖啡。
编译完成后,把QEMU路径加到环境变量里:
export PATH=$PATH:~/workspace/avatar-qemu/build/arm-softmmu
export PATH=$PATH:~/workspace/avatar-qemu/build/aarch64-softmmu
export PATH=$PATH:~/workspace/avatar-qemu/build/x86_64-softmmu
最好把这行加到 ~/.bashrc 里,免得每次都要手动export。
2.9 验证安装
跑一个简单的测试,看看Avatar2能不能正常启动:
cd ~/workspace/avatar2
python -c "from avatar2 import Avatar; print('Avatar2 imported successfully')"
如果看到成功消息,恭喜你,环境搭好了。再跑一下自带的测试用例:
python -m pytest tests/test_avatar.py -v -k "test_init"
测试通过的话,说明核心功能没问题。
2.10 常见问题与避坑
| 错误现象 | 原因 | 解决方案 |
|---|---|---|
fatal error: Python.h: No such file or directory |
缺少Python开发头文件 | sudo apt install python3-dev |
ModuleNotFoundError: No module named 'capstone' |
Capstone反汇编引擎未安装 | pip install capstone |
avatar2.arch.arm.ArmCortexA9: QEMU path not found |
QEMU未编译或路径未配置 | 检查QEMU编译路径,确认export生效 |
ImportError: libffi.so.8: cannot open shared object file |
libffi版本不匹配 | sudo apt install libffi-dev 并重新编译 |
我曾经遇到过一个特别隐蔽的问题: 在WSL2的Ubuntu 22.04上编译Avatar2,一切正常,但运行QEMU后端时总是段错误。查了两天才发现是WSL2的内核缺少KVM支持。解决方案是改用 --disable-kvm 重新编译QEMU,或者直接换到原生Linux环境。
2.11 知识体系总览
下面这张图帮你理清整个环境搭建的脉络:
这张图把整个搭建过程分成了四层:系统层打地基,依赖层铺管道,核心层建主体,后端层装引擎。每一层都依赖下一层,所以千万别跳步。
2.12 最后说两句
环境搭建确实琐碎,但这是你后面所有逆向分析工作的基础。我见过太多人因为环境没配好,后面跑demo时各种报错,最后心态崩了放弃的。所以,花点时间把这一步做扎实,绝对值。
如果你在编译过程中遇到我没提到的错误,先别慌。去Avatar2的GitHub Issues里搜一下,八成有人遇到过。实在不行,把错误日志贴到群里,大家一起看。
tar -czf avatar2-env-backup.tar.gz avatar2-env/
公众号:蓝海资料掘金营,微信deep3321