- Уроки эникейщика: загрузочная флешка UEFI, Часть 3
- BootMgFW
- PreLoader
- Тем не менее
- Как восстановить загрузчик EFI Windows?
- Чтобы было понятно…
- Данные конфигурации загрузки Windows
- Как восстановить загрузчик EFI Windows 10: в лоб.
- Возможные ошибки
- Как восстановить загрузчик EFI Windows 7/10: пересоздаём EFI.
- Ошибка вновь появляется…
Уроки эникейщика: загрузочная флешка UEFI, Часть 3
В предыдущей части статьи мы определили, вероятно, главную проблему, возникающую при создании загрузочной флешки (да и любого другого загрузочного носителя) для компьютеров с интерфейсом UEFI . Это протокол Secure Boot , предназначенный для защиты ПК от загрузочных вирусов . На большинстве компьютеров он позволяет запускать лишь те EFI-приложения, которые подписаны компанией MicroSoft . Как и было обещано, в этой части мы рассмотрим существующие способы обхода этой защиты без её ручного отключения в меню настройки UEFI (которое не всегда бывает простым или хотя бы возможным).
Стоит сразу уточнить — в статье не будет никаких грязных хаков и эксплуатации уязвимостей . Всё по фен-шую, с соблюдением правил, и только так, как позволено стандартами.
Итак, для начала нам потребуется EFI-приложение, подписанное MicroSoft . Если у нас его не будет, то проверку Secure Boot (если он включён) мы провалим ещё до того, как получим возможность обойти её. Если конкретно, нам нужен загрузчик — программа, предназначенная для запуска операционных систем и других загрузчиков. С его помощью мы скажем Secure Boot «успокойся», и будем запускать уже то, что нам надо. Какие же варианты у нас есть?
BootMgFW
Какой загрузчик MicroSoft подписала в первую очередь? Конечно, свой собственный. BootMgFW это EFI-версия загрузчика BootMgr , предназначенного для запуска ОС Windows Vista и более новых. Secure Boot поддерживается начиная с версии 6.2 (для Windows 8). Этот вариант гарантированно запустится на любом ПК, совместимом с Windows 8/8.1/10 , но.
Но функционал его невелик. Как и BootMgr для BIOS, самостоятельно он умеет запускать только Windows (WinPE в нашем случае) и программу тестирования памяти от MicroSoft. Однако BIOS-версия к тому же умеет передавать управление многим другим загрузчикам, а так же сохранённым в виде файла MBR или PBR. В UEFI-версии нет похожей функции , видимо, в MS посчитали встроенный функционал UEFI более чем достаточным для организации мультизагрузки. Не сказать, что они так уж неправы, но мультизагрузочную флешку с таким подходом не сделать. Если, конечно, вам нужно что-то кроме разных версий WinPE и MS memtest .
Что это значит? Это значит, нам понадобится что-то другое, с большим функционалом и способное запускать любые EFI-приложения. Например, GRUB . Или rEFInd . Вот только они не подписаны Майкрософтом, как из-за ограничений лицензий, под которыми они распространяются, так и из-за общей нецелесообразности — ведь их создала не MS, и подписывать новые версии (а значит, и нести ответственность за их безопасность), выходящие чуть ли не ежедневно, да ещё и разные от разных разработчиков, она не станет. Казалось бы, всё, тупик. Однако полноценная поддержка Secure Boot интересна отнюдь не только нам — разработчики ОС на базе Linux и другого свободного ПО тоже в ней заинтересованы. Поэтому сейчас мы имеем ещё два варианта.
PreLoader
Как видно из названия, это не загрузчик, а предзагрузчик. Фонд Linux уговорил MS подписать его. После запуска он переопределяет встроенную в UEFI функцию проверки запускаемых файлов, и берёт на себя эту работу. Критерием доверенности файла для PreLoader является не цифровая подпись, а контрольная сумма ( хеш ). Автоматически он запускает файл Loader.efi рядом с собой, а если хеш этого файла ему неизвестен, то запускает программу HashTool (если она есть), которая позволяет сделать файл доверенным на этом компьютере. И только на этом — добавленные пользователем хеши будут храниться в NVRAM, в области MOK ( Machine Owner Key , ключи владельца машины). Когда хеш будет добавлен, и пользователь выйдет из HashTool, будет снова предпринята попытка запустить Loader.efi, и так до победного.
Для наших целей, однако, PreLoader мало пригоден, поскольку для каждого EFI-приложения придётся добавлять хеш. Это не только отнимает время, но и в целом некрасиво. Однако советую запомнить то, что PreLoader переопределяет функцию проверки файлов, мы к этому ещё вернёмся. А пока рассмотрим.
Тоже предзагрузчик, и это тоже понятно из названия, если вы знаете английский. Разработан бывшим сотрудником компании Red Hat, и там не совсем чистая история с подписыванием. Впрочем, это неважно. Важно то, что он позволяет использовать EFI-приложения, подписанные Red Hat , Canonical , Kaspersky Lab и многими другими компаниями. Их сертификаты хранятся в «теле» самого Shim. Это уже лучше предыдущих вариантов — можно без лишних телодвижений запускать популярные дистрибутивы Linux. Если же подпись запускаемого файла неизвестна, то будет запущена программа MOKManager (если она есть), которая позволит выбрать файл сертификата для добавления всё в ту же MOK. Это позволяет нам сгенерировать свою пару самоподписанных сертификатов (инструкций много в сети), подписать все нужные EFI-приложения, после чего все движения по обходу Secure Boot на каждом компьютере сведутся к добавлению одного-единственного сертификата с помощью MOKManager. Согласитесь, этот вариант куда быстрее и изящнее, чем добавлять десятки хешей либо сертификаты от разработчиков всех нужных приложений. Тем более, что некоторые из нужных приложений никто и не думал подписывать.
Shim автоматически запускает файл Grubx64.efi (в x86-64 версии) или Grubia32.efi (в x86-32 версии). Обескураживающее название, когда в качестве основного загрузчика используется НЕ GRUB 🙂
Тем не менее
Последний вариант, хоть и является, с кочки зрения автора, лучшим из рассмотренных, всё ещё не так удобен, как хотелось бы. Не лень подписывать каждое EFI-приложение, каждый загрузчик, каждую их новую версию? То-то же. Однако и это маленькое неудобство можно обойти. Как — узнаем в следующей части.
А пока на этом всё. Не забудьте поставить лайк и подписаться на канал.
Как восстановить загрузчик EFI Windows?
Как восстановить загрузчик EFI Windows 7 и Windows 10?
В этой статье мы попробуем восстановить загрузчик EFI для Windows 7/8/10. Чуть ранее мы уже разбирали восстановление загрузки для таблицы MFT на примере Windows 7. Сейчас же позволю себе сразу отметить, что повреждение загрузчика в нашем случае чаще всего (помимо прочего) вызывается:
- установкой второй операционной системы
- неправильными операциями по восстановлению системы (или неудачным её завершением)
- удалением неких данных из скрытых разделов
- битые секторы
- действием зловредов.
С помощью представленных инструментов можно будет попробовать восстановить загрузчик EFI, который отказывается загрузить систему из-за отсутствующего или битого файла конфигурации по адресу:
Скрытый диск:\EFI\Microsoft\Boot\BCD
Вот, кстати, его примерное содержимое из Heren’s BootCD:
Чтобы было понятно…
Структура разделов в таблице GPT на Windows, загруженной в режиме UEFI, чаще всего выглядит так:
- EFI – раздел ESP (Extensible Firmware Interface) – раздел, где хранится программное обеспечение с драйверами, обеспечивающими загрузку Windows;
- MSR – он же Microsoft Reserved – резервируемый во время установки Windows раздел; его вполне может и не быть на вашей машине
- Первичный раздел – том, где хранятся системные файлы: реестр, службы, системные утилиты, файлы настроек и т.д.
Windows 10 сюда добавляет ещё и диск Восстановления. По умолчанию (т.е. при установке Windows на НЕФОРМАТИРОВАННЫЙ диск), первые два раздела имеют чёткий объём. И потому по необходимости их легко вычленить, ориентируясь только лишь на размеры обоих. В Windows 7, например, это соответственно 100 Мб и 128 Мб. И это, как говорится, типовая конфигурация. Некоторые производители компьютеров создают разделы по своему усмотрению, например, засовывая туда среду восстановления Windows PE в файл winre.wim. Если вы обнаружили у себя такой файл, знайте, что именно он содержит в себе образ восстановления системы от производителя. Раздел EFI обязателен на GPT дисках с UEFI поддержкой. Когда компьютер включается, среда UEFI загружает загрузчик (EFI\Microsoft\Boot\bootmgfw.efi) из раздела EFI (ESP), передавая той контроль над загрузкой самой Windows. Нет раздела – нет загрузки.
Раздел же MSR на диске создаётся для облегчения обзора разделов и используется для системных операций (типа конвертации диска из простого в динамический). Это резервный раздел, которому Windows никогда не присваивает опознавательные знаки. И данных пользователя он не содержит. В Windows 10 размер раздела MSR – 16 Мб (в Windows 8 – 128 Мб), тип файловой системы – NTFS.
Данные конфигурации загрузки Windows
О том, что файл по указанному выше адресу EFI\Microsoft\Boot\BCD повреждён, вам может сообщить синий экран смерти BSOD с ошибкой следующего содержания:
Это означает, что данные в файле Boot Configuration Data не распознают конфигурацию загрузчика вашей Windows. Однако, пользователей, знакомых с утилитой восстановления загрузчика в MFT bcdedit.exe, в этот раз та не выручит. При попытке её запустить, пользователь увидит непривычное:
Мол, ни данных, ни самого устройства не существует. Причина одна: раз конфигурация загрузчика BCD в UEFI-режиме загрузки лежит в специальном разделе EFI:
efi раздел в Windows 7
efi раздел в Windows 10
…то наша утилита просто его не видит. Т.е. не видит сам загрузчик , а то и весь раздел . В общем, не спасают и традиционные средства восстановления, созданные на такой случай:
У вас тоже с ошибкой написано?
Как восстановить загрузчик EFI Windows 10: в лоб.
- выбираем загрузочное устройство, вызвав меню быстрой загрузки клавишами в зоне F или через BIOS
- загружаем с флешки с Windows 10 PE;
- выходим на командную строку, зажав Shift + F10 после появления окна Установка Windows
- как и в предыдущем режиме, нам нужно определиться со списком разделов компьютера. Далее я предполагаю, что жёсткий диск установлен в единственном экземпляре:
- обнаруживаем EFI раздел. Его размеры, повторюсь, невелики (100 Мб в W7 и W10), и он имеет файловую систему FAT32:
у меня EFI – это безымянный Том 3
- по умолчанию он скрыт, а значит не имеет буквы. Для дальнейшей работы она нам понадобится. Так что присваиваем букву прямо сейчас:
После закрытия программы отправляемся в этот раздел:
Здесь появляется небольшое отступление. Этот путь существует по умолчанию, и причин, чтобы консоль вам отказала в переходе в указанную папку, нет. Если ошибка появилась, см. абзац Возможные ошибки или сразу переходите к следующей части Как восстановить загрузчик EFI Windows 7/10: пересоздаём EFI.
меня ошибка Отказано в доступе настигла сразу
- создаём заново загрузочный сектор одноимённого раздела:
- используя утилиту bcdedit.exe создадим хранилище заново, копируя загрузочные файлы из системной папки:
/f ALL – скопирует загрузочные файлы (и UEFI и BIOS режимов) для возможной поддержки загрузки на EFI и BIOS;
/l ru– ru – укажет на языковую локаль системы, которая будет использоваться, т.е. на русскую. Если всё проходит без ошибок, пропускайте абзац.
- выполняем последовательно следующие команды:
Перезагружаемся в Windows 10 на жёстком диске и проверяем.
Возможные ошибки
Администратора здесь могут подстерегать некоторые ошибки. Среди них наиболее часто появляются:
- BFSVC Error: Can not open the BCD template store. status – [c000000f] –
нужно проверить вводимые команды и путь к хранению системных файлов Windows; иногда ошибка появляется из-за неправильного указания языковой локали; - BFSVC Error: Error copying boot files from Last Error = 0x570 – ошибка является следствием самого явления, что Windows не загружается. Вероятно, плохие сектора появились не только в разделе загрузки EFI, но и на диске с системой; прогоните жёсткий диск утилитой chkdsk.exe тут же из консоли командой
где с – диск с системой
- Отказано в доступе – причин на то множество: от наличия плохих секторов до неверно выставленного режима загрузки (стоит Legacy вместо UEFI; нужно – только UEFI) с флешки. Однако. UEFI не был бы UEFI, если бы всё проходило вот так гладко: то, что раздел EFI не подпускает к своим файлам – это, скорее закономерность, чем исключение. Так что, если в доступе вам отказано, я советую вам просто сначала удалить сам раздел EFI (а он такой нам больше не нужен), воссоздать его заново с единственно необходимой для его работы директорией, а затем уже положиться на ремонтную bootrec, позволив ей завершить работу. Так что, если необходимость возникла, продолжаем работу с момента появления отказа команде
Как восстановить загрузчик EFI Windows 7/10: пересоздаём EFI.
Самое главное здесь – не промахнитесь с разделом/лами и не удалите тот из них, в котором хранятся данные Windows и ваша информация. Итак, раз bootrec.exe попасть в нужный нам раздел не смогла, раздел убираем . Для этого нам будет нужно вернуться в diskpart.exe, снова определиться с разделами и выбрать тот, что на 100 Мб. Возвращаемся в ремонтную консоль:
И начинаем заново:
можно проверить результат:
У нас осталось некоторое нераспределённое пространство, в котором мы заново создаём удалённый только что раздел:
Но при попытке присвоить применявшуюся ранее букву Y, консоль ответила отказом (надо было её перезапускать). Я присвою разделу букву Z:
Подготовим почву для bootrec.
- копируем туда файлы из состава среды EFI из папки установленной Windows (С – буква диска с системными файлами Windows):
- пусть bootrec с вашей флешки проверит диски на предмет системных файлов Windows:
Никуда они не денутся, если вы их случайно не удалили, или они не попали в зону бэд-секторов. Остаётся…
- … заставить написать “правильный” файл BCD и прочие “конфиги”:
Выключаем компьютер, флешку вынимаем и включаем машину. Ждём появления Windows. Дайте ей загрузиться до Рабочего стола и проверяйте, всё ли на месте.
Ошибка вновь появляется…
Не беспокойтесь. Если вы вникли в процесс, и все команды вводили осознанно и корректно, ситуация, скорее всего, уже исправлена. Просто следует учесть особенности своеобразных фильтров безопасности, принятых для режима UEFI, и не путать буквы дисков. Их можно пройти, проделав такие шаги:
- Разбудите BIOS:
– снимите крышку боковую компьютера или нижнюю ноутбука
– отключите жёсткий диск (отключив оба шлейфа на “стационарнике” или вынув из разъёмов на ноутбуке)
– включите машину, дождавшись ошибки загрузки;
– выключив компьютер, подключите жёсткий заново и снова, включив компьютер, проверьте; - проверьте UEFI меню платы компьютера на предмет правильной очерёдности разделов загрузки; первым должен стоять, как вы поняли, именно EFI;
- убедитесь, что метка Загрузочный стоит только напротив EFI раздела, и ни у какого больше. Проверить и исправить ситуацию из Windows PE, к сожалению, не получится. И для этого придётся воспользоваться дополнительными инструментами в виде загрузочной флешки. Сделайте это любым удобным вариантом из статьи Метка диска Загрузочный: как добавить или удалить?