Skip to content

Latest commit

 

History

History

Network

Запуск инструмента Crusher с пользовательским модулем отправки данных

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: