Loading...

文章背景图

angr:开源二进制符号执行分析平台安装与使用指南

2026-10-27
0
- 字
- 分钟
|

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 仓库封面

二、官方图片

上图为 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. 推荐学习路径

六、常见问题 FAQ

  1. pip install angr 报编译错误 / z3 装不上? angr 依赖较多且较重。建议用 Python 3.10+、虚拟环境,并升级 pip 到最新版;在 Linux 上通常有预编译 wheel,不要从源码编译 z3。

  2. 符号执行跑得很慢或一直不出结果? 这是符号执行的通病——路径爆炸。应尽量缩小探索范围:用 auto_load_libs=False、用 exploration 的 explore 参数指定 find/avoid 地址、用 hook 跳过无关函数,必要时设置状态数量上限。

  3. angr 能直接跑 Windows PE 吗? angr 做的是架构级分析,支持对 ARM、X86/X86_64 等二进制的反汇编与符号执行;它不依赖目标系统,重点在静态/动态分析,而非模拟整个操作系统。

  4. Project 里 auto_load_libs=False 是什么意思? 设为 False 时 angr 只分析你指定的目标二进制,不去自动加载它依赖的系统库。CTF 解题通常这样做,避免 libc 等被一起符号执行导致路径爆炸。

  5. angr 与 angr 周边组件什么关系? angr 主仓库是核心;它依赖 pyvex(IR 提升)、unicorn(模拟执行)、capstone(反汇编)等。日常只需 pip install angr,会自动装好。

  6. 在哪里看完整 API? 官方 API 文档:https://docs.angr.io/en/latest/api.html。配合 IPython 的 Tab 补全和 docstring,是最直接的上手方式。

七、跳转链接

评论交流

文章目录