Skip to content

Простенький утилита, логирует установку/удаление протоколов, загрузку исполняемых образов и переход на BDS стадию. A protocol actions (and some other events) logger tool for UEFI images, can be used for basic reverse engineering.

Notifications You must be signed in to change notification settings

lukiyanov/DxeLoadingLoggerPkg

Repository files navigation

Описание

Это UEFI драйвер DXE стадии, логирующий события установки/удаления протоколов в системе, а также некоторые другие. Полезен, когда есть сторонний образ прошивки UEFI и нужно выяснить, какие протоколы он устанавливает и в какой момент.

Что логируется:

  1. Состояние системы на момент запуска драйвера:
    1. Загруженные исполняемые образы
    2. Установленные протоколы
  2. Загрузку исполняемых образов: какой образ когда и что загрузил
  3. Установку/удаление протоколов и информацию о хэндлах, на которые они были установлены
  4. Переход на BDS-стадию

Есть две реализации перехвата событий:

  1. Через RegisterProtocolNotify() для всех заранее известных протоколов и только для них
  2. Через модификацию gBS

Второй способ даёт больше информации, позволяет детектить установку ранее неизвестных протоколов, но он менее универсален и может не сработать на некоторых системах. Детект перехода на BDS-стадию работает только для второго способа, причём началом BDS стадии считается вызов EFI_BDS_ARCH_PROTOCOL->Entry().

Утилита использует автогенерируемый файл известных протоколов и для них указывает в логе имя протокола, а не его GUID. Для неизвестных указывается GUID.

Утилита в процессе доработки.

Как пользоваться

Как сгенерить лог

Как и для любого UEFI драйвера, есть несколько способов его загрузить:

  1. Загрузить вручную из UEFI Shell
  2. Загрузить через UEFI-переменные
  3. Встроить в образ, например, при помощи UEFITool

Основным способом работы является последний. Вообще, чем раньше стартует драйвер тем больше полезной информации он собирает. Драйвер копит информацию и как только находит в системе диск с файлом log.txt в его корне, начинает писать в этот файл лог. Лог дописывается после каждого события, что может существенно замедлять загрузку системы; это сделано чтобы не потерять содержимое лога, если системная прошивка внезапно перезагрузит машину. Можно создать такой файл на флешке и вставить её в конце загрузки (что ускорит загрузку), либо положить файл на один из постоянных дисков.

Настройки

Настройки задаются в файле DxeLoadingLoggerPkg.dsc (либо через командную строку при запуске сборки):

  1. EVENT_PROVIDER_GST_HOOK
    • TRUE: События собираются путём модификации gST.
    • FALSE: События собираются посредством вызова RegisterProtocolNotify() для известных протоколов. Лучшая совместимость с прошивками, но даёт меньше информации.
  2. DETECT_BDS_STAGE_ENTRY
    • Перехватывать переход на BDS-стадию или нет. Актуально только для EVENT_PROVIDER_GST_HOOK = TRUE, иначе ни на что не влияет.
  3. PRINT_EVENT_NUMBERS_TO_CONSOLE
    • Выводить номера событий в консоль или нет. Полезно для сопоставления событий с тем, что выводит на экран системная прошивка.
  4. DEBUG_MACROS_OUTPUT_ON
    • Если TRUE, то генерит подробный и длинный лог свой работы, чем очень сильно замедляет работу. Только для отладки.
  5. DEBUG_OUTPUT_TO_SERIAL
    • TRUE: Отладочные события выводятся в COM-порт.
    • FALSE: Отладочные события выводятся на экран.

Сторонние скрипты

Списки известных GUID протоколов взяты оттуда без изменений: https://github.com/yeggor/UEFI_RETool

About

Простенький утилита, логирует установку/удаление протоколов, загрузку исполняемых образов и переход на BDS стадию. A protocol actions (and some other events) logger tool for UEFI images, can be used for basic reverse engineering.

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published