Перейти к содержимому

Как собрать bios из обновления

  • автор:

Моддинг UEFI BIOS, инкапсуляция SLIC таблицы.

Вкратце поясню, о чем идет речь, что такое SLIC (Software Licensing Description Table) таблица. Таблица SLIC 2.1 нужна для оffline OEM активации Windows 7. Интеграция SLIC-таблицы в BIOS используется для того, чтобы реализовать механизм OEM-активации операционной системы Windows 7 точно так же, как это делают OEM-партнеры Microsoft для активации предустановленных копий Windows без проверки. Данный метод позволяет offline активировать систему при соблюдении трех условий: использование специального OEM-ключа и OEM-сертификата, а также наличие SLIC-таблицы в BIOS компьютера.
Сама по себе процедура прошивки SLIC-таблицы в BIOS вполне законна (Microsoft).
Таблица SLIC 2.1 состоит из трех частей, кроме заголовка (ACPIHeader) она содержит публичный ключ (PublicKey) и маркер версии Windows 7 (WinMarker), размер таблицы 374 байт. Соответствующие таблице серийный номер и сертификат дожны быть прописаны в Windows 7. Все три составляющие и дают оффлайн активацию.
Жесткой привязки OEM-ключа к SLIC-таблице и сертификату нет. Ключ привязан только к редакции Windows и позволяет активировать как x86-, так и x64-версии ОС. Файлы-сертификаты и SLIC-таблицы взаимосвязаны, и для успешной активации оба компонента должны быть от одного OEM-партнера.

Disclaimer of Warranties (отказ от ответственности).

  1. Инкапсулировать таблицу SLIC в BIOS материнской платы. Там же должен находиться код, который при загрузке перенесет таблицу в ОЗУ. Такой способ применяют OEM производители компьютеров при продаже моделей с предустановленной Windows 7.
  2. Заменить стандартный UEFI загрузчик Windows 7 своим. При загрузке он должен перенести таблицу в ОЗУ и затем или передать управление стандартному загрузчику, или продолжить загрузку сам. Не требуется манипуляций с BIOS, таблица в ОЗУ появляется до загрузки системы.
  3. Различные активаторы, помещающие таблицу SLIC в ОЗУ, и работающие из под самой Windows 7. Самый ненадежный и не всегда срабатывающий способ, но самый распостраненный.

Короткое отступление, обьяснение причины, как я ее понял:
Параметры меню, относящиеся к загрузке системы, у современных UEFI BIOS хранятся в области NVRAM на той же микросхеме BIOS. Возможно установщик WindSLIC при внесении информации о новом загрузчике испортил эту область, давно не обновлялся, что то сделал не так. BIOS перестал понимать как загружаться и плата «окирпичилась», способов обнулить область NVRAM при нестартующем BIOS нет.

Почитав форум по WindSLIC (чего зараннее не почитал. ), узнал что я не первый и не единственный «окирпиченный», пришла пора плату «оживлять»…

Если что-то пошло не так.

Любые манипуляции с BIOS потенциально опасны, после перепрошивки возможно вместо рабочей материнской платы получить «кирпич». Я рекомендую озаботиться этим сразу.

Технология ASUS USB BIOS Flashback.

На некоторых материнских платах с процессорами Intel в составе южного моста присутствует дополнительный контроллер. Он обеспечивает работу технологии удаленного мониторинга, диагностики и управления «Inter vPro» даже в ситуациях, когда компьютер выключен или на нем не работает операционная система (дежурное напряжение должно быть подано). Инженеры ASUS научили этот контроллер еще и обновлять BIOS. На сайте ASUS появление этой технологии обьяснено так:

Покупая набор новых комплектующих, может возникнуть ситуация, что процессор настолько новый, что материнская плата его еще «не знает». Раньше бы для обновления BIOS потребовался бы старый процессор или пришлось бы тратить время на поход в сервисный центр. Но теперь с появлением технологии ASUS USB BIOS Flashback проблема решается гораздо проще.
USB BIOS Flashback – самый простой способ обновления BIOS на материнских платах ASUS. Для обновления теперь достаточно только USB-накопителя с записанным на него файлом BIOS и блока питания. Ни процессор, ни оперативная память и другие комплектующие теперь не нужны.

  1. Первым делом готовим флешку, форматируем ее в FAT16, FAT32. Некоторые платы поддерживают и NTFS, необходимо уточнить по руководству пользователя или сайту техподдержки.
  2. Загружаем новейший BIOS с сайта техподдержки ASUS.
  3. Переименовываем файл предопределенным коротким именем, имя необходимо уточнить по руководству пользователя, записываем на флешку.
  4. Подключаем разьемы блока питания (если они еще не подключены), основной 24-пин и доподнительный питания процессора 8-пин к материнской плате, сам процессор не требуется.
  5. Подключаем USB накопитель в разъем USB BIOS Flashback/ROG Connect (для плат на Intel X79 – это разъем USB 2.0 белого цвета, для плат на других чипсетах – это разъем USB 2.0, отмеченный цветом и надписью USB BIOS Flasback/ROG Connect на панели Q-Shield), нажимаем и удерживаем кнопку 3 секунды до запуска световой индикации.
  6. Ждем завершения световой индикации кнопки USB BIOS Flashback/ROG Connect, которое означает, что обновление успешно выполнено.
  1. Мы рекомендуем вам использовать USB 2.0 флешку для сохранения последней версии BIOS для лучшей совместимости и стабильности процедуры;
  2. Подключите USB устройство в порт USB Flashback;
  3. Выключите компьютер;
  4. Нажмите кнопку BIOS Flashback в течение 3 секунд, пока Flashback индикатор не моргнет 3 раза. Это будет означать, что BIOS Flashback приступил к работе;
  5. Подождите, пока индикатор не потухнет, что будет означать, что обновление BIOS завершено;
  6. не отключайте внешний диск/устройство, не запускайте компьютер, не нажимайте на кнопку CLR_CMOS, пока выполняется обновление BIOS, в противном случае, обновление будет прервано;
  7. Если процесс прервался, повторите шаги выше еще раз;
  8. Если индикатор моргает в течение 5 секунд и после горит постоянным белым светом, это означает, что BIOS Flashback произвел операцию неверно. Это может быть вызвано неправильной установкой USB устройства и неправильным наименованием /форматом файла. Если это так, пожалуйста, перезагрузите систему;
  9. Обновление BIOS — это всегда риск. Если программа BIOS повредилась во время процесса и как результат ОС не запускается, пожалуйста, обратитесь к продавцу по месту покупки, чтобы сдать плату в сервисы ASUS;

ASUS CrashFree BIOS 3 utility.

  1. Выключите компьютер.
  2. Вставьте DVD в привод, или флешку в USB порт. Файл BIOS должен быть предварительно подготовлен и записан в корневой раздел.
  3. Включите компьютер, при невозможности загрузки утилита CrashFree запустится автоматически. Если она обнаружит файл BIOS с предопределенным именем, он будет обновлен автоматически. Плохо тут то, что трудно определить началось ли обновление, только по активности индикатора DVD. Флешки сейчас этим индикатором чаще всего обделены.
  4. После обновления BIOS выключите и включите компьютер, если обновление прошло удачно, нужно будет войти в BIOS и установить настройки по умолчанию.

Если ничего не помогло.

На материнских платах ASUS всегда рядом с микросхемой BIOS устанавливается разьем ISP (Internal System Programming). Прошивка ведется аппаратным программатором по протоколу SPI:

Программатор SPI с Ali у меня уже был, но здесь дело осложнилось тем, что микросхема BIOS W25Q128FW питается от 1,8V. Такие раньше программировать не приходилось, пришлось там-же на AliExpress дозаказать преобразователь уровней для него (лучше делать это заранее). У этого же продавца на всякий случай заказал и второй экземпляр того-же самого программатора.
Весь нужный комплект для перепрошивки BIOS программатором выглядит так:

Из самодельного здесь только кабель. Строго говоря его применение вовсе не обязательно, можно использовать отдельные проводочки, но раз я все равно заказывал 1.8V-adapter, одновременно заказал и десяток разьемов IDC2-10 (2мм). К кабелем работать значительно удобнее, да и стабильность и отказоустойчивость такого соединения выше.

Всегда по возможности использую "idiot proof", или защиту от дурака (и себя в том числе). Расположение первого вывода, чтобы не разглядывать платы и кабель каждый раз, маркировал красной краской. В неиспользуемые IDC гнезда на кабеле забил обрезки заточенных спичек.

Все действия по работе с SPI программатором производятся на обесточенной материнской плате. Именно со снятыми разьемами питания, наличие процессора, ОЗУ и т.д. некритично. Встречал совет вынимать даже батарейку CMOS, но это наверное перебор, я не вынимал.

Нам необходим файл BIOS в бинарном формате, поэтому от файла CAP необходимо отрезать 0x800 байт заголовка и сохранить получившийся файл с расширением ROM или BIN. Отрезать можно и руками в любом HEX редакторе, но возможность допустить ошибку тут все же присутствует, поэтому лучше использовать специализированную утилиту ASUS_BIOS_CAP_to_BIN.

Несмотря на «фирменное» название утилита отношения к программистам ASUS не имеет и написана на основе исходных кодов редактора FD44Editor-0.9.2 от Николая Шлея (aка CodeRush). Ее дополнительным преимуществом является дешифровка оригинального имени BIOS из бут-блока. При конвертации файла PRIME-X370-A-ASUS-4207.CAP утилита определяет его правильное имя PRX370A.

Читаем программатором и сохраняем текущую прошивку BIOS (хоть она и нерабочая, но чтение и сохранение должно стать инстинктом, да и мало ли, сравнить потом тоже интересно). Следующим действием стираем микросхему BIOS. Только теперь можно загрузить в программу-прошивальщик новую версию BIOS и прошивать. Ну а потом вынимаем программатор, отключаем шлейф от программатора (подключение к разьему ISP я оставил, мало ли), при необходимости дособираем материнку и подаем на нее питание. Затаить дыхание, скрестить пальцы (вставте свое по необходимости) и запустить.
У меня материнка запустилась сразу, ругнулась на неверную чексумму и сама вошла в BIOS. Осталось загрузить настройки по умолчанию и выйти, вторая загрузка прошла идеально.

Вот только теперь я добрался наконец до цели статьи, до моддинга UEFI BIOS с целью инкапсуляции SLIC таблицы. Все предыдущее было только преамбулой, довольно длинной, но необходимой.

  1. Полностью обесточить прошиваемую материнскую плату;
  2. Сначала соединить шлейф с программатором;
  3. Потом вставить программатор в USB разьем;

Внесение таблицы SLIC в BIOS.

Запускаем PhoenixTool, в нем активна одна верхняя строчка Original BIOS. Нажав справа кнопку с двоеточием загружаем BIOS в программу, формат CAP она понимает. Программа начинает анализ BIOS, и раскладку его на модули. В папке с оригинальным BIOS создается папка DUMP, в которой каждый модуль разложен в отдельный файл. Процесс анализа и разборки заносится в файл SLIC.log (очень подробно, размер файла после анализа 184429 байт).

Процесс довольно длительный, в статусном окне в это время высвечивается WORKING.

Новые UEFI BIOS от AMI уже подготовлены к инжекции таблицы OEM SLIC, в этом случае программа в конце разбора предупредит об этом:

  • Finished Extracting
  • LZMA compression method used
  • EFI / Insyde BIOS
  • Full SLIC table found in A1902AB9-5394-45F2-857A-12824213EEFB_896.ROM at 18A0
  • ‘SLIC’ string found in B1DA0ADF-4F77-4070-A88E-BFFE1C60529A_2022.ROM at C7F48
  • OEM/Table IDs identified are:
  • 1. A M I OEMSLIC
  • Complete SLIC (2.0) (A M I OEMSLIC ) (x1)
  • SLIC digital signature valid

Разбирать SLIC таблицу по Hex редактору сложно и требует навыка. Чтобы это упростить была написана утилита парсинга SLIC таблицы SlicView. Вырежем таблицу и сохраним под именем Slic.bin, затем загрузим в SlicView. Справа для примера SLIC таблица ASUS из каталога SLIC21 PhoenixTool. Заголовок:

Поле Modulus публичного ключа фиктивной таблицы содержит одни нули, ключа нет:

Поля OEM ID и OEMTableID маркера версии Windows пустые, поле Signature содержит одни нули, маркера нет:

Простая замена этого фиктивного SLIC на валидный от OEM производителя не проходит, в BIOS ASUS есть код его блокирующий. Программа PhoenixTool позволяет и заменить фиктивный SLIC и разблокировать его.

PhoenixTool, метод Dynamic

Для этого в программе предназначен метод Dynamic. Этот метод используется, если EFI уже содержит SLIC ACPITable (где-то в EFI) или он подготовлен к его инкапсуляции.
Программа сравнивает версию загружаемой SLIC таблицы и ее OEM и OEMTableID, присутствие таблицы в пространстве имен ACPI и соответствие имен с OEM и OEMTableID таблицы RSDT, при необходимости изменяет OEM и OEMTableID таблицы XSDT.

  • Начиная с версии 1.92 применение отчета программы RW Everything для UEFI BIOS не обязательно.
  • Начиная с версии 1.93 ALASKAAMI OEM/Table ID теперь всегда заменяется в соответствии с OEM/Table ID вшиваемого SLIC.

Вернемся к программе PhoenixTool, после анализа BIOS и разборки его на модули стал доступен выпадающий список Manufactured. Здесь надо выбрать производителя материнской платы. Дело в том, что у многих производителей есть свои фишки в плане внесения изменений в стандартный образец BIOS. PhoenixTool о многих знает и учитывает при внесении изменений в BIOS.
Например выбрав производителя ASUS, PhoenixTool использует метод, который разблокирует SLIC путем исправления кода (Блокировка ASUS EFI (тип 1) будет обнаружена в модуле A1902AB9-5394-45F2-857A-12824213EEFB, там же, где и фиктивная SLIC таблица).

Таким образом выбираем производителя -> ASUS, SLIC File -> ASUS, больше ничего не заполняем, выбираем Method -> Dynamic, нажимаем кнопку Go. Программа спросит, продолжать ли модифицировать BIOS без отчета RW Everything, соглашаемся.

Начнется корректировка файла BIOS, ждем, в конец файла SLIC.log программа будет продолжать дописывать операции с BIOS (размер файла после корректировки 557780 байт).
Через некоторое время PhoenixTool сообщит, что таблица SLIC успешно интегрирована в BIOS. Имя модифицированного файла BIOS соответствует имени изначального с добавлением префикса _SLIC и находится там-же.

Т.е программа заменила в BIOS фиктивный SLIC на нормальный, можно приступать к прошивке…

Итак BIOS со вшитой таблицей SLIC мы прошили, Для проверки запускаем программу SLIC_ToolKit_V3.2, если таблица SLIC доступна, программа это покажет:

Не тут-то было, программа не нашла SLIC таблицу, чтобы узнать в чем дело переходим на страницу «Advanced»:

Видно, что в разделах XSDT и RSDT присутствует сигнатура SLIC «ASUS_Notebook», но публичный ключ и маркер не доступны, очевидно PhoenixTool на этом BIOS не смог разблокировать код, переносящий их в ACPI таблицу.

PhoenixTool, метод NewModule

Ничего страшного, PhoenixTool поддерживает еще один вариант инкапсуляции SLIC таблицы в UEFI BIOS.
Для многих OEM-производителей существует стандартный способ добавления постоянных данных SLIC в прошивку Aptio предоставляемую AMI, вставляя их в качестве модулей EFI и передавая капсулу в капсулу с помощью своего закрытого ключа. Часть из этих ключей «утекли» в инет, и используя эти ключи метод New Module в PhoenixTool может имитировать описанную выше процедуру на современных прошивках ASUS.
Начинаем как и в первом случае, загружаем BIOS для анализа в PhoenixTool, после анализа выбираем производителя -> ASUS, SLIC File -> ASUS. После выбора Method -> NewModule станет доступна строка «Key File», где надо выбрать ключ. В PhoenixTool 2.66 он всего один, в PhoenixTool 2.73 добавлен еще один, какой выбирать, без разницы.

Начнется процесс интеграции SLIC таблицы в BIOS, в конце снова увидите репорт типа этого:

Т.е. фиктивный SLIC остался как и был с идентификатором A M I OEMSLIC, а публичный ключ и маркер с идентификатором _ASUS_Notebook вшиты отдельным EFI модулем.
Прошиваем и запустив SLIC_ToolKit_V3.2 проверяем:

Ну наконец то, программа нашла SLIC таблицу, чтобы узнать подробности переходим на страницу «Advanced»:

Разделы имеют нужный идентификатор и соответствуют друг другу, публичный ключ и маркер также соответствуют идентификатору и доступны системе, SLIC Status — Validated. Теперь Offline активация Windows 7 пройдет успешно.
На этом можно было бы и остановиться, но у меня остался осадок. Дело в том, что в BIOS находится два разных идентификатора, A M I OEMSLIC и _ASUS_Notebook. И хотя первый не используется, люблю что бы все было по феншую и желательно сделать их одинаковыми.
Это несложно, берем BIOS, который мы подготовили методом Dynamic, и накатываем поверх ту же SLIC таблицу методом NewModule. Или иными словами применяем два метода Dynamic и NewModule последовательно к одному и тому же BIOS.
Если загрузить для контроля созданный таким образом файл PRIME-X370-A-ASUS-4207_SLIC.CAP в PhoenixTool, после анализа он сообщит:

В системе такой BIOS ничем не отличается от предыдущего.
Но даже такая SLIC таблица меня не устроила. Дело в том, что SLIC таблица ASUS имеет идентификатор _ASUS_Notebook, а у меня Desktop, никакой не Notebook. Как то странно выглядит процессор ноутбука с 8 ядрами и 16 потоками. Поэтому идентификатор я взял другой, не ноутбучный. Для этого надо всего лишь выбрать SLIC таблицу другого производителя (но Manufactured по прежнему ASUS).

PhoenixTool, метод DMI

    С помощью инструмента Universal BIOS Backup ToolKit создать копию BIOS вашего компьютера с заполненной областью DMI. У BIOS скачанных с сайта производителя эта область отсутствует и фирменные прошивальщики из BIOS (EZFlash 3) в эту область не пишут. При попытке выбрать метод DMI для такого BIOS получите сообщение:

    Module. При попытке применить этот метод, PhoenixTool у меня вылетает с ошибкой:

Все действия по перепрошивке вариантов моддингового BIOS я производил в помощью программатора SPI. Сначала по необходимости, ну а затем по удобству, грех не воспользоваться уже подключенным и настроенным соединением. Но обычно так не делают, это форс-мажор, обычно пользуются программным флешером, немного о них.
О флешерах из под Windows говорить не буду, считаю ненадежным баловством, хотя вроде и удобно, не пользовался. Не менее удобно использовать встроенный в UEFI BIOS ASUS программный флешер EZFlash 3. Он выполнен как модуль EFI, пользуется всеми преимуществами взаимодействия с другими модулями EFI (поиск и распознавание дисков, работа с файловыми системами). Но есть один минус, этот флешер работает только с форматом САР, выше я уже кратко рассказывал что это такое. Добавлю что в заголовок UEFI Capsule входит зашифрованная цифровая подпись изготовителя с контрольной суммой BIOS. А т.к. при моддинге мы вносим изменения в бинарную прошивку контрольная сумма меняется и цифровая подпись становится недествительной, EZFlash 3 просто откажется прошивать такой BIOS.
Интересная особенность по прошивке BIOS есть у некоторых плат для процессоров Intel и поддержкой технологии Intel vPro, это технология BIOS Flashback. По сути в южный мост встроен аппаратный программатор с програмным флешером управляемым одной кнопкой. Такие платы встречаются не часто, я в руках не держал.
Выход один, преобразовать САР в ВIN (отбросить заголовок UEFI Capsule) и прошить подходящим программным флешером с загрузочной USB флешки. Их много разных для разных операционных и файловых систем, но лучше использовать такой, работоспособность которого неоднократно проверена в инете на вашей серии материнских плат, а еще лучше от самого производителя материнской платы. Для ASUS это Bupdater, рекомендуется в руководстве пользователя материнки, работает из под DOS, выше при описании метода DMI я уже говорил о нем.
Для линуксоидов выбора особого нет (в смысле он им и не особо нужен), это встроенный программный флешер Flashrom. Он имеет поддержку более 200 типов южных мостов, поддержку множества самых разных аппаратных программаторов, входит в репозитории многих популярных сборок Linux. Программа постоянно развивается и обновляется.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *