Skip to content

Commit 06e81a0

Browse files
sadpepefeelsbadMaksim
andauthored
Update C# example (#65)
Co-authored-by: Maksim <popov.md@star.intra.ispras.ru>
1 parent 5899bd4 commit 06e81a0

File tree

5 files changed

+102
-11
lines changed

5 files changed

+102
-11
lines changed

Examples/Crusher/Linux/csharp/README.md

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,8 @@
22

33
Этот пример показывает фаззинг dll библиотек, написанных на C#.
44

5-
# Создание проекта - обертки
5+
## Создание проекта - обертки
66

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-
пакета и среды выполнения для нужной версии ОС.
137
Для фаззинга dll библиотеки необходимо создать проект-обертку.
148

159
### Этапы создания:
@@ -78,18 +72,40 @@ namespace AngleSharp.Fuzz
7872

7973
В проект-обертку `AngleSharp.Fuzz*` в качестве зависимости также добавлена библиотека `SharpFuzz.dll` версии 1.6.2 (необходимые строки прописаны в файле `*.csproj`). В ней находится функция для запуска нашего проекта-обертки `AngleSharp.Fuzz*` и он собирается как dll файл.
8074

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+
## Фаззинг
8296

8397
1. Произведите инструментацию библиотеки `AngleSharp.dll` для фаззинга. Соберите проект-обертку `target/AngleSharp.Fuzz*`. Для этого запустите скрипт `./instrument.sh`, который принимает один аргумент - путь до `dotnet`.
8498

8599
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`
88104

89105
3. Запустите в другом терминале `UI` фаззера (укажите актуальные пути):
90106

91107
```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
93109
```
94110

95111
Как только будут найдены аварийные завершения, значение поля `unique_crashes` (в окне `UI` - наверху справа) станет ненулевым.
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
FROM ubuntu:22.04
2+
3+
RUN apt update \
4+
&& apt upgrade -y \
5+
&& apt install -y wget libffi-dev liblz4-dev libcurl4-openssl-dev gnupg2 git \
6+
gcc gcc-multilib g++ g++-multilib clang nano
7+
8+
RUN cd /tmp && wget http://archive.ubuntu.com/ubuntu/pool/main/libf/libffi/libffi6_3.2.1-8_amd64.deb && dpkg -i libffi6_3.2.1-8_amd64.deb && rm -rf libffi6_3.2.1-8_amd64.deb
9+
10+
# .NET 6 installing
11+
RUN apt-get update && \
12+
apt-get install -y --no-install-recommends \
13+
dotnet-sdk-6.0 \
14+
aspnetcore-runtime-6.0
15+
16+
# Set Timezone or get hang during the docker build...
17+
ENV TZ=Europe/Moscow
18+
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
19+
20+
# Setup license
21+
RUN echo 'deb https://repo.ispras.ru/apt /' | tee /etc/apt/sources.list.d/ispras.list \
22+
&& wget -q -O - https://repo.ispras.ru/apt/key.asc | apt-key add - \
23+
&& apt update -y \
24+
&& apt install -y aksusbd
25+
COPY setup_license.sh /opt/setup_license.sh
26+
RUN echo "/opt/setup_license.sh 101213 36343" >> ~/.bashrc
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
#!/bin/bash
2+
3+
work_dir=$(dirname $(readlink -e $0))
4+
docker build -f $work_dir/Dockerfile -t csharp-fuzz:latest $work_dir/
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#!/bin/bash
2+
3+
script_file=$(readlink -e $0)
4+
test_dir=$(dirname $(dirname $script_file))
5+
6+
if [ "$#" -lt 1 ]; then
7+
echo "Usage: $script_file <crusher_dir> [hasp_ip]" >&2
8+
exit 1
9+
fi
10+
11+
crusher_dir=$(readlink -e $1)
12+
echo "crusher - $crusher_dir"
13+
14+
hasp_ip=""
15+
if [ ! -z "$2" ]; then
16+
hasp_ip_env="-e HASP_IP=$2"
17+
fi
18+
19+
cmd="docker run --rm --privileged --network host -e LANG=C.UTF-8 -e LC_ALL=C.UTF-8 -v $crusher_dir:/opt/crusher -v $test_dir:$test_dir $hasp_ip_env -ti csharp-fuzz:latest /bin/bash"
20+
echo "$cmd"
21+
$cmd
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#!/bin/bash
2+
3+
if [ -z "$HASP_IP" ]; then
4+
echo "hasp ip - not set"
5+
hasplmd -s
6+
exit 0
7+
fi
8+
9+
echo "hasp ip - $HASP_IP"
10+
11+
mkdir -p /root/.hasplm
12+
for vendor_id in "$@"; do
13+
hasp_ini_file=/root/.hasplm/hasp_${vendor_id}.ini
14+
15+
if [ ! -f "$hasp_ini_file" ] || ! grep -q '^serveraddr = ' "$hasp_ini_file"; then
16+
echo "[REMOTE]" >> $hasp_ini_file
17+
echo "serveraddr = $HASP_IP" >> $hasp_ini_file
18+
echo "set hasp addr: serveraddr = $HASP_IP"
19+
else
20+
echo "already set hasp addr: serveraddr = $HASP_IP"
21+
fi
22+
done
23+
24+
hasplmd -s

0 commit comments

Comments
 (0)