Skip to content

Commit

Permalink
Merge pull request #27 from gfarida/java
Browse files Browse the repository at this point in the history
java
  • Loading branch information
MAXZVER authored Apr 21, 2022
2 parents 22fd1e0 + 653dbb6 commit b4d4663
Show file tree
Hide file tree
Showing 7 changed files with 58 additions and 2 deletions.
4 changes: 2 additions & 2 deletions Examples/Crusher/Linux/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
5) `stm32` - фаззинг ПО устройства ARM (на основе частичной эмуляции с Lua-Qemu);
6) `firmware_x86_32` - фаззинг ПО устройства x86 (32-бит) (на основе частичной эмуляции с Lua-Qemu);
7) `firmware_x86_64` - фаззинг ПО устройства x86 (64-бит) (на основе частичной эмуляции с Lua-Qemu);
8) `partial_emulation` - пример частичной эмуляции с помощью модуля DualEmu, комбинирующего фаззинг с
помощью unicornafl и DSE с Angr
8) `partial_emulation` - пример частичной эмуляции с помощью модуля DualEmu, комбинирующего фаззинг с помощью unicornafl и DSE с Angr;
9) `java` - фаззинг JAVA приложения через файл

Далее приведена последовательность действия по фаззингу, мониторингу и воспроизведению аварийных завершений (крешей) для следующих примеров: `python`, `jasper` и `faad`.

Expand Down
26 changes: 26 additions & 0 deletions Examples/Crusher/Linux/java/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Общее описание

Этот пример показывает фаззинг JAVA приложения

# Инструментация проекта
В системе должна быть установлена JAVA 8 версии. Если Ваш проект не принимает на вход файл, то необходимо написать driver,
на вход которому передается файл с данными, а он в свою очередь запускает JAVA приложение, которое Вы хотите фаззить.

В данном примере скомпилированный driver и jar файл с проектом находятся в директории `target`.

Находясь в данной директории, запустите скрипт ./instrumentation.sh для инструментации приложения(driver-а) и используемых библиотек,
он принимает один аргумент - путь до jar файла `kelinci.jar` с классами для запуска инструментации JAVA приложения.

# Фаззинг

Находясь в данной директории, запустите скрипт `./fuzz.sh`;
он принимает один аргумент - путь до `fuzz_manager`.

Запустите в другом терминале `UI` фаззера (укажите актуальные пути):
```shell
/path/to/crusher/bin_x86-64/ui --outdir /path/to/out
```

Как только будут найдены аварийные завершения, значение поля `unique_crashes` (в окне `UI` - наверху справа) станет ненулевым.

Прервать фаззинг (в первом терминале, `Ctrl + С`)
11 changes: 11 additions & 0 deletions Examples/Crusher/Linux/java/fuzz.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#!/bin/bash

if [[ "$#" -ne 1 ]]; then
echo "Usage: ./fuzz.sh <path/to/fuzz_manager>"
exit 1
fi

FUZZ_MAN=$1

$FUZZ_MAN --start 4 -i in -o out -F -I java --instrumented-class test -- ./bin-instr:./target/commons-math3-3.6.1-instr.jar __DATA__

1 change: 1 addition & 0 deletions Examples/Crusher/Linux/java/in/seed
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
10 12 23 67
18 changes: 18 additions & 0 deletions Examples/Crusher/Linux/java/instrumentation.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#!/bin/bash

if [[ "$#" -ne 1 ]]; then
echo "Usage: ./instrumentation.sh <path/to/kelinci.jar>"
exit 1
fi

KELINCI=$1

mkdir bin
cp target/test.class bin/test.class

echo "instrument project"
/usr/bin/java -cp ${KELINCI} edu.cmu.sv.kelinci.instrumentator.Instrumentor \
-i target/commons-math3-3.6.1.jar -o target/commons-math3-3.6.1-instr.jar

/usr/bin/java -cp ${KELINCI}:target/commons-math3-3.6.1-instr.jar edu.cmu.sv.kelinci.instrumentator.Instrumentor -i bin -o bin-instr

Binary file not shown.
Binary file added Examples/Crusher/Linux/java/target/test.class
Binary file not shown.

0 comments on commit b4d4663

Please sign in to comment.