Skip to content

noteMASTER11/SmokelessRuntimeEFIPatcher-RUS

 
 

Repository files navigation

SREP на Русском

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

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

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

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

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

Подробный пошаговый разбор сценария выполнения и рекомендации для .nsh находятся в WorkingProcess.md. Инструкции по настройке окружения и сборке проекта собраны в Building.md.

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

Операция в "<...>" опциональна.

Op OpName
    GUID
    # Команда LoadGUIDandSaveFreeform поддерживает до 2 модификаторов, но остальные команды только 1.
    # В зависимости от наличия второго GUID, выбирается режим работы.
    <GUID>
<Op Patch>
    Argument 1
    Argument 2
    Argument 3
<End>

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

Значение

OpName : Patch, LoadGUIDandSavePE, NonamePE, UninstallProtocol, Compatibility и остальные
GUID : GUID драйвера для поиска или протокола
Argument 1 : OFFSET, PATTERN, REL_NEG_OFFSET, REL_POS_OFFSET
Argument 2 : Модификатор для Argument 1 (например, HEX шаблон)
Argument 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.

Skip

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

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)
[ ] ?
  • Regex и Batch Replacement реализованы в tag 0.1.6.
  • UninstallProtocol и Insyde Rev. 3 Support реализованы в tag 0.1.7.
  • Текстовый вывод переработан в tag 0.2.0.

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

About

Fork

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 97.6%
  • Shell 2.4%