AFLplusplus / LibAFL

Advanced Fuzzing Library - Slot your Fuzzer together in Rust! Scales across cores and machines. For Windows, Android, MacOS, Linux, no_std, ...
Other
2.04k stars 321 forks source link
afl afl-fuzz aflplusplus binary-only coverage-guided frida fuzzing fuzzing-framework libafl rust

LibAFL, the fuzzer library.

LibAFL logo

Advanced Fuzzing Library - Slot your own fuzzers together and extend their features using Rust.

LibAFL is a collection of reusable pieces of fuzzers, written in Rust, it gives you many of the benefits of an off-the-shelf fuzzer, while being completely customizable. Some highlight features currently include:

Core concepts

LibAFL 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. It offers integrations with popular instrumentation frameworks. At the moment, the supported backends are:

Building and installing

Install the Dependencies

Clone the LibAFL repository with

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

Build the library using

cargo build --release

Build the API documentation with

cargo doc

Browse the LibAFL book (WIP!) with (requires mdbook)

cd docs && mdbook serve

Getting started

We collect all example fuzzers in ./fuzzers. Be sure to read their documentation (and source), this is the natural way to get started!

cargo make run

You can run each example fuzzer with this following command, as long as the fuzzer directory has Makefile.toml file. The best-tested fuzzer is ./fuzzers/inprocess/libfuzzer_libpng, a multicore libfuzzer-like fuzzer using LibAFL for a libpng harness.

Resources

Contributors

LibAFL is written and maintained by

Please check out CONTRIBUTING.md for the contributing guideline.

Cite

If you use LibAFL for your academic work, please cite the following paper:

@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},
}

License

Licensed under either of Apache License, Version 2.0 or MIT license at your option.


Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.