AFLplusplus/AFLplusplus

GitHub: AFLplusplus/AFLplusplus

谷歌 AFL 的增强版覆盖引导模糊测试工具,集成了最新研究成果以高效挖掘软件漏洞。

Stars: 6334 | Forks: 1263

# American Fuzzy Lop plus plus (AFL++) AFL++ logo 发布版本:[4.35c](https://github.com/AFLplusplus/AFLplusplus/releases) GitHub 版本:4.36a 仓库: [https://github.com/AFLplusplus/AFLplusplus](https://github.com/AFLplusplus/AFLplusplus) AFL++ 由以下人员维护: * Marc "van Hauser" Heuse * Dominik Maier * Andrea Fioraldi * Heiko "hexcoder-" Eissfeldt * frida_mode 由 @Worksbutnottested 维护 最初由 Michal "lcamtuf" Zalewski 开发。 AFL++ 是 Google AFL 的一个超级分支 —— 更快的速度、更多且更好的变异、更多且更好的插桩、自定义模块支持等。 根据 Apache-2.0 License 的条款,您可以在注明出处的情况下自由复制、修改和分发 AFL++。有关详细信息,请参阅 [LICENSE](LICENSE)。 ## 入门指南 以下是一些帮助您入门的信息: * 要获取 AFL++ 文档的概述和非常有用的图形指南,请访问 [docs/README.md](docs/README.md)。 * 要开始学习教程,请转到 [docs/tutorials.md](docs/tutorials.md)。 * 关于发布版本,请查看 [Releases 标签页](https://github.com/AFLplusplus/AFLplusplus/releases) 和 [分支](#branches)。不过,最好使用的分支是 `stable` 或 `dev` —— 取决于您的风险承受能力。也可以查看 [AFL++ 的重要更改列表](docs/important_changes.md) 和 [功能列表](docs/features.md)。 * 如果您想将 AFL++ 用于学术工作,请查看网站上的 [论文页面](https://aflplus.plus/papers/)。 * 要引用我们的工作,请查看 [引用](#cite) 部分。 * 进行比较时,请使用 fuzzbench `aflplusplus` 设置,或使用带有 `AFL_LLVM_CMPLOG=1` 的 `afl-clang-fast`。您可以在 Google 的 [fuzzbench](https://github.com/google/fuzzbench/tree/master/fuzzers/aflplusplus) 上找到 `aflplusplus` 的默认配置。 ## 构建和安装 AFL++ 要轻松获取已编译好所有内容的 AFL++,请直接从 Docker Hub 拉取镜像(同时适用于 x86_64 和 arm64): ``` docker pull aflplusplus/aflplusplus docker run -ti -v /location/of/your/target:/src aflplusplus/aflplusplus ``` 当推送到 stable 分支时,此镜像会自动发布(参见 [分支](#branches))。如果您使用上述命令,您将在容器的 `/src` 目录中找到目标源代码。 注意:您也可以拉取 `aflplusplus/aflplusplus:dev`,这是 AFL++ 最新的开发状态。 要自行构建 AFL++ —— *我们推荐这种方式* —— 请继续阅读 [docs/INSTALL.md](docs/INSTALL.md)。 ## 快速入门:使用 AFL++ 进行 Fuzzing *注意:在开始之前,请阅读关于 [fuzzing 的常识性风险](docs/fuzzing_in_depth.md#0-common-sense-risks)。* 这是针对有源代码的目标进行 fuzzing 的快速入门。要详细了解该过程,请参阅 [docs/fuzzing_in_depth.md](docs/fuzzing_in_depth.md)。 要了解如何 fuzzing 其他类型的目标,请参阅: * 仅二进制目标:[docs/fuzzing_binary-only_targets.md](docs/fuzzing_binary-only_targets.md) * 网络服务:[docs/best_practices.md#fuzzing-a-network-service](docs/best_practices.md#fuzzing-a-network-service) * GUI 程序:[docs/best_practices.md#fuzzing-a-gui-program](docs/best_practices.md#fuzzing-a-gui-program) 分步快速入门: 1. 使用 `afl-cc` 编译要进行 fuzzing 的程序或库。一种常见的方法是: CC=/path/to/afl-cc CXX=/path/to/afl-c++ ./configure --disable-shared make clean all 2. 获取一个对该程序有意义的小而有效的输入文件。当 fuzzing 复杂的语法(SQL, HTTP 等)时,也要按照 [dictionaries/README.md](dictionaries/README.md) 中的描述创建一个字典。 3. 如果程序从 stdin 读取,按如下方式运行 `afl-fuzz`: ./afl-fuzz -i seeds_dir -o output_dir -- \ /path/to/tested/program [...program's cmdline...] 要添加字典,请将 `-x /path/to/dictionary.txt` 添加到 afl-fuzz 命令中。 如果程序从文件获取输入,您可以在程序的命令行中放置 `@@`;AFL++ 会为您在那里放置一个自动生成的文件名。 4. 通过及时查阅 [docs/afl-fuzz_approach.md#understanding-the-status-screen](docs/afl-fuzz_approach.md#understanding-the-status-screen),调查 fuzzer UI 中以红色显示的任何内容。 5. 您将在 `-o output_dir` 目录的 `crashes/` 和 `hangs/` 子目录中找到发现的崩溃和挂起。您可以通过将崩溃输入给目标来重放它们,例如,如果您的目标使用 stdin: cat output_dir/crashes/id:000000,* | /path/to/tested/program [...program's cmdline...] 您可以生成 core 文件或直接使用 gdb 来跟踪崩溃。 6. 我们再怎么强调都不为过 —— 如果您想有效地进行 fuzzing,请阅读 [docs/fuzzing_in_depth.md](docs/fuzzing_in_depth.md) 文档! ## 联系方式 有问题?疑虑?Bug 报告? * 可以通过以下方式联系贡献者(例如,通过创建 issue): [https://github.com/AFLplusplus/AFLplusplus](https://github.com/AFLplusplus/AFLplusplus)。 * 看看我们的 [FAQ](docs/FAQ.md)。如果您发现缺少有趣或重要的问题,请通过 [https://github.com/AFLplusplus/AFLplusplus/discussions](https://github.com/AFLplusplus/AFLplusplus/discussions) 提交。 * 最佳方式:加入 [Awesome Fuzzing](https://discord.gg/gCraWct) Discord 服务器。 * 有一个用于 AFL/AFL++ 项目的邮件列表(不常使用)([浏览存档](https://groups.google.com/group/afl-users))。要与其他用户交流心得或收到有关主要新功能的通知,请发送电子邮件至 ,但请注意这不是由我们管理的。 ## 分支 存在以下分支: * [release](https://github.com/AFLplusplus/AFLplusplus/tree/release):最新的发布版本 * [stable/trunk](https://github.com/AFLplusplus/AFLplusplus/):AFL++ 的稳定状态 —— 当我们对稳定性感到满意时,会定期从 dev 分支同步 * [dev](https://github.com/AFLplusplus/AFLplusplus/tree/dev):AFL++ 的开发状态 —— 最前沿,您可能会遇到无法编译或有 bug 的检出。**我们只接受针对 'dev' 分支的 PR(pull requests)!** * (任何其他):用于开发特定功能或测试新功能或更改的实验分支。 ## 招募帮助 我们有几个[想法](docs/ideas.md)希望能在 AFL++ 中实现,以使其变得更好。但是,我们要做的事情太多了,没有时间处理所有宏大的想法。 这可以是您支持和贡献 AFL++ 的方式 —— 扩展它来做一些很酷的事情。 对于所有想要贡献(并发送 pull requests)的人,请在提交之前阅读我们的[贡献指南](CONTRIBUTING.md)。 ## 引用 如果您在科学工作中使用 AFL++,请考虑引用我们在 WOOT'20 上发表的[论文](https://www.usenix.org/conference/woot20/presentation/fioraldi): ``` Andrea Fioraldi, Dominik Maier, Heiko Eißfeldt, and Marc Heuse. “AFL++: Combining incremental steps of fuzzing research”. In 14th USENIX Workshop on Offensive Technologies (WOOT 20). USENIX Association, Aug. 2020. ```
BibTeX ``` @inproceedings {AFLplusplus-Woot20, author = {Andrea Fioraldi and Dominik Maier and Heiko Ei{\ss}feldt and Marc Heuse}, title = {{AFL++}: Combining Incremental Steps of Fuzzing Research}, booktitle = {14th {USENIX} Workshop on Offensive Technologies ({WOOT} 20)}, year = {2020}, publisher = {{USENIX} Association}, month = aug, } ```
[![zread](https://img.shields.io/badge/Ask_Zread-_.svg?style=flat&color=00b0aa&labelColor=000000&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTQuOTYxNTYgMS42MDAxSDIuMjQxNTZDMS44ODgxIDEuNjAwMSAxLjYwMTU2IDEuODg2NjQgMS42MDE1NiAyLjI0MDFWNC45NjAxQzEuNjAxNTYgNS4zMTM1NiAxLjg4ODEgNS42MDAxIDIuMjQxNTYgNS42MDAxSDQuOTYxNTZDNS4zMTUwMiA1LjYwMDEgNS42MDE1NiA1LjMxMzU2IDUuNjAxNTYgNC45NjAxVjIuMjQwMUM1LjYwMTU2IDEuODg2NjQgNS4zMTUwMiAxLjYwMDEgNC45NjE1NiAxLjYwMDFaIiBmaWxsPSIjZmZmIi8%2BCjxwYXRoIGQ9Ik00Ljk2MTU2IDEwLjM5OTlIMi4yNDE1NkMxLjg4ODEgMTAuMzk5OSAxLjYwMTU2IDEwLjY4NjQgMS42MDE1NiAxMS4wMzk5VjEzLjc1OTlDMS42MDE1NiAxNC4xMTM0IDEuODg4MSAxNC4zOTk5IDIuMjQxNTYgMTQuMzk5OUg0Ljk2MTU2QzUuMzE1MDIgMTQuMzk5OSA1LjYwMTU2IDE0LjExMzQgNS42MDE1NiAxMy43NTk5VjExLjAzOTlDNS42MDE1NiAxMC42ODY0IDUuMzE1MDIgMTAuMzk5OSA0Ljk2MTU2IDEwLjM5OTlaIiBmaWxsPSIjZmZmIi8%2BCjxwYXRoIGQ9Ik0xMy43NTg0IDEuNjAwMUgxMS4wMzg0QzEwLjY4NSAxLjYwMDEgMTAuMzk4NCAxLjg4NjY0IDEwLjM5ODQgMi4yNDAxVjQuOTYwMUMxMC4zOTg0IDUuMzEzNTYgMTAuNjg1IDUuNjAwMSAxMS4wMzg0IDUuNjAwMUgxMy43NTg0QzE0LjExMTkgNS42MDAxIDE0LjM5ODQgNS4zMTM1NiAxNC4zOTg0IDQuOTYwMVYyLjI0MDFDMTQuMzk4NCAxLjg4NjY0IDE0LjExMTkgMS42MDAxIDEzLjc1ODQgMS42MDAxWiIgZmlsbD0iI2ZmZiIvPgo8cGF0aCBkPSJNNCAxMkwxMiA0TDQgMTJaIiBmaWxsPSIjZmZmIi8%2BCjxwYXRoIGQ9Ik00IDEyTDEyIDQiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8L3N2Zz4K&logoColor=ffffff)](https://zread.ai/AFLplusplus/AFLplusplus) [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/AFLplusplus/AFLplusplus)
标签:AFL++, American Fuzzy Lop, ASN解析, DNS 反向解析, Frida模式, Fuzzing, LLVM, QEMU模式, TLS抓取, Unicorn模式, 代码生成, 变异测试, 客户端加密, 客户端加密, 情报收集, 渗透测试工具, 漏洞研究, 灰盒测试, 编译器插桩, 网络安全, 覆盖率引导, 请求拦截, 身份验证强制, 软件安全, 逆向工具, 隐私保护