Конспект: Протокол загрузки Ntbtlog.txt

Конспект: Протокол загрузки Ntbtlog.txt Компьютер

Если кажется, что все потрачено…

Жизнь полна неожиданностей, и ошибки случаются по разным причинам. Пользователь что-то нажимает, дисковые утилиты содержат ошибки, а GPT с RAID проявляет особенности. Да, UEFI сложнее BIOS и подвержен ошибкам.

Уже сейчас многие антивирусные программы проверяют UEFI на наличие буткитов.

К слову, не могу не упомянуть забавный случай, когда пресловутый
rmrfnopreserveroot/ вместе с содержимым дисков стер содержимое переменных в NVRAM, которое в Linux монтируется в
/sys/firmware/efi/efivars, что привело к окирпичиванию ноута. Такая вот особенность реализации стандарта попалась экспериментатору и наглядно показала, что доступ на запись к переменным UEFI из ОС был сомнительной затеей. В общем, хорошенько подумай, если вдруг захочешь поиграть с огнем.

Что делать, если устройство использует диск нового формата, но испытывает проблемы? Теоретически оболочка UEFI Shell должна быть способна устранить некоторые проблемы. Некоторые ошибки диска устраняются UEFI автоматически, в то время как другие, например, вставка вкладки, требуют вмешательства пользователя.

Где хранится bios и что такое cmos

Учитывая, что BIOS отвечает за самую первую настройку компьютера независимо от его конфигурации, а базовые устройства становятся доступными только после этого, из-за этого он хранится в уникальной флэш-микросхеме, а не на жестком диске, где находится большинство типичных приложений.

B IOS, в которую программный код записывался только один раз, хранилась на первых компьютерах с помощью микросхем постоянной памяти (ПЗУ или ROM). Позже BIOS был заменен микросхемами EPROM и EEROM.

Современные персональные компьютеры оснащены микросхемами на основе флэш-памяти, в которых находится BIOS, которую можно изменять удаленно с помощью специализированного программного обеспечения. Переустановка прошивки называется перепрошивкой, если она повреждена.

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

B IOS может иметь различные возможности. Раньше его размер не превышал 512 КБ. Последние версии программ имеют размер в несколько мегабайт. В любом случае, это мелочь.

В некоторые компьютерные платы производители могут помещать не одну, а две микросхемы BIOS одновременно. В этом случае, если основная микросхема компьютера повреждена или если резервная микросхема вышла из строя.

Наряду с флэш-памятью на материнской плате имеется еще один тип памяти для самой BIOS, в которой хранятся настройки конфигурации программы. В процессе производства используется комплементарный металлооксидный полупроводник, или CMOS (Complementary Metal Oxide Semiconductor).

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

Процедура post и первоначальная загрузка пк

Теперь давайте рассмотрим, как происходит первая загрузка компьютера и какую роль в этом процессе играет BIOS.

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

При запуске процессор получает команду выполнить самотестирование частей компьютера при включении (Power-On Self Test, POST). Как только ПК запускается, на экране можно увидеть различные этапы процедуры POST. Прежде чем операционная система начнет загружаться, происходят следующие вещи:

1. Сначала определяется основополагающий компонент системы.

2. После инициализации BIOS записывается в установленную оперативную память.

Конфигурация набора системной логики, или чипсета, является третьим этапом.

4. Затем выполняется поиск видеокарты. Компьютер будет иметь отдельный BIOS, если в нем установлена внешняя видеокарта. Если внешняя видеокарта обнаружена, образ ее программного обеспечения появится первым на экране вместе с названием видеокарты.

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

6. Затем процессор тестируется, и на экран выводится информация о его свойствах и тактовой частоте.

7. Тест операционной системы начинается после теста оперативной памяти. Если все идет по плану, слово OK отображается рядом с общим объемом установленной оперативной памяти.

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

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

Экран, определяющий контроллеры serial ATA, имеет отдельный BIOS.

10. Распределение ресурсов между внутренними устройствами ПК, которые были обнаружены, является последним шагом. На старых компьютерах после отображения сводной таблицы со всеми обнаруженными устройствами отображается таблица «Общее количество оборудования». На современных компьютерах эта таблица больше не отображается на дисплее.

11. Главная загрузочная область (MBR), содержащая данные запуска для операционной системы и загружаемого устройства, ищется BIOS на подключенных дисках.


В зависимости от установленной на компьютер версии BIOS, прохождение процедуры POST может проходить с небольшими изменениями от вышеописанного порядка, но в целом, все основные этапы, которые мы указали, будут выполняться при загрузке каждого ПК.

Mining and crafting

Я не буду подробно описывать настройку для отладки, потому что это легко найти в Гугле. Когда система запускается, отладчик остановится из-за термина «Cycle Initial Break».

M I Create Image File Map Внутренний процесс менеджера памяти проецирует исполняемый файл в память таким образом. Когда создается раздел, например, при открытии исполняемого файла, происходит проецирование в память. Однако обратите внимание, проецируется ли исполняемый файл в память или выполняется его код.

Введите следующую команду, если у вас достаточно маны:

bu nt!MiCreateImageFileMap "dt nt!_EPROCESS -d ImageFileName @$proc; dt nt!_FILE_OBJECT -d FileName @rcx; g"


Магическая строчка буквально означает следующее:

  • Bu (Set Unresolved Breakpoint) — устанавливает неразрешенную точку останова. Это не потому, что кто-то или что-то не разрешил его, просто для его установки нужно решить, на какой адрес его поместить. Дело в том, что вы не знаете заранее, по какому адресу его следует отправить. Когда вы загружаете модуль, программа проверяет, присутствует ли нужная функция, и если да, то точка останова устанавливается автоматически. Эта настройка необходима, когда включена ASLR — рандомизация адресного пространства, поскольку модули будут загружаться каждый раз по разным адресам, и точка останова, установленная по фиксированному адресу, скорее всего, будет отличаться.
  • Nt!MiCreateImageFileMap — это символ, на котором следует остановиться. WinDbg принимает запись вида «имя_модуля!имя_функции». В данном случае nt — это предопределенный псевдоним для ntoskrnl.exe.
  • Ниже приведен отрывок сценария WinDbg, который будет выполняться каждый раз при остановке на этой функции. «dt nt!_EPROCESS -d ImageFileName @$proc» означает по-русски «отобразить поле ImageFileName в структуре _EPROCESS из модуля nt, если оно связано с адресом, определенным в псевдорегистрации «текущий процесс»». Следующая команда после разделителя «;» означает примерно то же самое, но адрес структуры берется из регистра rcx, куда передается первый параметр функции Microsoft x64 ABI. «g» означает «go», т.е. продолжить выполнение.

Не следует использовать точки остановки для ведения журнала. Избегайте использования расширений отладчика, которые представляют собой команды, начинающиеся с «! «))), так как протоколирование будет происходить гораздо медленнее.

Восстановление gpt-разделов

Если затронуто более одного стола обслуживания, потребуется сделать дополнительные выборы. К счастью, они уже существуют для носителей других типов, кроме MBR. Можно восстановить случайно поврежденные разделы GPT.

Существуют программы для восстановления удаленных файлов в Linux, несмотря на запрет UEFI и отсутствие поддержки со стороны сообщества систем GPT. Testdisk — первая из них, заслуживающая внимания. Конечно, она может работать и под DOS, и под «Маком», но Windows предпочтительнее.

Она может оказаться полезной для восстановления не только служебных таблиц, но и удаленных данных. Скажем, у нас повреждена запасная таблица разделов, а первичная вообще куда-то подевалась (ну всякое ведь бывает, там
if с
of перепутал в
dd), и в итоге в
/dev/ отображается пострадавшее устройство, но не разделы на нем. Кому верить, как читать данные?

Для восстановления раздела необходимо выбрать устройство и тип раздела в testdisk. Программа пытается определить это самостоятельно, но в нашем случае она считает, что это GPT; конечно, это можно изменить.

Затем мы просматриваем диск в поисках потерянных разделов, записывая информацию обо всех найденных разделах на ленту. Testdisk предоставляет подробные пояснения по ходу работы, что позволяет использовать инструмент в простых ситуациях, не заглядывая внутрь.

Обнаруженный testdisk’ом раздел. Начинается с блока 34, так как это минимум, выделяемый под структуры GPT
Обнаруженный testdisk’ом раздел. Начинается с блока 34, так как это минимум, выделяемый под структуры GPT

Gdisk — первый инструмент, который может быть полезен в нашей ситуации. Его можно использовать вместе с parted для восстановления разделов; первый генерирует новые заголовки таблиц GPT, второй определяет отсутствующие разделы.

Заботливый и информативный gparted, при помощи которого мы остались с пустой таблицей разделов
Заботливый и информативный gparted, при помощи которого мы остались с пустой таблицей разделов

В таком случае в gdisk (или аналогичной утилите) можно создать новые заголовки GPT взамен испорченных. Файлы и структуры файловых систем, к счастью, остаются при таких манипуляциях на месте, и необходимо лишь восстановить таблицу разделов. Для этого желательно помнить примерные границы разделов, так как их нужно сообщить программе parted в команде
rescue. После перезагрузки пробуем примонтировать диск — и нам повезло, магия сработала! Вот бы почаще так.

Поиск и восстановление разделов в parted
Поиск и восстановление разделов в parted

Пользователи Windows заинтересованы в технологическом прогрессе. Однако для решения этой проблемы они могут использовать DMDE — инструмент, который хорошо известен в узком кругу и последние версии которого имеют полнофункциональные графические интерфейсы пользователя.

Утилита DMDE с графическим интерфейсом
Утилита DMDE с графическим интерфейсом

Кстати, существует версия для macOS. DMDE сочетает в себе функции менеджера разделов и редактора дисков. Даже при сложных повреждениях утилита может восстановить структуру файлов и папок, причем предусмотрены опции автоматического восстановления.

Исправить поврежденный загрузчик на компьютере с Windows с UEFI/GPT можно с помощью обычного инструмента операционной системы. В любом случае, достаточно загрузить компьютер с образа дистрибутива Windows, открыть командную строку, нажав Shift + F10, а затем добавить загрузчик. На этих ваших сайтах есть подробные инструкции.

Завершение загрузочных сервисов

Операция, завершающая работу всех служб и освобождающая память, выполняется после успешной загрузки операционной системы. Компьютер получает контроль над операционной системой.

По сути, UEFI и BIOS очень похожи. POST и загрузчик тоже в чем-то похожи. А вот Fast Boot — это уже другая особенность. Операционная система теперь может повторять процесс инициализации «железа» заново. Возможность пропустить шаг в UEFI замедляет загрузку системы.

Secure Boot — еще одна функция UEFI; интересно, что поиск «как отключить» занимает первое место в результатах. Это протокол, который позволяет проверять исполняемые файлы и подписывать драйверы. Недействительные образы UEFI не могут быть загружены до запуска благодаря BIOS.

Защита от модификации образа, вызванной вредоносным ПО, устанавливается с помощью Secure Boot. Фактически, Secure Boot можно избежать, отключив некоторые недостатки реализации или вовсе отказавшись от них. Кроме того, производители обычно не требуют Secure Boot.

. Файлы могут быть подписаны соответствующим образом, чтобы Secure Boot мог загружать что угодно на устройствах с установленными ключами Microsoft! Поскольку он использует APPLv3, Microsoft не решается предоставить ключ для GRUB, несмотря на то, что его разработка может быть рискованной.

Это привело к появлению предзагрузчиков Shim и PreLoader (liders.c), которые запускают неподписанные образы, подписываясь на MS. Они достигают этого, отдавая команду GRUB или другому загрузчику. Такие дистрибутивы, как Fedora, Debian и UBuntu в настоящее время используют Shim.

О разметке дисков gpt

Так называемый защитный MBR находится в LBA0, первом логическом блоке на носителе. Старое программное обеспечение видит только один большой раздел, защитный раздел GPT, в дополнение к защитному MBR.

Далее следует основная таблица GPT. Массив записей разделов расположен рядом с заголовком GPT (GAP Tactor), который также содержит подпись, версию и контрольные суммы служебных таблиц.

GUID типа раздела, GUID раздела, LBA начала и конца, атрибуты и имя. После таблицы разделов следует
FirstUsableLBA, то есть блок, который может быть использован непосредственно для раздела.

В первичной таблице есть LBA запасной (Backup) GPT, идентичной первой, только значения ее полей
MyLBA и
AlternativeLBA меняются местами.

Запасная таблица находится в последнем блоке диска, перед ней расположена еще одна таблица с записями о разделах, так что поле
PartitionEntryLBA также имеет другое значение.

Системные разделы ESP размером до 100 МБ могут использоваться для хранения дополнительных программ UEFI. Он находится первым и имеет файловую систему FAT32. Нет необходимости создавать отдельный ESP, поскольку загрузочные USB-носители уже отформатированы в FAT. В NVRAM хранятся конфигурации и значения системных переменных, включая порядок загрузки.

Все компоненты схемы обозначены по расположению на схеме; более подробные определения приведены в техническом паспорте.

Схематичное представление основных структур GPT
Схематичное представление основных структур GPT

Как видите, нет абсолютно никаких параллелей с разметкой MBR (хотя есть Hybrid MBR). Но с появлением первичных и расширенных томов появилась возможность создавать множество здоровых разделов без использования опор.

Протокол загрузки ntbtlog.txt

1 Ведение протокола загрузки Ntbtlog.txt

Если вы указали в файле Boot.ini, что у вас включен безопасный режим и параметр /BOTLOG/ — Ntldr передает ядру Windows вместе с параметрами безопасности и значение BOOSTLOG. Независимо от того, включен ли безопасный режим, ядро ищет параметр /BOOSTLOG. Если ядро обнаруживает соответствующую строку в файле Boot.ini, оно регистрирует все свои действия во время каждой загрузки драйвера.

Так, если функция IopSafeBootDriverLoad
запрещает загрузку какого-либо драйвера, диспетчер ввода-вывода вызывает функцию IopBootLog, регистрируя, что данный драйвер не загружен. Аналогичным образом после успешной загрузки драйвера, входящего в конфигурацию безопасного режима, IopLoadDriver вызывает IopBootLog для внесения записи о загрузке этого драйвера. Изучив файлы протокола загрузки Ntbtlog.txt
, можно выяснить, какие драйверы являются частью данной конфигурации.

Поскольку ядро избегает изменения данных на диске до запуска Chkdsk, который происходит на более позднем этапе загрузки, IopBootLog не может просто сбрасывать записи в файл. Вместо этого она записывает их в раздел реестра HKLMSYSTEMCurrentControlSetBootLog. Диспетчер сеансов (Smss.exe), первый загружаемый компонент пользовательского режима, запускает Chkdsk для проверки целостности системного диска, а потом завершает инициализацию реестра, вызывая NtInitializeRegistry. Этот вызов указывает ядру, что уже можно безопасно открыть на диске файл протокола, что и делается вызовом IopCopyBootLogRegistryToFile.
Эта функция создает в системном каталоге Windows (по умолчанию — Windows) файл Ntbtlog.txt и копирует в него содержимое раздела реестра BootLog. IopCopyBootLogRegistryToFile
также устанавливает флаг, сигнализирующий IopBootLog о возможности записи непосредственно в файл протокола.

Перед запуском Smss.exe файл Ntbtslog TX не создается. Ntbtslog.txt не будет виден, если загрузка остановится до запуска Smss.exe.

Примеры строк в Boot.ini для ведения протокола загрузки

Ntbtlog.txt

2.1.
multi(0)disk(0)rdisk(0)partition(3)WINDOWS=»Microsoft Windows XP Professional RU» /noexecute=optin /fastdetect /sos /bootlog

Ntbtlog. TXT регистрируется в /sos/bootlog, где также отображаются драйверы, которые были загружены при запуске.

Появится новый вид загрузки. Во время загрузки он будет похож на безопасный режим.

2.2.

multi(0)disk(0)rdisk(0)partition(3)WINDOWS=»Microsoft Windows XP Professional RU» /noexecute=optin /fastdetect

/bootlog

Только для ведения журнала NtbTLog, используйте /bootlog. Вид загрузки не изменится в тексте.

3 полезные ссылки

—  Не записываются при включении ведения журнала загрузки файла Ntbtlog.txt
—  Внутреннее устройство Windows

Почитайте посты по теме :

Оцените статью
OverComp.ru