Skip to content

Commit 14a4fff

Browse files
author
Mishechkin Max
committed
Update info about processing
1 parent 75cbd80 commit 14a4fff

File tree

5 files changed

+63
-39
lines changed

5 files changed

+63
-39
lines changed

Plugins/PostProcessing/config.json

Lines changed: 0 additions & 3 deletions
This file was deleted.

Plugins/PostProcessing/post-proc.py

Lines changed: 0 additions & 18 deletions
This file was deleted.
Lines changed: 35 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,28 +6,43 @@
66
Для использования пользовательского плагина пост-обработки данных необходимо выполнить следующие действия:
77
1. написать плагин;
88
2. добавить плагин в конфиг-файл для запуска `Crusher` (опционально);
9-
3. запустить `Crusher`: с конфиг-файлом или с опцией `--post-processing`.
9+
3. запустить `Crusher`: с конфиг-файлом или с опцией `--processing`.
1010

11-
### 1. Написание плагина
11+
### 1. Написание плагина processing модуля
1212
Плагин представляет из себя `.py` файл со следующими необходимыми компонентами:
1313
* функция инициализации `initialization()`;
14-
* класс пост-обработки.
14+
* класс обработки данных в дальнейщем processing.
1515

1616
#### Функция `initialization()`
17-
Функция `initialization()` возвращает класс пост-обработки, реализованный в плагине.
17+
Функция `initialization()` возвращает класс , реализованный в плагине.
1818

1919
Пример функции `initialization()`:
2020

2121
```python
2222
def initialization():
23-
return PostProcess
23+
return Processing
2424
```
2525

26-
#### Класс пост-обработки
26+
#### Класс модуля processing
2727
Имя класса должно соответствовать тому, что возвращает функция `initialization`.
2828

29-
##### Метод пост-обработки
30-
В классе необходимо релизовать метод `post_processing`, который принимает в качестве аргумента массив байт (`bytearray`) - буфер, который передаёт ядро `Crusher` для мутаций, и возвращает также массив байт.
29+
##### Метод пред-обработки модуля processing
30+
31+
В классе можно релизовать метод `pre_processing`, который принимает в качестве аргумента массив байт (`bytearray`) -
32+
буфер с начальными входными данными, который передаёт ядро `Crusher` для мутаций, и возвращает также массив байт.
33+
34+
Данный метод должен обязательно содержать следующий код (для правильной его инициализации в `Crusher`):
35+
```python
36+
def pre_processing(self, data=None):
37+
if data is None:
38+
return 42
39+
```
40+
41+
Предполагается, что в остальной части тела метода проводятся манипуляции над `data` и возвращается новый массив байт.
42+
Однако, использование `data` не является обязательным.
43+
44+
##### Метод пост-обработки модуля processing
45+
В классе можно релизовать метод `post_processing`, который принимает в качестве аргумента массив байт (`bytearray`) - буфер, который передаёт ядро `Crusher` для мутаций, и возвращает также массив байт.
3146

3247
Данный метод должен обязательно содержать следующий код (для правильной его инициализации в `Crusher`):
3348
```python
@@ -39,14 +54,16 @@ def post_processing(self, data=None):
3954
Предполагается, что в остальной части тела метода проводятся манипуляции над `data` и возвращается новый массив байт.
4055
Однако, использование `data` не является обязательным.
4156

42-
### 2. Добавление пост-обработчика в конфиг-файл для `Crusher`
57+
### 2. Добавление модуля processing в конфиг-файл для `Crusher`
4358
Конфиг-файл для `Crusher` (наряду с аргументами командной строки) позволяет более тонко настраивать его работу. Используется формат `JSON`.
4459

45-
Для использования нового скрипта пост-обработки при фаззинге нужно добавить полный путь к нему в поле `"post-processing"` в конфиг-файле.
60+
Для использования нового модуля processing при фаззинге нужно добавить полный путь к нему в поле `"processing"` в конфиг-файле.
4661

4762
Важно помнить, что в директориях `queue` внутри директории с результатами работы фаззера будут храниться данные до пост-обработки.
48-
Т.е. для воспроизведения, например, запусков с некоторыми тесткейсами из `queue`, над данными из соответствующих директорий нужно произвести преобразования из метода `post_processing` и только после этого подать на вход приложению.
49-
Дело в том, что после пост-обработки размер файла может заметно вырасти, например, после добавления множества заголовков. Чтобы избежать нерационального использования дискового пространства, файлы в `queue` записываются без пост-обработки.
63+
Т.е. для воспроизведения, например, запусков с некоторыми тесткейсами из `queue`, над данными из соответствующих директорий
64+
нужно произвести преобразования из метода `post_processing` и только после этого подать на вход приложению.
65+
Дело в том, что после пост-обработки размер файла может заметно вырасти, например, после добавления множества заголовков.
66+
Чтобы избежать нерационального использования дискового пространства, файлы в `queue` записываются без пост-обработки.
5067

5168
При этом в директориях `crashes` и `hangs` записаны файлы уже после пост-обработки, на которых можно воспроизвести креши/зависания приложения без дополнительных преобразований.
5269
Крешей и зависаний обычно на порядки меньше (если они вообще есть), чем путей, поэтому они занимают меньше места на диске.
@@ -55,23 +72,23 @@ def post_processing(self, data=None):
5572
Пример конфиг-файла:
5673
```json
5774
{
58-
"post-processing": "/path/to/post-proc.py"
75+
"processing": "/path/to/processing.py"
5976
}
6077
```
6178

6279
### 3. Запуск `Crusher`
63-
Пример запуска `Crusher` с пользовательским скриптом пост-обработки, где [config.json](config.json) - конфиг-файл:
80+
Пример запуска `Crusher` с пользовательским скриптом модуля processing, где [config.json](config.json) - конфиг-файл:
6481
```shell script
6582
/path/to/crusher/bin_x86-64/fuzz_manager --start 4 -i in -o out --config-file config.json -- ./test @@
6683
```
6784

68-
Также можно запустить `Crusher` со скриптом пост-обработки и без конфиг-файла.
69-
Для этого в командной строке нужно использовать опцию `--post-processing`, передавая ей в качестве аргумента путь до скрипта пост-обработки:
85+
Аналогично можно запустить `Crusher` со скриптом модуля processing и без конфиг-файла.
86+
Для этого в командной строке нужно использовать опцию `processing`, передавая ей в качестве аргумента путь до скрипта пост-обработки:
7087

7188
```shell script
72-
/path/to/crusher/bin_x86-64/fuzz_manager --start 4 -i in -o out --post-processing post-proc.py -- ./test @@
89+
/path/to/crusher/bin_x86-64/fuzz_manager --start 4 -i in -o out --processing processing processing.py -- ./test @@
7390
```
7491

75-
Пример скрипта пост-обработки - [post-proc.py](post-proc.py).
92+
Пример скрипта модуля processing - [processing.py](processing.py).
7693

7794
Пример конфиг-файла - файл [config.json](config.json).

Plugins/Processing/config.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"processing": "/path/to/post-proc.py"
3+
}

Plugins/Processing/processing.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
"""
2+
Simple post-processing script for just add header
3+
"""
4+
5+
class Processing:
6+
def __init__(self):
7+
self.open_processing = bytearray("[processing]")
8+
self.close_processing = bytearray("[/processing]")
9+
10+
def pre_processing(self, data=None):
11+
if data is None:
12+
return 42
13+
data.replace(self.open_processing, "")
14+
data.replace(self.close_processing, "")
15+
return data
16+
17+
def post_processing(self, data=None):
18+
if data is None:
19+
return 42
20+
data_end = self.open_processing + bytearray(data) + self.close_processing
21+
return data_end
22+
23+
24+
def initialization():
25+
return Processing

0 commit comments

Comments
 (0)