Различные модули для Ghidra, чтобы помочь с ПК прошивки. Это было принято в качестве проекта Coreboot для GSOC 2019.
JDK 11 (или более новые) и Ghidra 10.1 (или более новее) требуются.
Используется стандартная система сборки Ghidra Gradle. Установите переменную среды GHIDRA_INSTALL_DIR перед строительством или установите ее как свойство Gradle (полезно для строительства в IDE):
$ export GHIDRA_INSTALL_DIR= " /path/to/ghidra "
$ ./gradlew echo GHIDRA_INSTALL_DIR=/path/to/ghidra > gradle.properties Модуль ZIP будет выводиться в dist/ . Используйте файл> Установить расширения и выберите Green Plus для просмотра в расширении. Перезапустите Ghidra, когда его предъявлено.
Для правильной функциональности плагин должен быть построен с тем же JRE, который использовался вашей установкой Ghidra. Если у вас установлено несколько среде выполнения Java, выберите правильный JRE, установив переменную среды JAVA_HOME перед построением.
Добавьте опцию PCI в проект Ghidra. Опция Legacy X86 ROMS может быть напрямую загружена для анализа. Убедитесь, что двоичный формат установлен на x86 PCI Option ROM и импортируйте двоичный.
Опция UEFI ROMS или параметры, которые содержат более одного изображения, должны быть импортированы с помощью загрузчика файловой системы. При предложении выбрать режим импорта, выберите файловую систему . Изображения, содержащиеся в опциональном ПЗУ, будут отображаться и могут быть импортированы для анализа. Изображения Legacy x86 будут обрабатываться с помощью ROM -загрузчика опции x86, а изображения UEFI будут обрабатываться погрузчиком PE32 (поддерживается сжатие). Информация для каждого изображения может быть отображена, выбрав информацию получить информацию в меню правой кнопкой мыши.
Добавьте поддерживаемое изображение прошивки в проект Ghidra. Погрузчик изображения прошивки поддерживает изображения Intel с дескриптором Flash, изображениями Coreboot с макетом FMAP/CBFS и объемами прошивки UEFI. Режим импорта файловой системы может использоваться для просмотра встроенных файлов в указанном изображении прошивки.
Обратите внимание, что некоторые изображения прошивки UEFI могут хранить вложенные объемы прошивки в файлах Freeform/RAW (или разделения Freeform/RAW FFS). Такие файлы могут быть импортированы в виде объемов прошивки, выбирая открытую файловую систему в меню правой щелчки для указанного файла Freeform/RAW. Если вложенного тома прошивки не найдено, будет отображаться сообщение об ошибке ( No file system provider for... ).
Скрипт помощника включен в каталог плагина GHIDRA_SCRIPTS, который должен быть автоматически добавлен в список каталогов сценариев в Ghidra.
Запустите сценарий Helper Uefi, выбрав Uefihelper.java в окне диспетчера скриптов (доступ к Window -> Script Manager ).
Чтобы изменить библиотеку типов данных UEFI, измените шаблон PRF в data/gen_prf.sh по мере необходимости и генерируйте новые файлы PRF. Откройте сгенерированный файл PRF в файле -> Parse C Source . Создайте обновленную библиотеку типа данных, выбрав Parse для файла .... Перезаписать исходные библиотеки типа данных в data и восстановить плагин.
Это некоторые интересные проекты, связанные с изменением UEFI:
Apache 2.0, за некоторыми исключениями:
src/efidecompress/c/efidecompress.c : bsd src/efidecompress/c/efidecompress.c -это слегка модифицированная версия decompress.c из UEFI-Firmware-Parser (которая сама получена из оригинала в базе EDK2).
lib/xz-1.8.jar взят из проекта XZ для Java.
Погрузчик IFD FS в src/main/java/firmware/ifd использовал анализатор из Uefitool в качестве ссылки.
База данных GUID в data/guids.csv взята из UEFITOOL.
Библиотеки типа данных UEFI в data/uefi_*.gdt были сгенерированы с помощью data/gen_prf.sh , который частично основан на определении анализаторов UEFI из запроса на вытягивание Ghidra с помощью WRFFRZ. Эти библиотеки типа данных используют заголовки от EDK2 MDEPKG.
Ghidravitaloader от Xerpi использовался в качестве эталона для некоторых частей сценария Helper UEFI.