Главная
АИ #49 (284)
Статьи журнала АИ #49 (284)
Исследование и модификация скрытых настроек UEFI BIOS хранилищ формата EfiVarSto...

Исследование и модификация скрытых настроек UEFI BIOS хранилищ формата EfiVarStore

Рубрика

Информационные технологии

Ключевые слова

UEFI
HII
реверс-инжиниринг
EfiVarStore

Аннотация статьи

В статье рассматривается практический алгоритм по исследованию и модификации скрытых настроек меню UEFI BIOS расположенных в хранилищах формата EfiVarStore.

Текст статьи

Так или иначе разработка внешних PCI-E устройств заканчивается тестированием их непосредственно в составе материнской платы. В большинстве случаев разработчики PCI-E устройств не являются разработчиками материнской платы, а вынуждены использовать готовые решения, доступные на данный момент на рынке. Программное обеспечение UEFI, ответственное за настройку root complex PCI-E, используемое для старта таких платформ является проприетарной разработкой производителя, и поставляется только в бинарном виде. Таким образом разработчик PCI-E устройства вынужден покупать устройства в формате "чёрный ящик", не обладая какой-либо информацией перед покупкой, установлены ли в программном обеспечении UEFI необходимые настройки root complex PCI-E, и есть ли возможность для их изменения пользователем. В качестве возможного решения данной проблемы текущая статья рассматривает метод для исследования и модификации скрытых настроек UEFI.

«Скрытые» в данном контексте означают настройки, которые не доступны для модификации в меню БИОС, или даже те, которые не показываются в меню БИОС, но присутствуют в коде. Другими словами – это настройки, заключённые в блоки grayoutif/suppressif в VFR коде программного обеспечения UEFI. Как показывает практика, таких настроек достаточно большое количество. Связано это в первую очередь с тем, что производители UEFI прошивок хотят облегчить себе портирование на новые материнские платы. Поэтому они не удаляют специфические блоки настроек для каждой отдельной платы, а содержат общий блок VFR кода видимость блоков которого контролируется набором индивидуальных конфигурационных настроек платы. Данная статья рассматривает один из способов анализа и модификации подобных скрытых настроек.

В качестве примера для целей данной статьи был написан UEFI драйвер, экспортирующий в меню UEFI свою форму, обладающую набором скрытых настроек [1]. Тестирование производилось в эмуляторе QEMU [2] с загруженным образом OVMF [3]. Созданный драйвер загружен в систему через стандартную оболочку EFI shell. При заходе в форму данного драйвера по умолчанию пользователь видит полностью закрытое для модификации меню (рис. 1).

image.png

Рис. 1. Меню HiddenSettings драйвера

В предыдущей статье «Исследование и модификация скрытых настроек UEFI BIOS хранилищ формата VarStore» был рассмотрен алгоритм открытия и модификации скрытых настроек для хранилищ формата VarStore.

image.png

Рис. 2. Меню HiddenSettings драйвера после открытия скрытых настроек хранилища Varstore

Однако как было отмечено в этой же статье, он не позволяет производить модификацию настроек, хранящихся в другом типе хранилища EfiVarStore.

Причиной этому является то, что на текущий момент код edk2, основной базы для построения всех UEFI совместимых прошивок, не позволяет производить дамп хранилищ EfiVarStore с помощью стандартной функции спецификации UEFI EFI_HII_CONFIG_ROUTING_PROTOCOL.ExportConfig() [4]. Также в силу инертности разработки UEFI прошивок, даже если эта проблема решится сегодня в коде edk2, до внедрения её в каждый БИОС современных ПК пройдут годы, не говоря уже о том, что прошивки для старых машин скорее всего не получат данного обновления никогда. В связи с этим необходимо найти альтернативное решение для модификации данных настроек.

В рамках данной статьи предлагается продолжить работу с формой драйвера HiddenSettings и модифицировать настройку Numeric хранилища efivarstorage изначально недоступную для редактирования.

Так как мы не можем произвести дамп evivarstore настроек с помощью «HIIConfig.efi dump» [5], мы не можем узнать DevicePath целевого хранилища, необходимый для выполнения команд route/extract. Однако в случае, если форма содержит как хранилища varstore, так и efivarstore, то можно попробовать использовать DevicePath от хранилища varstore, в большинстве случаев эти настройки совпадают.

Использовав DevicePath, полученный в статье «Исследование и модификация скрытых настроек UEFI BIOS хранилищ формата VarStore», мы можем получить необходимый дамп.

Обладая данными знаниями, можно модифицировать настройки методом, описанным в предыдущей статье с помощью команды «HIIConfig.efi route» с необходимым набором аргументов.

image.png

Рис. 3. Меню HiddenSettings драйвера после открытия скрытых настроек хранилища EfiVarstore

Однако не всегда удаётся получить таким образом дамп настроек efivarstore. Целевая форма может быть построена только с таким хранилищем настроек, без соседнего хранилища varstore. В этом случае без знания целевого DevicePath, модификация настроек EfiVarStore не предоставляется возможной таким методом.

При таком варианте предлагается воспользоваться стандартной командой EFI shell «dmpstore» и модифицировать настройки внутри хранилища efivarstore напрямую. Для примера представим, что настройка Numeric EFI всё ещё недоступна, и попробуем изменить её значение, не прибегая к использованию утилиты HIIConfig.

Для просмотра всех значений настроек целевого хранилища EfiVarStore необходимо выполнить команду dmpstore передав аргументом нужный UUID, а с аргументом «-s» данные настройки можно сохранить в файл на файловой системе:

Для редактирования файла можно воспользоваться стандартной утилитой «hexedit» встроенной в EFI Shell:

На рисунке ниже настройки формы выделены красным блоком.

image.png

Рис. 4. Содержимое файла FormEfiData в редакторе hexedit

Как видно они находятся ближе к концу созданного файла. В целом файл обладает заголовком в специализированном формате, а последние 4 байта представляют собой контрольную сумму.

Полный формат файла представлен в листинге ниже:

image.png

Рис. 5. Формат файла

Модифицируем 0300 на 0700 для изменения значения numeric option. Используйте «Ctrl-S» для сохранения обновлённого буфера и «Ctrl-Q» для выхода из редактора.

Для корректной загрузки обновлённых значений требуется обновить поле контрольной суммы (CRC32) в файле. Для произведения данных действий было написано специальное приложение UpdateDmpstoreDump.efi [6]. Контрольная сумма вычисляется с помощью стандартного сервиса UEFI «EFI_BOOT_SERVICES.CalculateCrc32()».

Данное приложение UpdateDmpstoreDump.efi можно использовать для актуализации поля контрольной суммы.

Если проверить файл после работы приложения, то можно увидеть, что контрольная сумма была обновлена:

После этого можно загружать файл для обновления переменной хранилища EFI с помощью той же команды dmpstore с аргументом -I и файлом настроек.

После выполнения данных операций можно проверить, что значение на целевой форме действительно изменилось:

image.png

Рис. 6. Меню HiddenSettings драйвера после открытия модификации настройки Numeric хранилища EfiVarstore

Таким образом в данной статье обозначен алгоритм для открытия и модификации скрытых настроек UEFI хранилищ типа efivarstore. Данный метод можно использовать для расширенной конфигурации программного обеспечения UEFI в случае, если его исходные коды недоступны. Расширенная конфигурация в свою очередь может помочь разработчикам устройств PCI-E для отладки своих решений в составе проприетарных материнских плат.

Список литературы

  1. Исходные коды UEFI драйвера HiddenSettings [Электронный ресурс]. URL: https://github.com/Kostr/UEFI-Lessons/tree/master/UefiLessonsPkg/HiddenSettings (дата обращения: 02.12.2025).
  2. Официальный сайт эмулятора QEMU [Электронный ресурс]. URL: https://www.qemu.org/ (дата обращения: 02.12.2025).
  3. Официальная страница Open Virtual Machine Firmware (OVMF) [Электронный ресурс]. URL: https://github.com/tianocore/tianocore.github.io/wiki/OVMF (дата обращения: 02.12.2025).
  4. EFI_HII_CONFIG_ROUTING_PROTOCOL.ExportConfig() doesn't show efivarstore (Bugzilla Bug 4639) [Электронный ресурс]. URL: https://github.com/tianocore/edk2/issues/10470 (дата обращения: 02.12.2025).
  5. Исходные коды UEFI приложения HIIConfig [Электронный ресурс]. URL: https://github.com/Kostr/UEFI-Lessons/tree/master/UefiLessonsPkg/HIIConfig (дата обращения: 02.12.2025).
  6. Исходные коды UEFI приложения UpdateDmpstoreDump.efi [Электронный ресурс]. URL: https://github.com/Kostr/UEFI-Lessons/tree/master/UefiLessonsPkg/UpdateDmpstoreDump (дата обращения: 02.12.2025).

Поделиться

11

Аладышев К. А. Исследование и модификация скрытых настроек UEFI BIOS хранилищ формата EfiVarStore // Актуальные исследования. 2025. №49 (284). URL: https://apni.ru/article/13814-issledovanie-i-modifikaciya-skrytyh-nastroek-uefi-bios-hranilish-formata-efivarstore

Обнаружили грубую ошибку (плагиат, фальсифицированные данные или иные нарушения научно-издательской этики)? Напишите письмо в редакцию журнала: info@apni.ru

Похожие статьи

Другие статьи из раздела «Информационные технологии»

Все статьи выпуска
Актуальные исследования

#49 (284)

Прием материалов

6 декабря - 12 декабря

Остался последний день

Размещение PDF-версии журнала

17 декабря

Размещение электронной версии статьи

сразу после оплаты

Рассылка печатных экземпляров

31 декабря