Автор: Cr4sh , 8 февраля 2012
Здравствуйте.

Недавно стал обладателем ноутбука ThinkPad x220, которые, как известно, в связи с законодательными заморочками в РФ поставляются с отключенными TPM и AES-NI. C AES-NI я разобрался довольно быстро: Google подсказал, что его настройки хранятся в MSR регистре 0x13C, после чего я написал скрипт для pyew, который по строке поиска "0x13C" помог мне найти UEFI модуль F7731B4C-58A2-4DF4-8980-5645D39ECE58_1_719 (он же PowerManagement2.efi), устанавливающий содержимое этого самого регистра в процессе загрузки. Разумеется, далее этот самый модуль был благополучно отпатчен.

Однако, дело в другом: я сравнил код двух модулей PowerManagement2.efi (один был получен с BIOS моей машины, а второй -- с машины в которой AES-NI был активен изначально), и этот код оказался совершенно одинаковым, а его поверхностный реверс показал, что установка/сброс нужных флагов в MSR регистре 0x13C происходит в зависимости от значения некоего слова, прочитанного по определённому смещению из какой-то глобальной области памяти.
В связи с вышеизложенным имею ряд вопросов:

1) Как именно вендор устанавливает настройки аппаратной части в UEFI конкретной машины (не обязательно Lenovo, хотя бы на примере любого другого)?
2) Как мне получить доступ к этим настройкам, имея дамп BIOS и физический доступ к исследуемой машине?

Спасибо.
Содержимое данного поля является приватным и не предназначено для показа.

BBCode

  • HTML-теги не обрабатываются и показываются как обычный текст
  • You may use the following BBCode tags:
    • [align]
    • [b]
    • [code]
    • [color]
    • [font]
    • [hr]
    • [i]
    • [img]
    • [list]
    • [quote]
    • [s]
    • [size]
    • [spoiler]
    • [sub]
    • [sup]
    • [table]
    • [u]
    • [url]
  • Адреса веб-страниц и email-адреса преобразовываются в ссылки автоматически.

Cr4sh

14 лет назад

Да, так же буду благодарен за любые ссылки на интересные материалы, имеющие отношение к реверсингу и внутреннему устройству UEFI.
Внутреннее устройство на - edk.tianocore.org. Берутся исходники EDK и внимательно курятся. Они на С.
Далее дело техники... Функция инициализации у всех U/EFI модулей DXE выглядит так:
EFI_STATUS DriverEntry (EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable);
Указатель yна структуру SystemTable сохраняется в глобальной переменной gST. Далее из него по смещению "извлекаются" указатели на структуры EFI_BOOT_SERVICES и EFI_RUNTIME_SERVICES, которые сохраняются в глобальных переменных gBS и gRS. По смещениям через эти указатели производитсяя косвенный вызов всех стандартных (API) функций EFI. Далее по GUID-ам вылавливаются стандартные протоколы, а по протоколам восстанавливай структуры.