Этот пример показывает фаззинг встраиваемого ПО архитектуры ARM
на основе частичной эмуляции с помощью модифицированной QEMU
и скриптов на языке Lua
.
В поддиректории firmware
находится тестируемое ПО (исходный и бинарный код).
В поддиректории testing
- скрипты и материалы для запуска
частичной эмуляции и фаззинга.
cd firmware
make
cd ..
В ходе эмуляции выполняется функция func
(src/main.c
)
Находясь в директории testing/
, запустить скрипт ./startFuzz.sh
;
он принимает один аргумент - путь до fuzz_manager
.
Запустить в другом терминале UI
фаззера (укажите актуальные пути):
/path/to/crusher/bin_x86-64/ui --outdir /path/to/out
Как только будут найдены креши, значение поля unique_crashes
(в окне UI
- наверху справа) станет ненулевым.
Прервать фаззинг (в первом терминале, Ctrl + C
).
Для запуска эмуляции - скрипт ./startEmulate.sh
;
он принимает один аргумент - путь до исполняемого файла QEMU
(qemu-system-arm
);
входные данные находятся в файле input
.
Воспроизведение аварийного завершения:
Записать найденные фаззером вх.данные ав.завершения (например, out/FUZZ-MASTER_0/crashes/id_crash_0
)
в файл input
и запустить эмуляцию (как описано выше).
В случае ав.завершения, т.е. при возникновении исключения,
будет напечатана информация об этом исключении
(слово Exception
, значения регистров в этот момент и т.п.)
Более подробное описание см. в документации.