|
2 | 2 |
|
3 | 3 | Этот пример показывает фаззинг dll библиотек, написанных на C#.
|
4 | 4 |
|
5 |
| -# Создание проекта - обертки |
| 5 | +## Создание проекта - обертки |
6 | 6 |
|
7 |
| -В системе должен быть установлен пакет SDK и среда выполнения ASP.NET Core. Ссылка на инструкцию по их установке для |
8 |
| -всех поддерживаемых операционных систем - https://docs.microsoft.com/ru-ru/dotnet/core/install/. |
9 |
| -Необходимо выбрать свою ОС, её версию и последовательно выполнить все шаги установки. |
10 |
| - |
11 |
| -Если у Вас Ubuntu, то перейдите по данной ссылке (https://docs.microsoft.com/ru-ru/dotnet/core/install/linux-ubuntu) и выполните установку |
12 |
| -пакета и среды выполнения для нужной версии ОС. |
13 | 7 | Для фаззинга dll библиотеки необходимо создать проект-обертку.
|
14 | 8 |
|
15 | 9 | ### Этапы создания:
|
@@ -78,18 +72,40 @@ namespace AngleSharp.Fuzz
|
78 | 72 |
|
79 | 73 | В проект-обертку `AngleSharp.Fuzz*` в качестве зависимости также добавлена библиотека `SharpFuzz.dll` версии 1.6.2 (необходимые строки прописаны в файле `*.csproj`). В ней находится функция для запуска нашего проекта-обертки `AngleSharp.Fuzz*` и он собирается как dll файл.
|
80 | 74 |
|
81 |
| -# Фаззинг |
| 75 | +## Подготовка к фаззингу |
| 76 | + |
| 77 | +В системе должен быть установлен пакет SDK и среда выполнения ASP.NET Core. Ссылка на инструкцию по их установке для |
| 78 | +всех поддерживаемых операционных систем - https://docs.microsoft.com/ru-ru/dotnet/core/install/. |
| 79 | + |
| 80 | +Используйте предварительно собранный образ `csharp-fuzz:latest`, который содержит готовую среду для фаззинга с необходимыми предустановленные компонентами, .NET 6 SDK и Runtime |
| 81 | + |
| 82 | +Фаззинг будет проводиться в докер-контейнере, собранного следующей командой: |
| 83 | +```shell |
| 84 | +$ ./docker/docker_build.sh |
| 85 | +``` |
| 86 | + |
| 87 | +Создать контейнер (укажите актуальный путь до директории `crusher`): |
| 88 | +```shell |
| 89 | +$ /docker/docker_run.sh <crusher_dir> [hasp_ip] |
| 90 | +``` |
| 91 | +где: |
| 92 | +- `crusher_dir` - директория `crusher/` (обязательная опция) |
| 93 | +- `hasp_ip` - IP сервера лицензий (необязательная опция) |
| 94 | + |
| 95 | +## Фаззинг |
82 | 96 |
|
83 | 97 | 1. Произведите инструментацию библиотеки `AngleSharp.dll` для фаззинга. Соберите проект-обертку `target/AngleSharp.Fuzz*`. Для этого запустите скрипт `./instrument.sh`, который принимает один аргумент - путь до `dotnet`.
|
84 | 98 |
|
85 | 99 | 2. Находясь в данной директории, запустите скрипт `./fuzz-stdin.sh` для фаззинга библиотеки через **stdin** и `./fuzz-file.sh` для фаззинга через **файл**;
|
86 |
| -они принимают два аргумента - путь до `fuzz_manager` и до исполняемого файла`dotnet`, установленного в Вашей системе. `dotnet` обычно находится здесь (точнее, символическая |
87 |
| -ссылка на исполняемый файл dotnet): /usr/bin/dotnet. |
| 100 | +они принимают два аргумента - путь до `fuzz_manager` и до исполняемого файла`dotnet`, установленного в Вашей системе. |
| 101 | + |
| 102 | +*Примечание*: |
| 103 | +Внутри контейнера Crusher располагается по пути `/opt/crusher/`, а dotnet - `/usr/bin/dotnet` |
88 | 104 |
|
89 | 105 | 3. Запустите в другом терминале `UI` фаззера (укажите актуальные пути):
|
90 | 106 |
|
91 | 107 | ```shell
|
92 |
| -/path/to/crusher/bin_x86-64/ui --outdir /path/to/out |
| 108 | +sudo /path/to/crusher/bin_x86-64/ui --outdir /path/to/out |
93 | 109 | ```
|
94 | 110 |
|
95 | 111 | Как только будут найдены аварийные завершения, значение поля `unique_crashes` (в окне `UI` - наверху справа) станет ненулевым.
|
|
0 commit comments