Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 

README.md

Общее описание

Этот пример показывает фаззинг встраиваемого ПО архитектуры x86-32 на основе частичной эмуляции с помощью модифицированной QEMU и скриптов на языке Lua.

В поддиректории firmware находится тестируемое ПО (исходный и бинарный код). В поддиректории testing - скрипты и материалы для запуска частичной эмуляции и фаззинга.

Сборка

cd firmware
./build.sh
cd ..

В ходе эмуляции выполняется функция func

Фаззинг

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

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

/path/to/crusher/bin_x86-64/ui --outdir /path/to/out

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

Прервать фаззинг (в первом терминале, Ctrl + C).

В данном примере фаззер обнаруживает два уникальных аварийных завершения, соответствующие двум дефектам в ПО (см. исходный код).

Эмуляция

Для запуска эмуляции - скрипт ./emulate.sh; он принимает один аргумент - путь до исполняемого файла QEMU; входные данные находятся в файле input.

QEMU x86-32: /path/to/crusher/bin_x86-64/QIT/QemuX86/qemu-system-i386

Воспроизведение аварийного завершения

Записать найденные фаззером вх.данные ав.завершения (например, out/EAT_OUT/crashes/id_crash_0) в файл input и запустить эмуляцию (как описано выше). В случае ав.завершения, т.е. при возникновении исключения, будет напечатана информация об этом исключении (слово Exception, значения регистров в этот момент и т.п.)

Более подробное описание см. в документации.