AFLplusplus/custom_mutators
julihoh 2dd5a02061
Ergonomic Improvements for Rust Custom Mutators (#772)
* allow returning of str instead of CStr in rust custom mutator

* use OsStr instead of CStr for file paths

* fix cfg and compiler errors

* custom mutator default descriptions

* fix usage of afl_internal feature flag

* fix example mutator cfg

* fix lain mutator

* Revert "fix lain mutator"

This reverts commit adf700180888d86e8331939cea62d0b39fc699a7.

* actually fix lain mutator

* resolve question around utf-8 null bytes

* change from OsStr to Path to be even more ergonomic

* add rust custom mutator ci

* fix github action

* again

* separate compilation check
2021-03-05 19:40:59 +01:00
..
2021-02-25 09:15:54 +01:00
2020-11-12 21:51:44 +01:00
2020-12-08 09:30:17 +01:00

Custom Mutators

Custom mutators enhance and alter the mutation strategies of afl++. For further information and documentation on how to write your own, read the docs.

The afl++ Grammar Mutator

If you use git to clone afl++, then the following will incorporate our excellent grammar custom mutator:

git submodule update --init

Read the README in the Grammar-Mutator repository on how to use it.

Production-Ready Custom Mutators

This directory holds ready to use custom mutators. Just type "make" in the individual subdirectories.

Use with e.g.

AFL_CUSTOM_MUTATOR_LIBRARY=custom_mutators/radamsa/radamsa-mutator.so afl-fuzz ....

and add AFL_CUSTOM_MUTATOR_ONLY=1 if you only want to use the custom mutator.

Multiple custom mutators can be used by separating their paths with : in the environment variable.

3rd Party Custom Mutators

Superion Mutators

Adrian Tiron ported the Superion grammar fuzzer to afl++, it is WIP and requires cmake (among other things): https://github.com/adrian-rt/superion-mutator

libprotobuf Mutators

There are two WIP protobuf projects, that require work to be working though:

transforms protobuf raw: https://github.com/bruce30262/libprotobuf-mutator_fuzzing_learning/tree/master/4_libprotobuf_aflpp_custom_mutator

has a transform function you need to fill for your protobuf format, however needs to be ported to the updated afl++ custom mutator API (not much work): https://github.com/thebabush/afl-libprotobuf-mutator