返回更新列表
新发布Aug 10, 2026

LibAFL v0.16.0

高级模糊测试库 - 用Rust将你的模糊测试器组装在一起!跨核心和机器扩展。支持Windows、Android、MacOS、Linux、no_std等平台。

分享

LibAFL,模糊测试库

LibAFL 标志

高级模糊测试库 - 使用 Rust 将你自己的模糊测试器组合起来并扩展其功能。

LibAFL 是一个用 Rust 编写的可复用模糊测试器组件集合,它为你提供了现成模糊测试器的许多优势,同时又完全可定制。目前一些突出的功能包括:

  • fast:我们在编译时尽一切可能,保持运行时开销最小。用户在手机上的 frida 模式下达到每秒 12 万次执行(使用所有核心)。
  • scalable低级消息传递(简称 LLMP)使 LibAFL 能够在核心之间几乎线性扩展,并通过 TCP 扩展到多台机器。
  • adaptable:你可以替换 LibAFL 的每个部分。例如,BytesInput 只是潜在输入形式之一:欢迎添加基于 AST 的输入用于结构化模糊测试,等等。
  • multi platformLibAFL 运行在 WindowsmacOSiOSLinuxAndroid 等平台上。LibAFL 可以在 no_std 模式下构建,以便将 LibAFL 注入到嵌入式设备和虚拟机监控程序等不常见的目标中。
  • bring your own target:我们支持纯二进制模式,如 Frida-Mode,以及多种基于源码的插桩编译通道。当然,添加自定义插桩后端也很简单。

核心概念

LibAFL 快速、多平台、兼容 no_std,并且能在核心和机器之间扩展。它提供了一个主要 crate,用于构建自定义模糊测试器的构建块 libafl,一个包含可用于目标插桩的公共代码的库 libafl_targets,以及一个提供封装编译器功能的库 libafl_cc。它集成了流行的插桩框架。目前支持的後端有:

构建和安装

安装依赖项

  • Rust 开发语言
    • 我们强烈建议不要使用例如 Linux 发行版包,因为可能过时。因此,直接安装 Rust,说明可以在 这里 找到。

    • 定义最低支持的 Rust 版本。您始终可以在 LibAFL 的 Cargo.toml 中检查当前要求的版本:

      如果您的已安装 Rust 版本早于 Cargo.toml 中列出的版本,请更新到最新的稳定工具链:

      rustup update stable
      
  • LLVM 工具
    • 需要 LLVM 工具(包括 clang、clang++)(版本高于 LLVM 15.0.0,不超过 LLVM 18.1.3)。如果您使用 Debian/Ubuntu,我们强烈建议您从 这里 安装包
  • Just:
    • 我们使用 just 来构建 fuzzers/ 目录中的模糊测试器。您可以在 Just 程序员手册 中找到在您的环境中安装它的说明。

使用以下命令克隆 LibAFL 仓库

git clone https://github.com/AFLplusplus/LibAFL

使用以下命令构建库

cargo build --release

使用以下命令构建 API 文档

cargo doc

使用以下命令浏览 LibAFL 手册(WIP!)(需要 mdbook

cd docs && mdbook serve

入门指南

我们在 ./fuzzers 中收集了所有示例模糊测试器。 务必阅读它们的文档(和源代码),这是自然的入门方式!

just run

只要模糊测试器目录包含 Justfile 文件,您就可以使用以下命令运行每个示例模糊测试器。经过最佳测试的模糊测试器是 ./fuzzers/inprocess/libfuzzer_libpng,它是一个针对 libpng 桩的多核类似 libfuzzer 的模糊测试器,使用 LibAFL

参考资料

贡献者

LibAFL 由以下人员编写和维护

贡献

请查看 CONTRIBUTING.md 了解贡献指南。

调试

您的模糊测试器不如预期工作?请尝试阅读 DEBUGGING.md 了解如何调试您的问题。

引用

如果您在学术工作中使用 LibAFL,请引用以下论文:

@inproceedings{libafl,
 author       = {Andrea Fioraldi and Dominik Maier and Dongjia Zhang and Davide Balzarotti},
 title        = {{LibAFL: A Framework to Build Modular and Reusable Fuzzers}},
 booktitle    = {Proceedings of the 29th ACM conference on Computer and communications security (CCS)},
 series       = {CCS '22},
 year         = {2022},
 month        = {November},
 location     = {Los Angeles, U.S.A.},
 publisher    = {ACM},
}

许可证

根据您的选择,在 Apache 许可证 2.0 版MIT 许可证 下许可。
除非您明确声明,否则根据 Apache-2.0 许可证的定义,您有意提交以包含在此 crate 中的任何贡献,应按上述方式双重许可,不附加任何额外条款或条件。

分类