angr:开源二进制符号执行分析平台安装与使用指南
一、项目官方信息
| 项目 | 信息 |
|---|---|
| GitHub 仓库 | https://github.com/angr/angr |
| 官方网站 | https://angr.io |
| 官方文档 | https://docs.angr.io |
| 开源协议 | BSD-2-Clause |
| 主要语言 | Python(约 89%) |
| Star 数 | 约 9.2k |
angr 是一个与平台无关的二进制分析框架(platform-agnostic binary analysis framework),由加州大学圣芭芭拉分校计算机安全实验室、亚利桑那州立大学 SEFCOM、其 CTF 战队 Shellphish 及开源社区共同维护。
它是一组 Python 3 库,加载一个二进制后可以做:
- 反汇编与中间表示(IR)提升;
- 程序插桩(instrumentation);
- 符号执行(symbolic execution);
- 控制流分析(CFG);
- 数据依赖分析;
- 值域分析(Value-set Analysis, VSA);
- 反编译(decompilation)。
angr 广泛用于 CTF 逆向解题、漏洞挖掘与二进制安全研究,是目前最知名的开源符号执行框架之一。

二、官方图片
上图为 angr 仓库在 GitHub 上的社交预览图。angr 本身是一个 Python 库,没有图形界面,通常在 IPython 等增强交互式环境中加载二进制并交互式调用其分析 API。
三、环境要求
- Python 3.8 及以上(推荐 Python 3.10+)。
- Linux(推荐 Ubuntu 20.04/22.04);macOS 亦可,Windows 建议用 WSL。
- 建议使用虚拟环境(venv / virtualenv)隔离依赖。
- 内存建议 4GB 以上;分析大型二进制或复杂符号路径时占用较高。
- 部分依赖(如 z3、unicorn)会随 pip 自动安装预编译包。
四、安装步骤
1. 建立虚拟环境
官方 README 给出的简短安装方式是用 virtualenv:
mkvirtualenv --python=$(which python3) angr && python -m pip install angr
等价地用标准 venv:
python3 -m venv ~/angr-env
source ~/angr-env/bin/activate
pip install --upgrade pip
2. 安装 angr
pip install angr
angr 会自动带上核心依赖(z3-solver、unicorn、capstone、pyvex 等)。
3. 验证安装
python -c "import angr; print(angr.__version__)"
能正常打印版本号即安装成功。
4. 加载第一个二进制
官方最常见的操作就是用 angr.Project 加载一个二进制:
import angr
p = angr.Project('/bin/bash')
在 IPython 里可以用 Tab 自动补全浏览 top-level-accessible methods 及其文档字符串。
五、使用方法
1. 符号执行解 CTF 题
官方 README 给出的经典示例——用符号执行在一个 CTF 题目里求出 flag:
import angr
project = angr.Project("angr-doc/examples/defcamp_r100/r100", auto_load_libs=False)
@project.hook(0x400844)
def print_flag(state):
print("FLAG SHOULD BE:", state.posix.dumps(0))
project.terminate_execution()
project.execute()
要点说明:
angr.Project(...)加载目标二进制;auto_load_libs=False表示不自动加载外部共享库,避免干扰分析。@project.hook(地址)在指定地址插入钩子,执行到该处时回调函数被触发。project.execute()让符号执行引擎跑起来,自动探索所有可行路径。
2. 基本分析能力
- CFG 分析:构建控制流图,了解程序函数调用结构。
- 符号约束求解:把输入设为符号变量,让引擎求解出能到达目标地址(如正确分支)的输入值。
- 状态模拟:
state.posix.dumps(0)读取程序标准输出,常用于确认输出是否为预期 flag。
3. 推荐学习路径
- 官方文档 Quick Start:https://docs.angr.io;
- 顶层可用方法:https://docs.angr.io/core-concepts/toplevel;
- 用 angr 解 CTF 的示例集:https://docs.angr.io/examples;
- API 参考:https://docs.angr.io/en/latest/api.html;
- 社区资源 awesome-angr:https://github.com/degrigis/awesome-angr。
六、常见问题 FAQ
-
pip install angr报编译错误 / z3 装不上? angr 依赖较多且较重。建议用 Python 3.10+、虚拟环境,并升级 pip 到最新版;在 Linux 上通常有预编译 wheel,不要从源码编译 z3。 -
符号执行跑得很慢或一直不出结果? 这是符号执行的通病——路径爆炸。应尽量缩小探索范围:用
auto_load_libs=False、用exploration的 explore 参数指定 find/avoid 地址、用 hook 跳过无关函数,必要时设置状态数量上限。 -
angr 能直接跑 Windows PE 吗? angr 做的是架构级分析,支持对 ARM、X86/X86_64 等二进制的反汇编与符号执行;它不依赖目标系统,重点在静态/动态分析,而非模拟整个操作系统。
-
Project里auto_load_libs=False是什么意思? 设为 False 时 angr 只分析你指定的目标二进制,不去自动加载它依赖的系统库。CTF 解题通常这样做,避免 libc 等被一起符号执行导致路径爆炸。 -
angr 与 angr 周边组件什么关系? angr 主仓库是核心;它依赖 pyvex(IR 提升)、unicorn(模拟执行)、capstone(反汇编)等。日常只需
pip install angr,会自动装好。 -
在哪里看完整 API? 官方 API 文档:https://docs.angr.io/en/latest/api.html。配合 IPython 的 Tab 补全和 docstring,是最直接的上手方式。
七、跳转链接
- GitHub 仓库:https://github.com/angr/angr
- 官方文档:https://docs.angr.io
- API 参考:https://docs.angr.io/en/latest/api.html
- CTF 示例集:https://docs.angr.io/examples
- awesome-angr:https://github.com/degrigis/awesome-angr