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

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

Рубрика

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

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

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

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

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

Текст статьи

Так или иначе разработка внешних 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 драйвера

Общий алгоритм, предлагаемый в данной статье для решения поставленной задачи, заключается в следующем:

  1. Дамп всех package lists из form packages драйвера;
  2. Дизассемблирование IFR кода из form packages и поиск необходимых настроек;
  3. Модификация необходимых настроек.

Для выполнения шага 1) было написано специальное приложение ShowHIIext.efi [4], позволяющее производить дамп и сохранение всех package lists из базы данных HII доступной на данный момент в программном обеспечении UEFI.

Выполнив данное приложение из оболочки EFI shell можно получить набор всех package lists в виде отдельных файлов, сохранённых на файловой системе непосредственно рядом с приложением.

Для выполнения дизассемблирования IFR кода из form packages (шаг 2) данная статья предлагает использовать открытое приложение IFRExtractor-RS [5].

Выполнив приложение над всеми полученными на предыдущем шаге файлами, мы можем выяснить, в каких именно package lists содержатся пакеты с формами, и произвести дизассемблирование IFR кода для данных пакетов.

Для каждого файла, содержащего внутри себя данные IFR, приложение ifrextractor создаст файл в формате *.txt с декодированным кодом VFR:

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

Анализ вывода декомпилированного VFR кода позволяет определить хранилище для каждой из необходимых настроек и восстановить внутреннюю структуру хранилищ данных:

Таблица

Описание структуры хранилища данных

Элемент

Строка меню

VarStoreId

VarOffset (в байтах)

Size (в байтах)

Checkbox

"Show varstore settings"

1

0

1 байт -неявно для элемента checkbox

Numeric

"Numeric prompt"

1

1

2 байта (т. к. у элемента Size: 16)

OneOf

"OneOf list prompt"

1

3

1 байт (т. к. у элемента Size: 8)

Checkbox

"Enable efivarstorage settings"

2

0

1 байт -неявно для элемента checkbox

Numeric

"Numeric EFI prompt"

2

1

2 байта (т. к. у элемента Size: 16)

OneOf

"OneOf list EFI prompt"

2

3

1 байт (т. к. у элемента Size: 8)

Для работы с настройками базы данных HII было написано специальное приложение HIIConfig.efi [6]. Вызов команды «HIIConfig.efi dump» позволяет произвести дамп всех настроек базы данных HII, а простым поиском по varstore GUID можно найти данные по настройкам нашего драйвера.

Использовав переменную PATH из вывода команды «HIIConfig.efi dump» в вызовах HIIConfig.efi с подкомандами route/extract можно читать и изменять значения целевых настроек.

В текущем примере изменив настройку Checkbox "Show varstore settings" с помощью команды «HIIConfig.efi route» с необходимыми аргументами можно открыть недоступное первоначально меню.

image.png

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

Следует отметить, что методом выше можно не только открывать блоки настроек, недоступные для модификации пользователем, но и непосредственно модифицировать сами скрытые настройки. Это может быть полезно для случаев, когда целевые настройки недоступны для открытия, например заключены в блоки suppressif TRUE/grayoutif TRUE.

Ограничением текущего метода является то, что он позволяет модифицировать только настройки хранилищ типа VarStore. В силу бага [7] в коде edk2, работа с настройками хранилищ efiVarStore недоступна вышеуказанным методом.

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

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

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

Поделиться

14

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

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

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

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

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

#49 (284)

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

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

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

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

17 декабря

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

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

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

31 декабря