第1章:angr环境搭建
说实话,angr 的安装是很多人入门的第一道坎。我记得自己第一次装 angr 时,光解决依赖冲突就花了大半天。嗯,今天我就把踩过的坑和经验一起分享给你。
1.1 为什么推荐用虚拟环境?
angr 依赖的库版本比较特殊。比如它需要特定版本的 claripy、z3-solver,这些库如果和系统全局的 Python 包混在一起,很容易打架。
我个人的习惯是:每个逆向项目都建一个独立的虚拟环境。这样 angr 的依赖不会污染其他项目,其他项目也不会影响 angr。
核心原则:永远不要在系统全局 Python 里直接 pip install angr。你想想看,万一系统里有个旧项目依赖低版本的 numpy,angr 一装就把 numpy 升级了,那项目不就炸了吗?
1.2 虚拟环境配置(Python 3.8 - 3.11)
angr 官方推荐 Python 3.8 到 3.11。我个人建议用 Python 3.9,兼容性最好。我曾经试过 Python 3.12,结果某些底层 C 扩展编译不过去,折腾了半天还是退回了 3.9。
下面我给出两种虚拟环境方案:
方案一:使用 venv(Python 自带)
# 创建虚拟环境
python3.9 -m venv angr_env
# 激活环境(Linux/Mac)
source angr_env/bin/activate
# 激活环境(Windows)
angr_env\Scripts\activate
# 升级 pip(这一步很重要)
pip install --upgrade pip setuptools wheel
方案二:使用 conda(推荐新手)
# 创建环境
conda create -n angr_env python=3.9
# 激活环境
conda activate angr_env
# 安装基础依赖
conda install pip setuptools wheel
我的建议:如果你在 Windows 上开发,用 conda 会更省心。因为 angr 的某些依赖在 Windows 上编译容易出问题,conda 可以直接下载预编译好的二进制包。
1.3 安装 angr
激活虚拟环境后,安装就一行命令:
pip install angr
等等,别急着跑。这里有几个坑我得提前告诉你:
常见问题 1:网络超时
angr 的依赖包比较多,国内用户经常遇到下载超时。我建议用清华镜像:
pip install angr -i https://pypi.tuna.tsinghua.edu.cn/simple
常见问题 2:z3 编译失败
z3-solver 是 angr 的核心符号执行引擎。如果你遇到编译错误,多半是系统缺少 C++ 编译工具链。
| 操作系统 | 需要安装的工具 |
|---|---|
| Ubuntu/Debian | sudo apt install build-essential cmake |
| CentOS/RHEL | sudo yum groupinstall "Development Tools" |
| macOS | xcode-select --install |
| Windows | 安装 Visual Studio Build Tools 或 MinGW |
注意:Windows 用户如果编译失败,可以直接用 conda 安装:conda install -c conda-forge angr。conda 会帮你搞定所有二进制依赖。
1.4 验证安装
安装完成后,我们来验证一下。写个简单的测试脚本:
import angr
# 创建一个简单的二进制文件分析项目
proj = angr.Project("/bin/ls", auto_load_libs=False)
# 查看项目基本信息
print("架构:", proj.arch)
print("入口点:", hex(proj.entry))
print("文件名:", proj.filename)
# 检查 angr 版本
print("angr 版本:", angr.__version__)
如果输出类似下面这样,说明安装成功了:
架构: AMD64
入口点: 0x4017a0
文件名: /bin/ls
angr 版本: 9.2.xxx
注意:这里 auto_load_libs=False 是我个人的习惯。加载系统库会拖慢分析速度,而且很多时候我们只关心二进制本身,不需要加载外部依赖。
1.5 常见依赖问题排查
我整理了一份常见问题清单,都是我在项目中实际遇到过的:
问题 1:ImportError: No module named 'angr'
多半是没激活虚拟环境。检查一下终端前面有没有 (angr_env) 这个前缀。
问题 2:angr 安装后无法导入,报错关于 claripy
claripy 是 angr 的符号表达式引擎。我曾经遇到过版本不匹配的情况,解决方案是:
pip uninstall claripy angr
pip install angr --no-cache-dir
问题 3:Windows 上安装报错 "Microsoft Visual C++ 14.0 is required"
去微软官网下载 "Visual Studio Build Tools",安装时勾选 "C++ 生成工具" 即可。
问题 4:macOS 上安装报错关于 "libomp"
angr 的某些并行计算依赖 OpenMP。macOS 需要手动安装:
brew install libomp
1.6 知识体系总览
下面这张图是我画的 angr 环境搭建的完整流程。你可以对照着检查自己卡在哪一步:
1.7 写在最后
环境搭建这块,说白了就是耐心活。我第一次装 angr 时,z3 编译报错,查了半天发现是 cmake 版本太老。后来换了 conda 安装,一分钟搞定。
如果你按照上面的步骤走,应该 10 分钟就能搭好环境。要是遇到问题也别慌,先看看报错信息,多半是缺编译工具或者网络问题。
一个小技巧:安装完成后,建议运行一下 angr 自带的测试用例:python -m pytest --pyargs angr。如果全部通过,说明环境完全 OK。