Skip to content

Latest commit

 

History

History

firmware_x86_32

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 

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

Этот пример показывает фаззинг встраиваемого ПО архитектуры 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, значения регистров в этот момент и т.п.)

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