Skip to content
 编辑

Building and installing AFL++

构建并安装 AFL++

在 x86 架构的 Linux 上

通过 docker 来安装已经预编译好的 AFL++ 是一个非常简便的方法: 你可以使用 Dockerfile ,或者直接从 Docker Hub 拉取(适用于 x86_64 和 arm64 架构):

docker pull aflplusplus/aflplusplus:latest
docker run -ti -v /location/of/your/target:/src aflplusplus/aflplusplus  

当向稳定的分支推送时,这个 docker 镜像文件就会自动生成。 你可以在容器中的 /src 中找到你的目标源代码。

注意:你也可以拉取 aflplusplus/aflplusplus:dev,这是 AFL++ 的最新开发状态。

如果你想自己构建 AFL++,你有很多选择,其中最简单的就是构建并安装所有的东西:

注意:根据你的 Debian/Ubuntu/Kali/… 版本,将 -14 替换为任意的 llvm 可用版本。我们推荐使用 llvm 13 或者更新的版本。

sudo apt-get update
sudo apt-get install -y build-essential python3-dev automake cmake git flex bison libglib2.0-dev libpixman-1-dev python3-setuptools cargo libgtk-3-dev
#尝试安装 llvm 14,如果失败则安装默认的发行版
sudo apt-get install -y lld-14 llvm-14 llvm-14-dev clang-14 || sudo apt-get install -y lld llvm llvm-dev clang
sudo apt-get install -y gcc-$(gcc --version|head -n1|sed 's/\..*//'|sed 's/.* //')-plugin-dev libstdc++-$(gcc --version|head -n1|sed 's/\..*//'|sed 's/.* //')-dev
sudo apt-get install -y ninja-build #用于 QEMU 模式
sudo apt-get install -y cpio libcapstone-dev #用于 Nyx 模式
sudo apt-get install -y wget curl #用于 Frida 模式
sudo apt-get install python3-pip #用于 Unicorn 模式
git clone https://github.com/AFLplusplus/AFLplusplus
cd AFLplusplus
make distrib
sudo make install

推荐在你的发行版中尽可能地安装最新且可用的 gcc,clang 和 llvm-dev!

请注意,make distrib 也会构建 FRIDA 模式,QEMU 模式和 unicorn 模式等。如果你想要的就是普通的 AFL++ ,就执行 make all。如果你想要一些已经预编译的辅助工具,但是对那些只针对二进制的不感兴趣,那么你可以选择这个来替代:

make source-only

这些构建目标包括:

除非你使用的是 macOS 系统,否则你还可以通过传递 PERFORMANCE=1 参数给 make 来构建 AFL++ 二进制文件的静态链接版本:

make PERFORMANCE=1

这些构建选项包括:

例如:make LLVM_CONFIG=llvm-config-14

在 x86_64 和 arm64 架构上的 macOS 系统

macOS 系统由于其平台的特殊性,存在一些需要注意的细节。

macOS 系统支持 AFL++ 插桩使用 SYSV 共享内存,但是默认设置的内存是不够的。在构建之前,可以通过运行提供的脚本来增加它们:

sudo afl-system-config

https://www.spy-hill.com/help/apple/SharedMemory.html 中可以看到关于共享内存设置以及如何使它们永久生效的文档。

接下来,为了构建 AFL++,需要从 brew 安装以下包:

brew install wget git make cmake llvm gdb coreutils

根据你的 macOS 系统和 brew 的版本,brew 可能会安装在不同地方。 你可以通过使用 brew info llvm 来检查它所在的位置,然后为它创建一个变量:

export HOMEBREW_BASE="/opt/homebrew/opt"

或者

export HOMEBREW_BASE="/usr/local/opt"

设置 PATH 以指向 brew clang,clang++。llvm-config,gmake 和 coreutils。 还要使用 brew clang 编译器;不能使用 Xcode clang 编译器。

export PATH="$HOMEBREW_BASE/coreutils/libexec/gnubin:/usr/local/bin:$HOMEBREW_BASE/llvm/bin:$PATH"
export CC=clang
export CXX=clang++

然后按照通用的 Linux 指令进行构建。

如果所有东西都正常工作,你应该已经安装了 afl-clang-fast,你可以通过以下方式检查:

which afl-clang-fast

注意 afl-clang-ltoafl-gcc-fastqemu_mode 在 macOS 上并不能正常工作。

macOS 默认的自带的崩溃报告守护进程会导致模糊测试出现问题。你需要关掉它,你可以用 afl-system-config 来完成。

与其它 Unix 系统相比,macOS 系统上的 fork() 语句有一点不寻常,并且看起来并不遵守 POSIX 标准。这意味着两件事:

用户模拟模式的 QEMU 在 macOS 上不受支持,所以黑盒插桩模式 (-Q) 不会正常工作。然而,FRIDA 模式 (-O) 在 x86 和 arm64 macOS 上都可以正常工作。