bin_x86-64/fuzz_manager -i in -o out --python-network <путь до транспортного модуля> --ip 127.0.0.1 --port 8080 --delay 1000 -- /bin/example_network
Пользовательский модуль передачи данных представляет из себя python-модуль.
В нём необходимо создать функцию initialization
, которая будет возвращать в ядро фаззера экземпляр класса модуля передачи данных.
Пример функции initialization
:
def initialization():
return NewNetwork
- IP адрес (строка python);
- порт (целочисленный тип python);
- задержка в миллисекундах (целочисленный тип python).
Если какой-либо из параметров не был задан или был задан с ошибкой, модуль передачи данных сообщит об ошибке. Синтаксис метода инициализации транспортного модуля.
def __init__(self, ip, port, delay):
Класс модуля передачи данных инициализируется на основе аргументов получаемых от ядра фаззера.
self.delay=delay | время, выделяемое на отправку пакета (в миллисекундах) |
self.ip=ip | ip адрес, на который будет осуществляться отправка пакетов |
self.port=port | порт, на который будет осуществляться отправка пакетов |
Обязательным методом класса транспортного модуля является метод send_data
.
def send_data(self, data=None, delay=None):
Метод send_data
принимает на вход буфер с мутированными данными от ядра фаззера. Обязательным является задание для
него значения по умолчанию None
.
Для инициализации транпортного модуля осуществляется проверка его целостности.
Фаззер при инициализации модуля передачи данных вызывает метод send_data
класса
транспортного модуля без параметра и ожидает от него возвращения числа 42
. Данную проверку пользователь должен
встроить в метод send_data
пользовательского модуля передачи данных сам, как показано в примере:
def send_data(self, data=None, delay=None):
if data is None:
return 42
В данной директории размещены примеры пользовательских плагинов передачи данных, которые можно использовать в Crusher: