Skip to content

Commit 0649b00

Browse files
author
thientc
committed
Add project summary
1 parent 12a2e4e commit 0649b00

File tree

1 file changed

+62
-0
lines changed

1 file changed

+62
-0
lines changed

Project-summary.md

+62
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
# Краткий обзор работы инструмент Futag
2+
3+
## 1. Что Futag делает?
4+
5+
- Futag пытается генерировать фаззинг-обертки для функций в бибиотеки. На данный момент генерируются 2 формата фаззинг-оберкток LibFuzzer и AFLPlusPlus.
6+
7+
## 2. Что входит в инструмент Futag?
8+
9+
- Futag включает в себя проекты clang и compiler-rt проекта LLVM (llvm-project). Futag добавил в clang чекеры (checkers), матчеры (matchers) для анализа исходного кода тестируемой библиотеки.
10+
11+
- Кроме того Futag имеет Питон-пакет, который помогает:
12+
- запустить сборку;
13+
- установить (в пользовательском директории);
14+
- собрать результат анализа;
15+
- генерировать фаззинг-обертки;
16+
- фаззить и собрать результат фаззинга
17+
18+
## 3. Скрипт запуска
19+
20+
Ниже приведен пример сценария запуска Futag, комментарии объясняют, как работает Futag.
21+
22+
```python
23+
from futag.preprocessor import *
24+
from futag.generator import *
25+
from futag.fuzzer import *
26+
from futag.sysmsg import *
27+
28+
FUTAG_PATH = "/home/futag/Futag-tests/futag-llvm/" # Путь к директории инструмента Futag "futag-llvm" [*]
29+
lib_path = "curl-7.85.0" # путь к директории содержащей исходные кода исследуемого ПО [*]
30+
31+
lib_test = Builder( # модуль для запуска сборки и анализа
32+
FUTAG_PATH,
33+
lib_path,
34+
clean=True, # перед запуска удаляются ли созданные папки инструментом Futag [1]
35+
processes=16, # количество потоков при сборке
36+
build_ex_params="--without-ssl --disable-ldap --disable-ldaps" # дополнительные параметры при сборке библиотеки - данные параметры запускаются на этапе конфигурации библиотеки curl [*]
37+
)
38+
lib_test.auto_build() # инструмент автоматически собирает, устанавливает библиотеку в папки из вышесказанного [1]
39+
lib_test.analyze() # запуск сборки результата анализа в файл futag-analysis-result.json
40+
41+
lib_test = Generator( # модуль для генерации
42+
FUTAG_PATH,
43+
lib_path,
44+
target_type=LIBFUZZER, # формат фаззинг-оберток: LIBFUZZER или AFLPLUSPLUS
45+
)
46+
lib_test.gen_targets() # генерация оберток
47+
lib_test.compile_targets( # функция для компиляции оберток
48+
16,
49+
keep_failed=True, # сохранить ли не скомпилированные обертки
50+
extra_include="-DHAVE_CONFIG_H", # дополнительные параметры включаются в строку компиляции. Данный параметр включается при сборке curl [*]
51+
extra_dynamiclink="-lgsasl -lpsl -lbrotlidec -lz -lidn2" # системые библиотеки включаются на этапе линковки. Данные библиотеки включаются при сборке curl [*]
52+
)
53+
54+
fuzzer = Fuzzer( # модуль для фаззинга
55+
FUTAG_PATH,
56+
fuzz_driver_path="curl-7.85.0/futag-fuzz-drivers", # путь к папке, содержащей скомпилированные обертки
57+
totaltime=10, # время фаззинга одной обертки
58+
coverage=True # показывается ли покрытие
59+
)
60+
fuzzer.fuzz() # функция для запуска фаззинга
61+
```
62+

0 commit comments

Comments
 (0)