small adjustments for custom mutator
MODIFY
custom_mutators/simple_mutator.c
custom_mutators/simple_mutator.c
Written by Khaled Yakdan <yakdan@code-intelligence.de>
- This a simple mutator that assumes that the generates messages starting with one
- of the three strings GET, PUT, or DEL followed by a payload. The mutator randomly
- selects a commend and mutates the payload of the seed provided as input.
+ This a simple mutator that assumes that the generates messages starting with
+ one of the three strings GET, PUT, or DEL followed by a payload. The mutator
+ randomly selects a commend and mutates the payload of the seed provided as
+ input.
*/
#include <stdint.h>
#include <string.h>
static const char *commands[] = {
+
"GET",
"PUT",
"DEL",
+
};
static size_t data_size = 100;
-size_t afl_custom_mutator (uint8_t *data, size_t size, uint8_t* mutated_out, size_t max_size, unsigned int seed) {
+size_t afl_custom_mutator(uint8_t *data, size_t size, uint8_t *mutated_out,
+ size_t max_size, unsigned int seed) {
// Seed the PRNG
srand(seed);
- // Make sure that the packet size does not exceed the maximum size expected by the fuzzer
+ // Make sure that the packet size does not exceed the maximum size expected by
+ // the fuzzer
size_t mutated_size = data_size <= max_size ? data_size : max_size;
// Randomly select a command string to add as a header to the packet
@@ -33,8 +38,12 @@ size_t afl_custom_mutator (uint8_t *data, size_t size, uint8_t* mutated_out, siz
// Mutate the payload of the packet
for (int i = 3; i < mutated_size; i++) {
+
mutated_out[i] = (data[i] + rand() % 10) & 0xff;
+
}
return mutated_size;
+
}
+

MODIFY
include/afl-fuzz.h
include/afl-fuzz.h
@@ -426,14 +426,18 @@ u8* (*post_handler)(u8* buf, u32* len);
* @param data Input data to be mutated
* @param size Size of input data
* @param mutated_out Buffer to store the mutated input
- * @param max_size Maximum size of the mutated output. The mutation must not produce data larger than max_size.
- * @param seed Seed used for the mutation. The mutation should produce the same output given the same seed.
+ * @param max_size Maximum size of the mutated output. The mutation must not
+ * produce data larger than max_size.
+ * @param seed Seed used for the mutation. The mutation should produce the same
+ * output given the same seed.
* @return Size of the mutated output.
*/
-size_t (*custom_mutator)(u8 *data, size_t size, u8* mutated_out, size_t max_size, unsigned int seed);
+size_t (*custom_mutator)(u8* data, size_t size, u8* mutated_out,
+ size_t max_size, unsigned int seed);
/**
- * A post-processing function to use right before AFL writes the test case to disk in order to execute the target.
- * If this functionality is not needed, Simply don't define this function.
+ * A post-processing function to use right before AFL writes the test case to
+ * disk in order to execute the target. If this functionality is not needed,
+ * Simply don't define this function.
* @param data Buffer containing the test case to be executed.
* @param size Size of the test case.
* @param new_data Buffer to store the test case after processing

small adjustments for custom mutator