
Advanced Fuzzing Library – Slot your own fuzzers together and extend their features using Rust.
LibAFL is written and maintained by Andrea Fioraldi andreafioraldi@gmail.com and Dominik Maier mail@dmnk.co.
LibAFL is a collection of reusable pieces of fuzzers, written in Rust. It is fast, multi-platform, no_std compatible, and scales over cores and machines.
It offers a main crate that provide building blocks for custom fuzzers, libafl, a library containing common code that can be used for targets instrumentation, libafl_targets, and a library providing facilities to wrap compilers, libafl_cc.
LibAFL offers integrations with popular instrumentation frameworks. At the moment, the supported backends are:
- SanitizerCoverage, in libafl_targets
- Frida, in libafl_frida, by s1341 github@shmarya.net
- QEMU user-mode, in libafl_qemu
Features
Installation Process
- Install the Rust development language. We highly recommend not to use e.g. your Linux distribution package as this is likely outdated. So rather install Rust directly, instructions can be found here.
- Clone the LibAFL repository with
- Build the library using
cargo build --release
- Build the API documentation with
cargo doc
- Browse the LibAFL book (WIP!) with (requires mdbook)
git clone https://github.com/AFLplusplus/LibAFL
cd docs && mdbook serve
It collects all example fuzzers in ./fuzzers. Be sure to read their documentation (and source), this is the natural way to get started!
The best-tested fuzzer is ./fuzzers/libfuzzer_libpng, a multicore libfuzzer-like fuzzer using LibAFL for a libpng harness.