Как использовать OAuth2 со Spring Security в Java
Javaican 14.05.2025
Протокол OAuth2 часто путают с механизмами аутентификации, хотя по сути это протокол авторизации. Представьте, что вместо передачи ключей от всего дома вашему другу, который пришёл полить цветы, вы. . .
Анализ текста на Python с NLTK и Spacy
AI_Generated 14.05.2025
NLTK, старожил в мире обработки естественного языка на Python, содержит богатейшую коллекцию алгоритмов и готовых моделей. Эта библиотека отлично подходит для образовательных целей и. . .
Реализация DI в PHP
Jason-Webb 13.05.2025
Когда я начинал писать свой первый крупный PHP-проект, моя архитектура напоминала запутаный клубок спагетти. Классы создавали другие классы внутри себя, зависимости жостко прописывались в коде, а о. . .
Обработка изображений в реальном времени на C# с OpenCV
stackOverflow 13.05.2025
Объединение библиотеки компьютерного зрения OpenCV с современным языком программирования C# создаёт симбиоз, который открывает доступ к впечатляющему набору возможностей. Ключевое преимущество этого. . .
POCO, ACE, Loki и другие продвинутые C++ библиотеки
NullReferenced 13.05.2025
В C++ разработки существует такое обилие библиотек, что порой кажется, будто ты заблудился в дремучем лесу. И среди этого многообразия POCO (Portable Components) – как маяк для тех, кто ищет. . .
Паттерны проектирования GoF на C#
UnmanagedCoder 13.05.2025
Вы наверняка сталкивались с ситуациями, когда код разрастается до неприличных размеров, а его поддержка становится настоящим испытанием. Именно в такие моменты на помощь приходят паттерны Gang of. . .
Создаем CLI приложение на Python с Prompt Toolkit
py-thonny 13.05.2025
Современные командные интерфейсы давно перестали быть черно-белыми текстовыми программами, которые многие помнят по старым операционным системам. CLI сегодня – это мощные, интуитивные и даже. . .
Конвейеры ETL с Apache Airflow и Python
AI_Generated 13.05.2025
ETL-конвейеры – это набор процессов, отвечающих за извлечение данных из различных источников (Extract), их преобразование в нужный формат (Transform) и загрузку в целевое хранилище (Load). . . .
Выполнение асинхронных задач в Python с asyncio
py-thonny 12.05.2025
Современный мир программирования похож на оживлённый мегаполис – тысячи процессов одновременно требуют внимания, ресурсов и времени. В этих джунглях операций возникают ситуации, когда программа. . .
Работа с gRPC сервисами на C#
UnmanagedCoder 12.05.2025
gRPC (Google Remote Procedure Call) — открытый высокопроизводительный RPC-фреймворк, изначально разработанный компанией Google. Он отличается от традиционых REST-сервисов как минимум тем, что. . .
Привет друзья! В сегодняшней статье мы с вами создадим заново загрузчик Windows 7. В каких случаях это может пригодится. К примеру у вас не загружается Windows 7 и выдаёт ошибки, связанные с неисправностью загрузчика, например: «An operating system was not found» (Операционная система не найдена), BOOTMGR is missing. Press ctrl+alt+del, NTLDR is missing при загрузке Windows 7. А может вы перенесли Windows 7 с жёсткого диска на твердотельный накопитель, но система не стартует с SSD и выводит ошибку или показывает чёрный экран. Вы пытаетесь восстановить загрузку операционной системы стандартными командами, но у вас это не получается. В таких случаях нужно удалить и затем создать заново скрытый раздел — System Reserved (Зарезервировано системой, объём 100 МБ), именно на этом разделе находятся файлы загрузки Windows 7.
Создание загрузчика Windows 7 заново
{banner_google1}
Автор — Владимир.
При установке Windows 7 на ноутбук или компьютер с обычным BIOS (жёсткий диск MBR), автоматически создаётся скрытый раздел System Reserved (Зарезервировано системой, объём 100 МБ), назначение которого — хранить и защищать файлы загрузки операционной системы. Данный раздел всегда имеет атрибуты: (Активен, Система, Основной раздел), и с него происходит запуск операционной системы, установленной на вашем компьютере.
Если данному разделу присвоить букву диска и в параметрах папок (вид) установить параметры «Показывать скрытые файлы» и снять галочку с параметра «Скрывать защищённые системные файлы», то внутри вы увидите папку «Boot» (содержащую хранилище конфигурации загрузки файл — BCD), и менеджер загрузки файл «bootmgr».
Для успеха нашего дела, вспомним механизм загрузки Windows 7 и поможет нам программа BOOTICE. В первую очередь, после включения компьютера, управление получает подпрограмма BIOS, которая производит проверку на работоспособность всех комплектующих системного блока, затем БИОС смотрит в своих настройках приоритетное для загрузки устройство (жёсткий диск, флешка, DVD-диск) и найдя такое (к примеру жёсткий диск) считывает с него загрузочную запись MBR (Windows 7 обычно устанавливается на диск разметки MBR). MBR располагается в первом секторе загрузочного диска, имеет размер 512 байт, и содержит в себе программный код NT 6.x,
который выполняет поиск активного раздела (Active), с которого может осуществляться загрузка операционной системы, данный активный раздел называется PBR (Partition Boot Record) и имеет свою загрузочную запись Bootmgr.
После этого управление переходит менеджеру загрузки файлу «bootmgr», который запускает файл winload.exe Windows 7. Что такое winload.exe? Операционная система (в нашем случае Windows 7) это программа и чтобы она заработала (стала загружаться) необходимо запустить исполняемый файл OS: winload.exe или winload.efi. Запускает эти файлы загрузчик. Загрузчик это маленькая программа. Файл winload.exe запускает MBR-загрузчик, а файл winload.efi запускает EFI-загрузчик. Windows 7 в большинстве случаев установлена на диск с MBR загрузчиком.
{banner_google1}
Загрузка Windows 7 происходит в такой последовательности, менеджер загрузки файл «bootmgr» обрабатывает имеющуюся информацию в хранилище загрузки (файле BCD), а это — меню, время отображения, список операционных систем (если их несколько) и так далее, еcли данные корректные, то следует загрузка операционной системы. Но! Если хоть один из упомянутых мной файлов (bootmgr или BCD) окажется некорректным или вовсе будет отсутствовать, то проблемы при загрузке системы нам обеспечены. Часто бывает, что целостность данных файлов бывает нарушена в силу каких-либо причин (неосторожные действия пользователя, установка менеджеров загрузки сторонних разработчиков, вирусы и т.д), в этом случае стандартные действия по восстановлению загрузчика могут не помочь и тогда лучше всего удалить этот раздел полностью, затем форматировать и создать файлы загрузки заново. Как это можно сделать.
Удаляем скрытый раздел System Reserved (Зарезервировано системой, объём 100 МБ) и создаём его заново с помощью встроенной в систему утилиты командной строки diskpart
Загружаемся с установочной флешки Windows 7. Если не найдёте ISO-образ семёрки, то можете использовать загр. флешку Windows 8.1 или Win 10.
В начальном окне установки системы открываем командную строку клавиатурным сочетанием Shift+F10.
Вводим последовательно команды:
diskpart
lis vol (эта команда отображает буквы, номера, метки, размер и файловую систему. Буква раздела 100 мб (С:). Том 1. Буква раздела с установленной Windows 7 — (D:).
sel vol 1 (выбор тома с которым будем работать — 100 мб (С:). Том 1)
del vol (удаляем том 100 мб).
после удаления тома на диске появилась неразмеченная область 100 мб.
creat par prim (создаём основной раздел в этой неразмеченной области)
format fs=ntfs (создаём на разделе файловую систему NTFS)
assign letter С (присваиваем созданному разделу букву С)
activ (делаем раздел активным)
exit (выходим из diskpart)
bootsect /nt60 C: /mbr (данная команда записывает на жёсткий диск нужные коды PBR (Bootmgr) и MBR (NT 6.x))
bcdboot D:\windows /s C: (создаём загрузчик для Windows 7, находящийся на (D:), расположение загрузчика (С:))
Файлы загрузки успешно созданы.
Все загрузочные файлы Windows 7 находятся в папке Boot, которая, как правило, расположена на диске С:. Однако, папка надежно спрятана, чтобы наши шаловливые ручки до нее не дотянулись. Не удивительно, от содержимого папки зависит, загрузится ли Windows или нет.
Однако бывают ситуации, когда изменить метод загрузки Windows 7 очень хочется. Например, при работе с драйверами без цифровой подписи может понадобится такая программа, как ReadyDriverPlus. Для работы этой программе нужно указать путь к папке C:\Boot. Вы заходите на диск C: и…в упор эту папку не наблюдаете. Ее там нет, просто шаром покати. И как же ее найти?
Есть два простых варианта, рассматриваемых далее.
Отображение скрытых папок и файлов
Данный рецепт прекрасно известен многим пользователям Windows 7, ну да будет не лишним напомнить про него еще раз. По умолчанию в Windows 7 системные файлы и папки спрятаны – оно и понятно, ну кому нужно, чтобы какой-то чайник залез куда не надо и испортил все что мог? Впрочем, файлы и папки спрятаны совсем недалеко.
- Для начала выберите команду Пуск > Компьютер и перейдите в открывшемся окне на диск C:.
- Теперь необходимо нажать клавишу <Alt>, чтобы появилось верхняя панель меню. В этой панели выберите команду Сервис > Параметры папок. Откроется окно Параметры папок, в котором перейдите на вкладку Вид.
- В этой вкладке нужно сделать два дела:
- снять флажок Скрывать защищенные системные файлы;
- выбрать переключатель Показывать скрытые файлы, папки и диски.
Вот теперь не осталось у Windows ни одной папки или файла, скрытого от ваших глаз. Зайдите на диск С:. Теперь в нем появилась куча скрытых папок, с которыми лучше не баловаться!
Отображение скрытого раздела
Ну хорошо, я вижу все скрытые папки, но папки Boot по прежнему нет? Где моя папка Boot, сволочи, отдайте мои загрузочные файлы!
Спокойно – сейчас найдем. Раз ее нет в скрытых папках, значит она прячется…в скрытом разделе Windows 7. Злобные чебуреки из Microsoft спрятали от нас этот раздел, но мы сейчас это исправим. Размер раздела всего 100 Мбайт, и найти его можно следующим образом.
Нажмите комбинацию клавиш <Win +R> и введите в открывшемся окне команду diskmgmt.msc. Откроется окно Управление дисками. В этом окне нам нужен скрытый раздел (подписанный как “Зарезервировано системой”). А вот и он, смотрим картинку.
Этот раздел прячется и его не видно. Чтобы вывести его на божий свет, щелкните на разделе правой кнопкой и выберите команду Изменить букву диска или путь к диску.
Откроется новое окно, в котором щелкните на кнопке Добавить и выберите свободную букву диска, вроде Y: или любой другой.
Теперь проверяем: выберите команду Пуск > Компьютер, вот и он – наш ранее скрытый раздел.
Заходим в него и что я вижу? Та самая папочка Boot, в которой и находятся загрузочные файлы для Windows 7.
Йес, миссия выполнена, я крут и вы все тоже молодцы
Bootmgr (Windows Boot Manager) — Менеджер загрузки, используемый в операционных системах Microsoft Windows (Windows Vista/7/8/10).
Bootmgr появился в операционной системе Windows Vista и представляет собой дальнейшее (развитие) эволюционирование хорошо известного нам по предыдущим версиям Windows загрузчика NTLDR
, который был переписан с учетом некоторых нововведений, в том числе обеспечения поддержки интерфейса EFI
(Extensible Firmware Interface, Расширенный интерфейс прошивки). Загрузчик сохранил совместимость и со «старой», традиционной (legacy) схемой загрузки ОС, использующей последовательность BIOS
-> MBR
-> PBR (VBR)
-> BOOTMGR
-> winload.exe
-> ntoskrnl.exe
-> SMSS
-> Winlogon
. В зависимости от метода загрузки системы и реализованной в BIOS версии спецификации UEFI, модуль менеджера загрузки может именоваться:
- bootmgr.exe — традиционный (legacy);
- bootmgfw.efi — UEFI;
- bootmgr.efi — UEFI;
- bootx64.efi — UEFI;
Представляет собой исполняемый (PE-формат) файл, располагающийся на скрытом системном разделе, и предназначающийся для решения следующих задач:
- Подготовка среды загрузки ядра, прединициализации структур/интерфейсов: таблиц дескрипторов GDT, IDT, микрокода, модуля TPM, файловых систем, шины PCI, отладчика ядра, текстовой консоли, сетевого интерфейса и др.;
- Поддержка (новой) базы данных конфигурации загрузки (Boot Configuration Data, BCD), включающей меню загрузки ОС (текущей/предыдущих версий), опции гибернации, восстановления, позволяющей интегрировать опции сторонних разработчиков (различные модули этапа загрузки);
- Обеспечение опций загрузки начального этапа: устранение неполадок компьютера, безопасный режим, безопасный режим с загрузкой сетевых драйверов, безопасный режим с поддержкой командной строки, ведение журнала загрузки, включение видеорежима с низким разрешением, последняя удачная конфигурация, режим восстановления служб каталогов, режим отладки, отключить автоматическую перезагрузку при отказе системы, отключение обязательной проверки подписи драйверов, обычная загрузка Windows.
- Нахождение/проверка/загрузка модуля следующего этапа winload.exe(.efi).
Начиная с версии Windows 7, даже в случае установки системы с использованием классического способа разметки/загрузки (BIOS/POST → MBR), менеджер загрузки bootmgr размещается на специализированном скрытом разделе под названием System Reserved (Зарезервировано системой).
Тут самое время задаться вопросом, зачем разработчикам вводить отдельный раздел для классической схемы загрузки (BIOS/MBR)? Ведь раньше то ничего подобного не создавалось, все прекрасно загружалось без всяких там скрытых разделов, все файлы цепочки загрузки находились на основном системном разделе, куда же проще? А ответ, как мне кажется, достаточно прост. Выше мы уже упомянули, что схема загрузки была переделана Microsoft с учетом потребностей новой технологии UEFI, у которой для размещения загрузчиков используется специальный раздел ESP. Так что же, для UEFI использовать один алгоритм загрузки, а для классической BIOS/MBR оставлять традиционный? Подобное решение влечет за собой огромное количество проблем и необходимость обновления двух веток кода, не проще ли привести все «к одному знаменателю»: традиционную и UEFI-загрузки реализовать в рамках единого алгоритма, в любом случае размещая загрузчик в специальном разделе? Собственно это и было реализовано.
Поэтому, раздел System Reserved в традиционной схеме загрузки (BIOS/MBR) предназначается для:
- приведения иерархий разметки диска/файловой системы (используемых при традиционной (legacy) загрузке) в соответствие с аналогичной структурой стандарта UEFI: размещение на разделе (в классифицированном дереве директорий) файлов операционной системы, фигурирующих в начальном этапе загрузки ОС (Bootmgr/BCD);
- дополнительной защиты загрузочных файлов операционной системы от (не)преднамеренных деструктивных действий приложений/пользователя;
- хранения загрузочных файлов BitLocker Drive Encryption в случае, если используется шифрование разделов;
Скрытый раздел System Reserved создается на этапе установки операционной системы и имеет типовой размер порядка 100Mb (хотя может быть уменьшен до 30Mb без потери функционала). Далее мы будем рассматривать внутреннюю структуру файла bootmgr, представляющего из себя гибрид блоков кода на языке ассемблера, и встроенного образа PE-формата (написанного на языке C) с ресурсами и дополнительными секциями, содержащими наборы рабочих данных.
Где находится bootmgr Windows 7
В операционной системе Windows 7 bootmgr имеет довольно ощутимый размер для файла загрузки (в тестовой системе = 383786 байт), поскольку, как мы сможем увидеть позже, по большей части написан на языке высокого уровня. Располагается bootmgr в корневом каталоге основного активного скрытого раздела размером в 100 мегабайт. Данный раздел размещается в начале диска, предваряя все остальные. Партиции этой не присваивается логического имени (литеры/буквы диска), поэтому в самой операционной системе она не видна для стандартных средств операционной системы. Как вы можете догадаться, таким вот незатейливым способом данная партиция защищена от деструктивных действий пользователя, могущих повлечь за собой повреждение критически важной загрузочной информации.
Для того, чтобы найти файл bootmgr в системе, необходимо сначала научиться взаимодействовать со скрытым разделом. Для этого открываем апплет Управление компьютером, щелкнув правой кнопкой мыши на иконке «Компьютер» и выбрав пункт «Управление», либо можно запустить (Win+R) из командной строки diskmgmt.msc. Текущий пользователь должен иметь права администратора. В ответ на это действие откроется окно следующего вида:
Чтобы содержимое скрытого раздела предстало нашему взору, нам необходимо назначить ему логический номер (букву/литеру). На рисунке (схематично) я обозначил последовательность действий, которые нам необходимо предпринять. После выбора пункта «Изменить букву диска или путь к диску» у нас появится следующее окно выбора:
После нажатия кнопки ОК логическое имя будет присвоено разделу и он станет доступен в проводнике. Содержимое его, которое нам как раз и необходимо, наконец-то можно увидеть. Но это еще не все, дело в том, что некоторые файлы и директории раздела имеют атрибут «скрытый», поэтому нам нужно включить отображение скрытых и системных файлов. Это можно сделать в свойствах папки (Параметры папок и поиска — Вид). А теперь, давайте взглянем на искомый нами файл bootmgr, который можно увидеть прямо в корне партиции:
На рисунке бывает порой сложно, а чаще и вовсе не получается наглядно отобразить всю структуру раздела, поэтому приведу его в виде текстового списка. Итак, содержимое скрытого раздела «Зарезервировано системой» выглядит следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
\Boot \de—DE bootmgr.exe.mui 91712 локализация интерфейса загрузчика \en—ES bootmgr.exe.mui 85056 локализация интерфейса загрузчика \es—ES bootmgr.exe.mui 90192 локализация интерфейса загрузчика \Fonts wgl4_boot.ttf 47452 шрифт \fr—FR bootmgr.exe.mui 93248 локализация интерфейса загрузчика \it—IT bootmgr.exe.mui 90704 локализация интерфейса загрузчика \ru—RU bootmgr.exe.mui 90192 локализация интерфейса загрузчика memtest.exe.mui 43600 локализованная версия утилиты memtest BCD 20480 хранилище данных конфигурации загрузки BCD.LOG 17408 BCD.LOG1 0 BCD.LOG2 0 BOOTSTAT.DAT 65536 Boot Status Data. log-файл для записи статуса загрузки/завершеения (если включено логгирование) memtest.exe 485760 утилита memtest bootmgr 383786 менеджер загрузки BOOTSECT.BAK 8192 WLJAV 357376 |
По комментарию напротив (справа от) каждого файла в окне представления вы можете увидеть краткое описание функционального назначения.
Хотелось бы сделать некое лирическое отступление и поговорить о файлах, имеющих расширение .mui
. Если вы были достаточно внимательны, то обратили внимание, что одноименные файлы с расширением .mui имеют значительно меньший размер в сравнении со своими оригиналами. Это объясняется тем, что .mui-файл — это файл ресурсов, который содержит элементы локализации интерфейса основной программы для определенного языка. Проще говоря — это перевод интерфейса программы. Технология впервые была использована в ОС Windows Vista и предназначалась для связывания ресурсов, описанных в языковом файле (текст меню, диалоговых окон, строк помощи и прочее.) с независимым от языка основным исполняемым файлом.
Но, вернемся к основной линии повествования. Управление код bootmgr Windows 7 получает сразу после своей загрузки кодом загрузочного сектора раздела PBR.
Структура файла bootmgr Windows 7
По анализу кода загрузочного сектора раздела (PBR) в предыдущих статьях нам удалось определить, что первый файл, который загружается и выполняется после кода PBR, это bootmgr, находящийся в корне скрытого системного раздела. Интересно было бы посмотреть на структуру этого файла.
Дабы в следствии экспериментов не вывести систему из работоспособного состояния, стоит сделать резервную копию файла bootmgr в какой-нибудь временной директории, к примеру %TEMP%.
С чего мы начнем изучение? Первое, что приходит на ум, это визуально осмотреть структуру файла с помощью любого доступного под рукой шестнадцатеричного редактора. Что мы и сделаем сейчас, в моем случае я воспользовался встроенным в файловый менеджер FAR Commander редактором, переключив его в режим шестнадцатеричного представления.
При беглом осмотре структуры, удалось обнаружить некоторые особенности.
- 16-битный загрузчик. Начиная со смещения
00000000
предположительно идет код, напоминающий по виду код реального режима (aka ассемблер). Вероятно, у bootmgr есть участок кода, который исполняется в реальном 16-битном режиме процессора сразу после прыжка из кода PBR (поскольку код PBR не переводит процессор ни в какой другой режим). Я думаю, что код этот производит некие подготовительные действия. Предположительно (!) в файле он размещается до адреса00003DDF
. - PE-образ неопределенного назначения. Далее, по смещению
00005BF0
удалось обнаружить некое подобие стандартного заголовка PE-образа, который начинается с сигнатуры MZ (4D 5A). Насколько я понял, этот образ располагается вплоть до адреса00007BF0
, то есть имеет размер 8192 байта (2000h). Этот образ содержит PE-заголовок, но при этом имеет не все типовые секции (такие как секции кода, данных, ресурсов). Многие из этих секций заполнены нулями, поэтому я могу сделать предположение, что он вообще не исполняется. - Запакованный bootmgr.exe. Затем, удалось найти еще один PE-образ по смещению
00007BF0
, который так же начинается со стандартной сигнатуры MZ и размещается вплоть до самого конца файла bootmgr Windows 7.
Portable Executable — (PE, дословно: переносимый исполняемый) — формат исполняемых файлов, используемый во всех версиях операционной системы Microsoft Windows
По сути, на основе тех данных, которые нам только что удалось получить при беглом, поверхностном анализе данных, файл bootmgr имеет три составных части:
- некий 16-битный код-загрузчик;
- пустой PE-образ: назначение неизвестно;
- еще один PE-образ: предположительно 32-битный запакованный файл bootmgr.exe;
На этом предварительный анализ заканчивается. Теперь нам предстоит более предметно подойти к вопросу и попробовать «в лоб» дизассемблировать bootmgr Windows 7 с целью понять, действительно ли код, располагающийся в начале файла, простой участок кода реального режима?
16-битный загрузчик (16-bit stub)
В самом начале исходного кода я обнаружил (традиционный) блок настройки сегментных регистров. Базу сегмента я не корректировал пока (уверен, что при переходе от PBR они имеют другие значения), поскольку не разобрался, с какого адреса стартует этот участок кода.
seg000:01D8 mov bx, 3DE0h seg000:01DB shr bx, 4 seg000:01DE mov ax, cs seg000:01E0 add ax, bx seg000:01E2 mov ss, ax seg000:01E4 mov sp, 0C80h seg000:01E7 push dx seg000:01E8 mov ds, ax seg000:01EA mov es, ax seg000:01EC xor ebp, ebp seg000:01EF movzx esp, sp seg000:01F3 mov word ptr ds:1534h, ds seg000:01F7 mov word ptr ds:1536h, cs seg000:01FB call sub_56C |
Затем, далее по кодовому ветвлению, идет сброс контроллера диска.
seg000:0A52 mov dx, 3F2h seg000:0A55 mov ax, 0Ch seg000:0A58 out dx, al seg000:0A59 retn |
Далее следует включение линии A20.
seg000:0AC2 call sub_AE4 seg000:0AC5 jnz locret_AE3 seg000:0AC9 pushfd seg000:0ACB cli seg000:0ACC mov al, 0D1h ; ‘T’ seg000:0ACE out 64h, al seg000:0AD0 call sub_AE4 seg000:0AD3 mov al, 0DFh ; ‘-‘ seg000:0AD5 out 60h, al seg000:0AD7 call sub_AE4 seg000:0ADA mov al, 0FFh seg000:0ADC out 64h, al seg000:0ADE call sub_AE4 seg000:0AE1 popfd seg000:0AE3 locret_AE3: seg000:0AE3 retn |
Потом код производит работу с настройкой страничной адресации.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
seg000:07F2 mov ax, ds:word_1510 seg000:07F5 and ax, ax seg000:07F7 jnz locret_86F seg000:07FB push large 0 seg000:0801 popfd seg000:0803 mov ds:word_1510, 1 seg000:0809 mov eax, ds:dword_1514 seg000:080D xor edx, edx seg000:0810 or edx, 1 seg000:0814 and eax, 80000000h seg000:081A jz loc_825 seg000:081E or edx, 80000000h seg000:0825 loc_825: seg000:0825 cli seg000:0826 lgdt fword ptr ds:byte_1500 seg000:082B lidt fword ptr ds:byte_1508 seg000:0830 mov eax, cr0 seg000:0833 or eax, edx seg000:0836 mov cr0, eax seg000:0839 xchg bx, bx seg000:083B nop seg000:083C jmp short loc_83F |
Ну и затем осуществляется переход в защищенный режим. А вот после этого следует довольно большой участок кода, который активно манипулирует блоками данных и выполняет над ними различные арифметико-логические операции, очень похожий на код распаковки 32-битного образа bootmgr.exe (предположение). Затем идут процедуры подготовки окружения для запуска 32-битного образа. Образ распаковывается и размещается по адресу (базе) 0x400000
, то есть мы видим уже классическую схему загрузки PE-файла Windows.
Заголовок размером 16 байт
Используется 16-битным блоком кода реального режима для определения параметров распаковки файла bootmgr.exe.
PE-образ размером 8192 байта неизвестного предназначения
Содержит структуру PE-заголовка. Заглушку для вывода ошибки при запуске в реальном режиме. Часть секций присутствует. Большинство секций заполнены нулями.
32-битный PE-образ bootmgr.exe
Как мы уже упоминали выше, последним найденным блоком данных был файл bootmgr.exe, правда основная проблема заключается в том, что он запакован (сжат). Поэтому, непосредственно перед изучением логики его работы, нам необходимо извлечь (и распаковать) этот файл из загрузчика bootmgr. Для выполнения извлечения и распаковки на просторах бескрайней Сети я нашел утилиту под названием bmzip, которую можно найти на странице автора тут. В моём случае распакованный файл bootmgr.exe занимал 523648 байт. А вот теперь то уже этот самый распакованный файл bootmgr.exe мы и попытаемся «подсунуть» дизассемблеру IDA
.
Выполнение кода bootmgr.exe начинается с основной процедуры модуля, носящей название BmMain. Процедура BmMain вызывает вложенную процедуру BlInitializeLibrary, которая предназначена для инициализации критических структур данных, таких как внутренние переменные, различные физические устройства компьютера. Эта процедура вызывает следующие подпрограммы:
- BlpArchInitialize — инициализация таблиц дескрипторов GDT, IDT и прч.
- BlpFwInitialize — инициализация микрокода (firmware);
- BlpTpmInitialize — инициализация TPM;
- BlpIoInitialize — инициализация файловых систем;
- BlpPltInitialize — инициализация шины PCI;
- BlBdInitialize — инициализация отладчика ядра;
- BlDisplayInitialize — инициализация консоли;
- BlpResourceInitialize — инициализация внутренней секции ресурсов .rsrc;
- BlNetInitialize — Инициализация сети;
Далее:
- на этапе окончания подготовки рабочей среды вызывается процедура BmpInitializeBootStatusDatalog: она записывает состояние загрузки в файл bootstat.dat.
- Исполняется BmpLogBootResolutions.
- Исполняется BlResourceFindXml, которая отвечает за поиск и распаковку файла bootmgr.xsl из ресурсной секции .rsrc. Заданный файл содержит параметры меню загрузки.
- Исполняется BlXmiInitialize: ожидает выбора пользователя (ввод с клавиатуры), либо инициализирует загрузку загрузочной записи, если она единственная.
- Исполняется BlImgQueryCodeIntegrityBootOptions: Проверяет корректность записей загрузки и загружаемых образов.
- Исполняется BmFwVerifySelfIntegrity: проверяет собственную целостность. Для отключения проверки целостности модулей используется функция ImgpValidateImageHash.
- Исполняется BinResumeFromHibernate: проверяет статус гибернации, если находит, то вызывает winresume.exe.
- Исполняется BlUtlRegisterProgressRoutine: процедура проверки/изменения этапа выполнения процесса загрузки.
- Исполняется BlUtlRegisterMulticastRoutine: процедура проверки/изменения этапа выполнения сетевой загрузки.
Функция BlXmiWrite тут вряд ли уместно приводить в составе основной логики функционирования bootmgr (поэтому я его и затенил на рисунке), поскольку это исключительно функция поддержки, которая парсит XML данные и выводит их на консоль.
- Исполняется BlGetBootOptionBoolean: загружает опции приложений из файла BCD.
- Исполняется BlGetBootOptionGuidList: получение списка GUID-идентификаторов из BCD;
- Исполняется BmpGetSelectedBootEntry: получение выбранной записи загрузки из BCD;
- Исполняется BmCloseDataStore: закрытие BCD-файла;
После определения [выбранной/заданной] записи загрузки вызывается процедура BmpLaunchBootEntry, которая и загружает образ, ассоциированный с записью. В основной ветке кода, на завершающей стадии работы, bootmgr.exe проводит загрузку, проверку целостности и передачу управления на модуль следующей стадии загрузки операционной системы — winload.exe.
Подготавливая информационные материалы для наших читателей, мы неоднократно касались темы неработающего компьютера. Например, у нас есть подробная статья о том, что делать, когда не включается компьютер. Во многих текстах мы не раз упоминали такой элемент операционной системы как загрузчик. Сегодня мы предлагаем познакомиться ним подробнее, а также разобраться, как восстановить загрузчик Windows 10 или 11 в случае, если он поврежден и не работает.
Что такое загрузчик Windows 10
Прежде чем разбираться, как восстанавливать загрузчик Windows 10, необходимо понять, что это такое и какие у данного элемента функции. Дадим определение этой части операционной системы и расскажем о ней чуть подробнее.
Загрузчик Windows 10 — это программное средство, ответственное за запуск операционной системы Windows 10 при включении компьютера. Загрузчик выполняет несколько ключевых задач, обеспечивая корректную и стабильную загрузку операционной системы. Вот некоторые основные функции загрузчика Windows 10:
- Загрузка ядра операционной системы. Компонент запускает ядро операционной системы, начиная процесс загрузки. Ядро является основным элементом операционной системы, отвечающим за взаимодействие с аппаратной частью и управление ресурсами компьютера.
- Загрузка драйверов. Загрузчик может активировать необходимые драйверы, которые обеспечивают взаимодействие с аппаратной частью компьютера, таким как драйверы для видеокарты, звуковой карты и других устройств.
- Управление загрузочными параметрами. Загрузчик также предоставляет возможность выбора различных параметров загрузки, таких как безопасный режим, последняя известная настройка и другие опции, которые могут помочь в устранении проблем с загрузкой системы.
Обычно загрузчик Windows 10 (и более ранних версий Windows) называется NTLDR (New Technology Loader), а также используется Boot Configuration Data (BCD) для хранения информации о параметрах загрузки и настройках системы.
Интересно, что, несмотря на название, загрузчик операционной системы загружается далеко не первым. При включении компьютера первой активируется система UEFI, которая ищет раздел EFI на диске и запускает загрузчик. Только после этого он активирует работу операционной системы.
Почему загрузчик Windows может сломаться
Существует множество причин, по которым может возникнуть сбой загрузчика Windows. В основном они касаются программного обеспечения, но также проблемы могут возникать из-за аппаратной части или даже из-за действий пользователя. Перечислим некоторые из наиболее распространенных причин появления ошибки загрузчика Windows:
- Повреждение загрузочного сектора. Если загрузочный сектор на жестком диске поврежден, загрузчик может не суметь правильно прочитать информацию о загрузке операционной системы. Иные сектора с поврежденными данными или физическими повреждениями также могут вызвать сбой загрузчика.
- Изменения в конфигурации оборудования. Подключение нового оборудования или изменения в существующей конфигурации (например, замена жесткого диска или видеокарты) могут вызвать сбои загрузчика, если операционная система не может адаптироваться к изменениям.
- Вирусы и вредоносное ПО. Атаки вирусов или вредоносных программ могут повредить системные файлы, включая те, которые отвечают за загрузку операционной системы.
- Неудачные обновления. Некорректно установленные или несовместимые обновления операционной системы могут привести к сбоям загрузчика.
- Неправильные настройки BIOS/UEFI. Некорректные параметры в настройках Basic Input/Output System (BIOS) или Unified Extensible Firmware Interface (UEFI) могут затруднить правильную загрузку операционной системы.
- Неправильные действия пользователя. Сейчас Windows практически не дает изменять системные файлы. Но долгое время ошибка загрузчика ntldr vis missing or invalid возникала из-за того, что пользователь просто удалял неизвестный ему файл в корне диска. Если подобное случалось, приходилось срочно искать, как восстановить загрузчик Windows 7 или систем более ранних версий.
- Установка еще одной операционной системы на диск. Сейчас большинство ОС просто удаляют «конкурентов» с того диска, куда ставятся. Но при определенном упорстве можно установить на диск несколько операционных систем. Однако, при неверной установке загрузка некоторых ОС будет невозможна из-за того, что у операционных систем возник конфликт и чей-то загрузчик был удален.
Для исправления работы загрузчика Windows, часто требуется использование инструментов восстановления, таких как встроенные средства Windows, загрузка с установочного диска или USB-накопителя с образом системы.
Важно отметить, что внимательное следование процедурам обновления, регулярная проверка наличия вирусов и аккуратное управление оборудованием могут помочь предотвратить подобные проблемы и обеспечить более стабильную загрузку операционной системы.
Как восстановить работу загрузчика Windows
В случае, если у вас не работает загрузчик Windows, необходимо предпринять три основных шага. В первую очередь определяется проблема. Если у вас аппаратная проблема, необходимо заменить жесткий диск. Если ошибка вызвана действиями пользователя, нужно после проинструктировать пользователя и убедиться, что он не совершит повторные действия. Если проблема в Windows, необходимо заранее подумать об отключении обновлений или иных действиях, которые помогут предотвратить повторение проблемы.
После того как вы выяснили, почему не работает загрузчик на Windows 7, 10, или иной операционной системе можно начинать разбираться в том, как его восстановить. Есть несколько способов, опишем самые популярные. Обратите внимание, что для всех вариантов вам потребуется загрузочная копия Windows на флешке.
Полная переустановка Windows
Самый простой способ восстановить работу загрузчика Windows 10 — это переустановить всю операционную систему. Учитывая, что сегодня это действие можно выполнить буквально кликая кнопку «Далее», такой вариант — один из наиболее предпочтительных. Почему? Во-первых, он исключает неправильное восстановление загрузчика. Во-вторых, он гарантирует, что в системе не останется того ПО, вирусов, некорректных обновлений, которые стали причиной поломки. Дополнительный плюс — не нужно искать командную строку, чтобы восстановить загрузчик, все делается средствами Windows 10.
Важно! Перед переустановкой ОС обязательно скопируйте все нужные файлы. Если ваш компьютер не грузится, можно изъять из него жесткий диск и подключить к другому устройству, чтобы забрать данные с рабочего стола, папки загрузок и других мест, где они могли бы храниться. Кроме того, возьмите себе за правило не хранить на системном диске важных данных — как раз на такой случай.
Дадим алгоритм установки операционной системы, которому вам нужно следовать:
- Запустите компьютер с USB-накопителя (загрузочной флешки).
- После загрузки с USB-накопителя выберите язык, временную зону и другие настройки.
- Выберите «Установить Windows» и следуйте инструкциям мастера установки.
- Когда система спросит, укажите раздел на жестком диске, на который вы хотите установить Windows 10. Можно выполнить форматирование диска или выбрать уже существующий раздел. Во втором случае, скорее всего, сработает восстановление.
- Подождите, пока процесс установки завершится. Компьютер перезагрузится несколько раз.
- После перезагрузки следуйте инструкциям по настройке базовых параметров, таких как учетная запись пользователя, пароль, настройки безопасности и другие.
- После завершения установки Windows 10 установите необходимые драйверы для оборудования и программное обеспечение.
Эти шаги должны помочь вам выполнить переустановку Windows 10 с использованием загрузочного USB-накопителя. Убедитесь, что у вас есть резервные копии важных данных перед началом этого процесса, чтобы избежать потери данных.
После переустановки в некоторых случаях приходится активировать Windows заново. Об этом процессе мы писали в статье «Почему появляется надпись «Активация Windows» и как от нее избавиться».
Автоматическое восстановление средствами Windows
Если полная переустановка вам не по душе, то можно попытаться восстановить текущую систему с помощью функции восстановления. Для этого используйте загрузку с другого источника.
Загрузившись с флешки, выберите пункт «Поиск и устранение неисправностей» в меню, а после — укажите, что вам требуется пункт «Дополнительные параметры». Здесь у вас будет пункт «Восстановление при загрузке», который и нужно выбрать.
Меню загрузки Windows при автоматическом восстановлении
После восстановления система сама перезагрузится и попросит выбрать пользователя. Укажите себя, если пользователей несколько. Далее будет проведена диагностика компьютера — нужно немного подождать. В случае успеха или неудачи система оповестит вас. Если восстановление не сработало, можно нажать кнопку «Дополнительные параметры», чтобы вернуться в меню и попробовать другие способы, например, загрузить командную строку.
Неудачное восстановление системы Windows 10
Восстановление системы из командной строки
Управление с помощью командной строки поможет восстановить загрузчик Windows с большей вероятностью, чем автоматический режим. Однако здесь необходимо ввести много команд вручную и точно понимать, что вы делаете. Ну и, конечно, нужно разбираться, что такое командная строка и как в ней работать.
Алгоритм действий при использовании командной строки выглядит следующим образом:
- Загрузитесь в Windows через Boot Menu или меню восстановления, вызовите консоль.
- Наберите в командной строке diskpart. Это вызов утилиты, с которой мы сейчас будем работать.
- Наберите в командной строке list volume. В списке, который появится на экране, необходимо найти букву диска, где располагается Windows. Если на компьютере работает EUFI, скорее всего, это скрытый том с разметкой FAT32. Запомните буквенное обозначение и метку нужного тома.
- Введите select volume и номер тома, который запомнили в предыдущем пункте.
- Введите format fs=fat32, если изначально том был отформатирован в FAT32 и format fs=ntfs, если изначально том был отформатирован в NTFS.
- Введите assign letter=Т, чтобы присвоить диску метку T. Вам нужно выбрать такую метку, которой нет у других дисков в системе.
- Введите exit, чтобы завершить работу инструмента.
Команда list volume показывает, какие имена и метки, а также файловые системы, есть у разделов на текущем компьютере.
После настройки диска необходимо использовать команду bcdboot. Вот пример ее написания: bcdboot C:\Windows /s T: /f ALL. В этой записи вы:
- указываете местоположение Windows с помощью буквы диска;
- указываете, в какой раздел будут копироваться файлы с помощью команды /s T:;
- уточняете тип встроенного ПО целевого системного раздела. ALL означает, что это может быть и BIOS, и UEFI.
Команда bcdboot позволяет восстановить загрузчик Windows через командную строку. Изучите справку, если сомневаетесь в том, как именно ее использовать. Справка появляется, если вы введете в консоли bcdboot и нажмете Enter сразу же, не добавляя никаких подробностей.
Справка по команде bcdboot в консоли Windows
Последний шаг в этом способе восстановления загрузчика — убрать присвоенную диску метку, чтобы Windows снова могла нормально работать. Для этого необходимо:
- Вновь открыть утилиту с помощью diskpart.
- Выбрать нужный диск с помощью команд list volume, select volume.
- Удалить метку диска командой remove letter=.
- Закрыть инструмент, написав exit.
Утилита diskpart дает пользователю достаточно много возможностей. Подробно обо всех командах, которые можно использовать таким образом, читайте на сайте Microsoft. Если после всех манипуляций загрузчик не восстановился и система не работает, попробуйте полную переустановку.
Подготовка к восстановлению загрузчика — справка
В предыдущих разделах мы несколько раз упоминали о загрузочной флешке. Возможно, вы не знаете, как именно ее можно создать. Ниже рассказываем алгоритм создания загрузочной флешки и ее использования. Эти действия вы можете выполнить, даже если компьютер в полном порядке. Тренировка поможет правильно среагировать, если на самом деле потребуется восстановить загрузчик Windows 7 или любой другой более новой операционной системы.
Как создать загрузочную флешку
Независимо от того, хотите ли вы восстановить загрузчик Windows 10 через командную строку или в автоматическом режиме, вам потребуется загрузочная флешка. Несколько лет назад можно было бы написать «загрузочный носитель», но сейчас DVD-диски практически не используются. У многих даже нет дисководов. Большинство при восстановлении системы загружаются с флешки, поэтому о ней и будем говорить.
Для создания загрузочной флешки существует стандартная утилита, которую можно скачать с сайта Microsoft. Вам необходимо средство для установки операционной системы. После его скачивания и запуска разрешите ему вносить изменения на вашем устройстве.
Раздел сайта, где можно скачать утилиту для создания загрузочной флешки
Программа установки Windows работает в полуавтоматическом режиме. Пользователю нужно лишь выбирать некоторые важные пункты. Вот основная последовательность действий:
- Примите лицензионное соглашение.
- Выберите пункт «Создать установочный носитель», когда система спросит, что вы хотите сделать.
- Выберите язык, выпуск операционной системы и архитектуру. Как определить разрядность Windows мы писали отдельно. Если вы создаете загрузочную флешку на будущее на том же устройстве, на котором будете ее с нее грузиться, можно предложить программе выбрать параметры, выставив значение «Использовать рекомендуемые параметры для этого компьютера».
- Выберите носитель, в нашем случае это USB-устройство. Необходимо вставить его в компьютер или ноутбук, предварительно сохранив все файлы. Обратите внимание, что файлы на загрузочной флешке оставлять нельзя: система удалит их.
- Подождите. Система уведомит о том, что работа выполнена.
Момент настройки выпуска, языка и архитектуры для создания загрузочной флешки
После таких нехитрых действий у вас появляется загрузочная флешка, с помощью которой можно загрузиться при неработающей системе и предпринять какие-то дальнейшие действия. Например, попытаться восстановить загрузчик Windows 10 из командной строки или иным способом.
Как загрузиться с загрузочной флешки
Если загрузчик Windows не работает, возобновление системы с помощью имеющейся ОС невозможно. Но мало создать загрузочную флешку, нужно суметь с нее загрузиться. Мы составили небольшую инструкцию, которая поможет вам выполнить нужные действия:
- Вставьте загрузочную флешку в компьютер.
- Перезагрузите компьютер и в процессе загрузки нажмите соответствующую клавишу (чаще всего это F2, F12, Esc или Del), чтобы войти в настройки BIOS/UEFI.
- В разделе Boot или Boot Priority выберите флешку как первое устройство загрузки.
- Сохраните изменения в BIOS/UEFI и перезагрузите компьютер. Обычно это делается путем выбора опции «Save & Exit» или подобной.
Когда компьютер перезагрузится, он должен автоматически начать загрузку с флешки. Если этого не происходит, возможно, вам нужно повторить шаги и убедиться, что флешка правильно подготовлена.
В этой статье мы подробно описали, как восстановить загрузчик Windows 10 штатными средствами, через командную строку и с помощью полной переустановки системы. Надеемся, что эти знания вам не потребуются и ваш компьютер всегда будет работать как часы. Кроме того, стоит обратить внимание на один момент: если вы видите, что на вашей технике последовательно выходит из строя тот или иной компонент Windows, возможно, проблема системная и кроется не в программной части. Или, наоборот, причина инцидентов — вирус, находящийся в локальной сети. Регулярные поломки требуют анализа и аудита, так как они свидетельствуют о более серьезной проблеме. Если вы не хотите подвергать опасности данные, хранящиеся на компьютерах в вашем офисе, позвоните нам. Наши системные администраторы и IT-специалисты проанализируют ситуацию и помогут решить вопрос раз и навсегда!