Skip to content

Latest commit

 

History

History

partial_emulation

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 

Установка

Необходимо установить модуль частичной эмуляции DualEmu, см. раздел "Частичная эмуляция с помощью модуля DualEmu" в документации Crusher.

В этом примере это не используется, но в общем случае нужно в файле dump/dump_info.json указать полный путь до папки с rootfs для используемой архитектуры и ОС. rootfs можно найти в официальном репозитории qiling.

Описание примера

В данной директории расположен основной учебный пример на тему частичной эмуляции на архитектуре ARM.

В поддиректории dump/firmware находится тестируемое ПО - исходный код, а также скомпилированный образ.

В данном примере будет проводиться фаззинг функции function (test.c). Через свои аргументы функция получает доступ к буферу с входными данными, читает оттуда число, и при выполнении определённых условий на число происходит аварийное завершение (разыменование нулевого указателя). DSE поможет фаззеру пройти это сложное условие.

Начальная точка выполнения - вход в функцию function. В данной директории уже есть дамп в этой точке (dump) - снимок начального состояния. Конечная точка выполнения - возврат из функции function. Образец входных данных (от фаззера или пользователя) нужно записать в буфер, адрес которого можно получить из аргументов функции; в случае DSE нужно пометить все входные байты символьно. В тестируемом коде есть вызов функции check_hardware, которая иллюстрирует обработку неэмулируемых фрагментов - её нужно заменить пользовательским обработчиком (просто возвращает true, чтобы обеспечить дальнейшее выполнение).

Скрипт fuzz.sh запускает фаззер. Также можно запустить эмуляцию без фаззера в одном из режимов - qiling/angr:

/path/to/crusher/bin/python-3.9_x86_64/bin/python3 emu_script_dump.py <--qiling/--angr> -i in/input -o out