From 1b3f9713309d27c49b153f9b3af12d208076e93c Mon Sep 17 00:00:00 2001 From: Khaled Yakdan Date: Wed, 4 Sep 2019 22:57:52 +0200 Subject: Added documentation and a simple example for the custom mutator functionality --- docs/custom_mutator.txt | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 docs/custom_mutator.txt (limited to 'docs') diff --git a/docs/custom_mutator.txt b/docs/custom_mutator.txt new file mode 100644 index 00000000..3b1b93b9 --- /dev/null +++ b/docs/custom_mutator.txt @@ -0,0 +1,34 @@ +================================================== +Adding custom mutators to AFL using +================================================== +This file describes how you can implement custom mutations to be used in AFL. + +Implemented by Khaled Yakdan from Code Intelligence + + +1) Description +-------------- + +Custom mutator libraries can be passed to afl-fuzz to perform custom mutations +on test cases beyond those available in AFL - for example, to enable structure-aware +fuzzing by using libraries that perform mutations according to a given grammar. + +The custom mutator library is passed to afl-fuzz via the AFL_CUSTOM_MUTATOR_LIBRARY +environment variable. The library must export the afl_custom_mutator() function and +must be compiled as a shared object. For example: + $CC -shared -Wall -O3 .c -o .so + +AFL will call the afl_custom_mutator() function every time it needs to mutate +a test case. For some cases, the format of the mutated data returned from +the custom mutator is not suitable to directly execute the target with this input. +For example, when using libprotobuf-mutator, the data returned is in a protobuf +format which corresponds to a given grammar. In order to execute the target, +the protobuf data must be converted to the plain-text format expected by the target. +In such scenarios, the user can define the afl_pre_save_handler() function. This function +is then transforms the data into the format expected by the API before executing the target. +afl_pre_save_handler is optional and does not have to be implemented if its functionality +is not needed. + +2) Example +---------- +A simple example is provided in ../custom_mutators/ \ No newline at end of file -- cgit 1.4.1