
Отключение PatchGuard и принудительной подписи драйверов во время загрузки
EfiGuard — это портативный x64 UEFI буткит, который патчит диспетчер загрузки Windows, загрузчик и ядро во время загрузки для отключения PatchGuard и Driver Signature Enforcement (DSE).
Если вы просто хотите попробовать EfiGuard, перейдите к разделу Использование.
На данный момент поддерживает все EFI-совместимые версии Windows x64, когда-либо выпущенные, от Vista SP1 до Windows 11.
Простота в использовании: можно загрузить с USB-накопителя или EFI-раздела Windows с помощью загрузчика, который автоматически находит и загружает Windows. Драйвер также можно загрузить и настроить вручную с помощью UEFI shell или загрузчика.
Активно использует библиотеку дизассемблера Zydis для быстрого декодирования инструкций во время выполнения, что обеспечивает более надежный анализ, чем при сопоставлении сигнатур, которое часто требует изменений с выходом новых обновлений ОС.
Работает пассивно: драйвер не загружает и не запускает диспетчер загрузки Windows. Вместо этого он реагирует на загрузку bootmgfw.efi диспетчером загрузки прошивки через меню выбора загрузки или EFI-приложение, например загрузчик. Если загружается ОС, отличная от Windows, драйвер автоматически выгружается.
Поддерживает четырехэтапное патчирование для случаев, когда bootmgfw.efi запускает bootmgr.efi вместо winload.efi. Это происходит, когда загружается WIM-файл для загрузки WinPE, установки Windows или режима восстановления Windows.
Восстановление без сбоев: в случае неудачного патча драйвер отобразит информацию об ошибке и предложит продолжить загрузку или перезагрузиться, нажав ESC. Это справедливо даже для финального этапа патча ядра, так как последний этап происходит до вызова ExitBootServices. Многие UEFI-буткиты для Windows перехватывают OslArchTransferToKernel, который, хотя и легко находится по сигнатуре, является функцией, выполняющейся в защищенном режиме после ExitBootServices. Это означает, что службы загрузки недоступны для оповещения пользователя о проблеме.

Имитация сбоя патча с информацией об ошибке
Отладка: может выводить сообщения в отладчик ядра и на экран (буферизованно) на этапе патча ядра, а также на последовательный порт или без буферизации на экран на этапах патча диспетчера загрузки и загрузчика. Если драйвер скомпилирован с отладочной информацией PDB, можно загрузить отладочные символы в любой момент после инициализации HAL, указав виртуальную базу DXE-драйвера и отлаживая его как обычный NT-драйвер.
Обход DSE: доступен либо как прямое отключение DSE в стиле UPGDSED во время загрузки, либо как перехват EFI-службы времени выполнения SetVariable(). Последний служит произвольным бэкдором чтения/записи в режиме ядра, который можно вызвать из Windows с помощью NtSetSystemEnvironmentValueEx и позволяет установить g_CiEnabled/g_CiOptions в желаемое значение. Предоставляется небольшое приложение в стиле DSEFix с именем EfiDSEFix.exe, которое можно использовать для этого. Также можно оставить DSE включенным и отключить только PatchGuard. Загрузчик по умолчанию будет использовать метод перехвата SetVariable, поскольку некоторые античит и антивирусные программы не понимают разницы между читами или вредоносным ПО и самоподписанными драйверами в целом и нацелены на исправление UPGDSED.
Поддерживает модифицированные на диске ядра и загрузчики, патча ImgpValidateImageHash на каждом этапе, а также ImgpFilterValidationFailure, который может молчаливо сообщать о некоторых нарушениях в TPM или журнал SI.
Позволяет Secure Boot работать с Windows 7 (это не шутка!). Сама Windows 7 не поддерживает Secure Boot, и (официально) даже не может загружаться без CSM. Это полезно для тех, кто хочет использовать Windows 7 на защищенном устройстве, требующем WHQL Secure Boot. Запись в вики о том, как это настроить, здесь.

WinObjEx64 на Windows 7 с включенным Secure Boot
SetVariable вызовет ошибку SECURE_KERNEL_ERROR при попытке записи в g_CiOptions.Существует два способа использования EfiGuard: загрузка приложения-загрузчика, которое загрузит драйвер и запустит Windows, или установка драйвера в качестве записи UEFI-драйвера, чтобы он загружался автоматически прошивкой.
Установка драйвера может быть предпочтительнее в некоторых продвинутых конфигурациях, например при мультизагрузке, но загрузчик проще всего использовать, и он должен хорошо работать во всех конфигурациях. См. таблицу ниже для основных различий между двумя методами. Если сомневаетесь, выбирайте приложение-загрузчик.
| Расположение | Установка | Можно пропустить? | Какая ОС загружается? | |
|---|---|---|---|---|
| UEFI Driver Entry | Должен быть на ESP | Через UEFI Shell | ❌ | Та же, что и раньше |
| Loader | Где угодно | Не требуется | ✔️ | Windows |
Сравнение загрузчика и записи UEFI-драйвера
EFI/Boot/Loader.efi в bootx64.efi.X:, пути для двух файлов теперь должны быть X:/EFI/Boot/{bootx64|EfiGuardDxe}.efiSetVariable (по умолчанию), запустите EfiDSEFix.exe -d в командной строке от имени администратора после загрузки, чтобы отключить DSE, или запустите EfiDSEFix.exe для просмотра полного списка опций.Обратите внимание, что вам не нужно использовать отдельный диск для загрузчика. При желании вы можете установить EfiGuard на ESP, на котором уже установлена Windows. Однако это несколько сложнее, так как вам нужно будет добавить запись UEFI-загрузки для загрузчика.