Skip to content

Maxinator500/SmokelessRuntimeEFIPatcher-RUS

 
 

Repository files navigation

SREP на Русском

Копия утилиты за авторством SmokelessCPU, но с маленьким дополнением.

В чем разница в сравнении с оригиналом

  • Написал несколько комментариев в файлах исх. кода.
  • Появился Рус перевод для сообщений на экране и в логе, вывод в лог был приспособлен для кодировки Unicode. Сами сообщения учащены, чтобы прогресс выполнения лучше отслеживался, и у пользователя не возникало мысли что программа зависла.
    Переключение на Анг доступно через аргумент ENG (например, "SREP.efi ENG"). Но, как можно догадаться, тогда вызов SREP нужно осуществить через командную строку в Shell. Разрешается передавать параметр ENG в .nsh.
  • Файл конфига больше не обязан иметь название 'SREP_Config.cfg'. Теперь патчер выбирает в качестве конфига первый найденный файл с расширением '.cfg'.
  • Добавил 9 новых команд: NonamePE, NonameTE, LoadGUIDandSavePE, LoadGUIDandSaveFreeform, UninstallProtocol, Compatibility, Skip, HandleIndex, UpdateHiiPackage.
    В каких случаях могут быть полезны - далее.
  • Добавил поддержку абстрактных знаков (regex) для использования в строке шаблона. Классы знаков доступны по ссылке.
  • По умолчанию, комбинация Patch - Pattern теперь заменяет все вхождения, а не только первое, которые соответствуют указанному шаблону.
    Старую реализацию Patch выделил в отдельную команду FastPatch.
    При неверном запуске SREP, Op Patch превращается в Op FastPatch и абстрактные знаки в шаблоне приводят к преждевременному выходу из программы.
  • Добавил игнорирование строк конфига включащие символ решетки "#". Применимо для написания комментариев в файле.
    Пример комментариев # Здесь выбираем FilterProtocol
    Op Compatibility
    389F751F-1838-4388-8390-CD8154BD27F8

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

  1. Скомпильте исп. файл сами или загрузите со страницы релизов. Текущая версия - 0.2.x.
  2. Распакуйте файл на накопитель и сделайте его загрузочным.
  3. Создайте новый или скопируйте готовый конфиг в корень.
  4. Запустите.

Синтаксис для каждой из новых команд (с примерами)

Операция в "<...>" опциональна. Некоторые команды не требуют доп. параметров для работы (например, Exec).

Op Название команды
    <GUID или Cтрока или Число>
    # Команды LoadGUIDandSaveFreeform и UpdateHiiPackage поддерживают до 2 "параметров".
    # В зависимости от наличия второго, выбирается режим работы.
    <GUID или Cтрока или Число>
<Op Patch> или <Op FastPatch> 
    Аргумент 1
    Аргумент 2
    Аргумент 3
<End>

# Если драйвер ещё не в памяти.
<Op Exec>

Значение

OpName : NonamePE, LoadGUIDandSavePE, UninstallProtocol, Compatibility, Patch и остальные
GUID : GUID драйвера или протокола для поиска
Строка : Название модуля из UI Section
Число : Кол-во строк к пропуску для Op Skip, или EFI_HANDLE ID для Op HandleIndex, или пользовательский размер для UpdateHiiPackage
Аргумент 1 : Offset, Pattern, RelNegOffset, RelPosOffset для Patch
Аргумент 2 : Модификатор для Аргумент 1 (например, HEX шаблон)
Аргумент 3 : HEX патч

Добавленные команды

LoadGUIDandSavePE, LoadGUIDandSaveFreeform

Загружают PE, RAW, FREEFORM секции модуля из Firmware Volume по GUID. Применимо когда у модуля нет имени, Op LoadFromFV не использовать. Редко для патчей, так как в память загружается вторая копия модуля.
Т.е. первая команда нужна для особых случаев когда у App, запуск которого инициирует вход в биос, нет секции UI.
Что делает команды менее бесполезными, это сохранение секции модуля как файл на флешку. Может выручить когда ни один способ дампа не работает.
Формат GUID как в UEFITool.

LoadGUIDandSavePE
Op LoadGUIDandSavePE

# Это SetupUtility
FE3542FE-C1D3-4EF8-657C-8048606FF670
LoadGUIDandSaveFreeform
Op LoadGUIDandSaveFreeform

# Это SmallLogo с section subtype RAW. GUID от File.
63819805-67BB-46EF-AA8D-1524A19A01E4


Op LoadGUIDandSaveFreeform

# Это setupdata. У section subtype FREEFORM есть свой GUID, его тоже нужно указать, даже если они одинаковы.
FE612B72-203C-47B1-8560-A66D946EB371
FE612B72-203C-47B1-8560-A66D946EB371

NonamePE, NonameTE

Используют одну и ту-же функцию, с различием в лишь одном передаваемом значении.

  • NonamePE - ищет секцию PE по GUID;
  • NonameTE - ищет секцию TE по GUID.
    Синтаксис как у LoadGUIDandSavePE, но у этих команд область поиска RAM, вместо FV.

Работает таким образом, что сначала находится модуль в FV, но не RAM, соотв. введенному GUID. Вместо имени этого модуля, в отдельную переменную кладется его размер. Затем создается массив из модулей уже попавших в RAM. И размер каждого из этих модулей сравнивается с сохраненным значением, в упомянутой отдельной переменной. При совпадении цикл сравнения останавливается, функция возвращает ImageInfo текущего модуля.

В этом подходе есть недостаток, при котором в случае наличия модулей одинакового размера, будет выбран первый по порядку.

UninstallProtocol

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

Compatibility

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

Выдача рекомендуемых
Recommended protocols are:
EFI_FIRMWARE_VOLUME_PROTOCOL_GUID(good for HP Insyde Rev.3)
389F751F-1838-4388-8390-CD8154BD27F8
 
EFI_LEGACY_BIOS_PROTOCOL_GUID(good for Aptio 4, Insyde Rev.3)
DB9A1E3D-45CB-4ABB-853B-E5387FDB2E2D
Если Compatibility не использована вообще, SREP работает как обычно. Таким образом организована поддержка Insyde Rev. 3.

HandleIndex

Находит загруженные дескрипторы в RAM по их ID из handle dump, который можно получить через команды UEFI shell, а также в SREP.log при первом запуске HandleIndex со случайным параметром.

Skip

Дает возможность пропускать указанное число команд (считаются только Op), если прошлая завершилась с успехом.

UpdateHiiPackage

Позволяет найти начало HII данных после EFI_HII_PACKAGE_LIST_HEADER, которые выгружены в HII Database у определенного модуля.

UpdateHiiPackage
Op UpdateHiiPackage

# Это Setup package в HII Database.
899407D7-99FE-43D8-9A21-79EC328CAC21

# Это переназначение размера package для последующих операций. 
A000000

Todos

[x] Regex Matching
[x] Batch Replacement
[x] Uninstall Protocol
[x] Insyde Rev. 3 Support
[x] Rework on-screen and log outputs (make separate IFR package for each language)
[ ] ?

Версии 0.1.6 и 0.1.7 удалены со страницы релизов из-за бага. Он заключался в том, что перед каждой следующей командой патча (Op Patch), массив хранящий смещения найденных вхождений шаблона не очищался. Поэтому самый последний "Op Patch" всегда заменял абсолютно все вхождения, которые были найдены за сеанс работы SREP. Релиз 0.2.1 Удален из-за бага Op Patch, при котором абстрактные символы в строке шаблона рассматривались как неподдерживаемые.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Contributors

No contributors

Languages

  • C 100.0%