第1章:angr环境搭建——在Ubuntu/Docker中安装angr,验证安装,常见问题排查

说实话,很多初学者一上来就急着写脚本、跑符号执行,结果卡在环境搭建这一步。我见过太多人花了两三天装环境,最后心态崩了。其实没必要,angr的安装没那么玄乎,今天我就带你走一遍。

1.1 为什么选择Ubuntu + Docker?

angr官方推荐在Linux下运行。我个人习惯用Ubuntu 20.04 LTS或22.04 LTS。Windows用户也别慌,装个WSL2或者直接用Docker就行。

你想想看,Docker的好处是什么?隔离、干净、出了问题删了重来。我在项目中经常要同时跑多个angr版本做对比,Docker容器一开,互不干扰,省心得很。

核心建议:如果你是新手,优先用Docker。等熟悉了再考虑原生安装。

1.2 方法一:原生安装(Ubuntu)

先更新一下系统包,别偷懒:

sudo apt update
sudo apt upgrade -y

然后装Python和pip。angr要求Python 3.8以上,我建议用3.10:

sudo apt install python3 python3-pip python3-venv -y

接下来是关键一步——创建虚拟环境。为什么?因为angr的依赖很多,直接装到系统里容易冲突。我曾经有一次把系统Python搞崩了,重装了系统才恢复……嗯,从那以后我再也不敢偷懒了。

python3 -m venv angr_env
source angr_env/bin/activate

最后安装angr:

pip install angr

这个过程大概需要5-10分钟,取决于你的网速。如果卡住了,别急,往下看常见问题。

1.3 方法二:Docker安装(推荐新手)

Docker安装就简单多了。先确保你装了Docker:

sudo apt install docker.io -y
sudo systemctl start docker
sudo systemctl enable docker

然后拉取angr官方镜像:

docker pull angr/angr

启动容器:

docker run -it angr/angr

进去之后你就直接能用angr了。是不是很爽?

小技巧:如果你想把宿主机上的文件传到容器里分析,加个 -v 参数:

docker run -it -v /path/to/your/files:/home/angr angr/angr

1.4 验证安装是否成功

装完了怎么知道好不好使?写个最简单的脚本试试:

import angr

# 创建一个空项目
proj = angr.Project("/bin/ls", auto_load_libs=False)
print("angr版本:", angr.__version__)
print("架构:", proj.arch)
print("入口点:", hex(proj.entry))

如果能正常输出,说明安装成功了。我一般还会跑一下angr自带的测试用例:

python -m pytest tests/test_symbolic.py -x -v

跑通几个核心测试,基本就稳了。

1.5 常见问题排查

这里我整理了几个我遇到过的坑,你大概率也会碰到:

问题 原因 解决方案
pip安装超时 网络问题,angr依赖包多 换国内镜像源:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple angr
缺少libpython3.10.so Python开发包没装 sudo apt install python3.10-dev
angr版本冲突 多个angr版本混装 删掉虚拟环境,重新创建
Docker权限不足 当前用户不在docker组 sudo usermod -aG docker $USER,然后退出重登

注意:如果你在Windows上用WSL2,记得把Docker Desktop的WSL集成打开。不然docker命令会报错。

1.6 本章知识体系

下面这张图帮你理清本章的核心逻辑:

angr环境搭建知识体系 原生安装 Ubuntu 20.04/22.04 Python 3.8+ 虚拟环境 pip install angr Docker安装 安装Docker引擎 docker pull angr/angr docker run -it angr/angr 验证与排查 导入angr测试 运行测试用例 常见问题排查 推荐新手使用Docker,熟悉后尝试原生安装

1.7 写在最后

环境搭建是第一步,也是很多人放弃的第一步。别急,慢慢来。装好了环境,下一章我们就可以真正开始玩符号执行了。

如果你在安装过程中遇到任何问题,欢迎在公众号留言。我会定期整理大家的问题,更新到常见问题列表里。


公众号:蓝海资料掘金营,微信deep3321