Skip to content

Commit

Permalink
remove self.header
Browse files Browse the repository at this point in the history
  • Loading branch information
thientc committed Nov 30, 2022
1 parent beac7a4 commit 0ec64b6
Show file tree
Hide file tree
Showing 6 changed files with 513 additions and 20 deletions.
34 changes: 22 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
FUTAG — это автоматизированный инструмент генерации фаззинг-целей для программных библиотек.
В отличие от обычных программ, программная библиотека может не содержать точки входа и не принимать входные данные, поэтому создание вручную фаззинг-цели для анализа программных библиотек остается проблемой и требует ресурсов. Одним из решением данной проблемы является автоматизация процесса создания фаззинг-целей, что уменьшает количество затрачиваемых ресурсов.
FUTAG использует инструменты Clang и Clang LLVM в качестве внешнего интерфейса для анализа библиотек и генерации фаззинг-целей.
FUTAG во время работы использует статический анализ для поиска:
FUTAG запускает статический анализ во время сборки библиотеки для поиска:
- Зависимостей сущностей (типы данных, функции, структуры и т.д.) в исходном коде целевой библиотеки.
- Контекста использования библиотеки.
Далее информация, полученная по результатам статического анализа, используется для генерации фаззинг-целей.
Expand Down Expand Up @@ -66,12 +66,17 @@ FUTAG во время работы использует статический
# предварительно должен быть установлен пакет futag-<версия>.tar.gz
from futag.preprocessor import *

testing_lib = Builder(
"futag-llvm/", # путь к директории "futag-llvm" [2.2.]
"path/to/library/source/code" # путь к директории содержащей исходные кода исследуемого ПО
FUTAG_PATH = "/home/futag/Futag-tests/futag-llvm/"
lib_path = "path/to/library/source/code"
build_test = Builder(
FUTAG_PATH,
lib_path,
clean=True, # удалить все папки сгенерированные Futag-ом перед сборкой
# processes=4, # количество задач при сборке
# build_ex_params="--with-openssl --with-mhash" # дополнительные параметры при сборке библиотеки
)
testing_lib.auto_build()
testing_lib.analyze()
build_test.auto_build()
build_test.analyze()
```

- Генерация и компиляция драйверов
Expand All @@ -80,18 +85,23 @@ testing_lib.analyze()
# предварительно должен быть установлен пакет futag-<версия>.tar.gz
from futag.generator import *

g = Generator(
"futag-llvm/", # путь к директории "futag-llvm"
"path/to/library/source/code" # путь к директории содержащей исходные кода исследуемого ПО
FUTAG_PATH = "/home/futag/Futag-tests/futag-llvm/"
lib_path = "path/to/library/source/code"

generator = Generator(
FUTAG_PATH, # путь к директории "futag-llvm"
lib_path # путь к директории содержащей исходные кода исследуемого ПО
)

# Генерация фаззинг-оберток
g.gen_targets(
generator.gen_targets(
anonymous=False # опция для генерации фаззинг-обертки для функций, которые не имеют публичный доступ
)

# Compile fuzz drivers
g.compile_targets()
generator.compile_targets(
4, # количество задач при сборке
# extra_include="-DHAVE_CONFIG_H" # дополнительные параметры при сборке библиотеки
)
```
По-умолчанию, успешно скомпилированные фаззинг-обертки для целевых функций находятся в каталоге futag-fuzz-drivers, где для каждой целевой функции создаётся своя поддиректория название которой совпадает с именем целевой функции.
Если для функции сгенерировалось несколько фаззинг-оберток, в подкаталоге целевой функции создаются соответствующие директории, где к имени целевой функции добавляется порядковый номер.
Expand Down
Loading

0 comments on commit 0ec64b6

Please sign in to comment.