Bcdtool инструкция

04.07.2014 Геннадий 0 комментариев

У нас вы можете скачать книгу bcdtool инструкция в fb2, txt, PDF, EPUB, doc, rtf, jar, djvu, lrf!

Данный раздел не монтируется в обычном режиме работы системы и буква диска ему не присваивается. В этом случае загрузчик помещается в тот же раздел, что и файлы ОС. Таким образом, первая наша задача — добыть bootmgr. Желательно взять его из системы, которая будет выступать в роли подопытной. Для этого установим ОС Windows на виртуальную машину.

Я преимущественно работаю в ОС Linux, буду в основном ориентироваться на инструменты применяемые там, хотя уделю внимание и Windows. Итак, предположим у нас есть виртуальная машина ВМ с установленной на ней Windows 7 x Разметка диска выполнена на основе MBR, система установлена в один раздел. Допустим это QEMU, диск на котором установлена подопытная имеет формат raw. Для нас представляет интерес файл bootmgr. Однако, прежде нам нужен не совсем он, а разрядный образ загрузчика bootmgr.

Для его распаковки необходимо использовать утилиту bmzip , которая написана в общем-то для Windows с наскока собрать её под Linux не вышло , поэтому распаковку выполним на виртуальной машине. Бинарную сборку этой утилиты, которая бы работала нормально оказалось довольно трудно найти, несмотря что тут дана ссылка на неё.

В итоге, пакет был найден на каком-то из сайтов, посвященных кастомизации bootmgr. Для работы bmzip оказалась необходима библиотека MSCompression. Готовый к работе пакет теперь можно скачать тут.

Создадим на диске ВМ папку utils и скопируем туда bmzip. Отмонтируем образ и запустим ВМ. Запустим командную строку от имени администратора. Чтобы случайно не попортить загрузчик сделаем его копию.

Выключаем ВМ и снова монтируем её диск в линуксе. Создадим какую-нибудь папку, где будем потрошить загрузчик дизассемблером и скопируем туда распакованный образ. Теперь скормим полученный "экзешник" дизассемблеру.

Запустим "иду" и откроем в ней добытый файл. IDA верно идентифицирует файл как разрядный исполняемый файл формата PE. Теперь, если в IDA Pro установлен плагин для работы с pdb-файлами, по ходу дизасеммблирования нам предложат загрузить отладочные символы, и не откуда нибудь, а сайта Microsoft. Ага, слева мы видим прототипы функций, содержащихся в исследуемом файле, благодаря тому что согласились загрузить отладочные символы.

Это очень сильно облегчит нам последующую работу. А пока определим точку входа в код загрузчика, и нетрудно догадаться что это будет функция BmMain. Жмем ОК и перемещаемся на начало кода. Видим мы заголовок функции BmMain с внушительным списком локальных переменных, и чуть ниже и сам код функции. Разобраться в мешанине ассемблерного кода довольно трудно, да и не зачем этого делать. Прежде всего определимся с тем, какие функции загрузчика мы хотим изучить. Я что-то там говорил о VHD? Ну так поищем среди кода что-нибудь, касающееся виртуальных дисков.

В строке поиска набираем "vhd" и…. Среди них VhdOpen очевидно будет отвечать за открытие виртуального диска, а вот например VhdiVerifyVhdFooter как пить дать отвечает за проверку футера VHD-диска на корректность. То есть мы примерно представляем себе, куда будем ставить точки останова в отладчике. Кстати, поговорить об отладке самое время. Ни в коем разе не используйте ключ -enable-kvm применяющий аппаратную виртуализацию.

При её использовании отладка в QEMU не работает. Нам сообщат, что некоторый процесс уже запущен и ожидает подключения отладчика — не хотим ли мы присоединится к нему? Великолепно, но теперь мы должны добраться до того места, где начинает выполнятся bootmgr. Ставим точку останова на функции BmMain. Нажимаем на панели инструментов список точек останова, жмем Insert на клавиатуре и указываем на каком адресе мы хотим прервать выполнение кода и перейти в отладку.

Если же мы хотим поставить бряк на нужную нам функцию, то идем в главное меню и открываем в сеансе отладки список функций: В появившемся списке правой кнопкой мыши вызываем контекстное меню и выбираем Add breakpoint. Теперь жмем F9 и после недолгого ожидания попадаем в самое начало кода загрузчика. Теперь мы можем проходить код по шагам, смотреть значения регистров и стека, отслеживать стек вызовов и так далее.

В какой-то степени отладчик, встроенный в IDA удобен и интуитивно понятен. Возможно меня спросят — а можно ли использовать GDB? Можно, запускаем ВМ в режиме отладки, запускаем gdb в консоли. Почти, потому что тут мы не сумеем использовать отладочные символы от Microsoft, ибо GDB их не понимает. Те, кто занимается разработкой драйверов для ОС Windows безусловно знакомы с этим замечательным отладчиком. Замечателен он тем, что имеет возможности сравнимые с возможностями линуксового GDB.

Единственным его недостатком является жуткий способ настройки его интерфейса. После выбора пункта "Изменить букву диска или путь к диску" у нас появится следующее окно выбора:. После нажатия кнопки "ОК" логическое имя будет присвоено разделу и он станет доступен в проводнике. Содержимое его, которое так нас интересует, наконец-то можно будет увидеть.

Но это еще не все, поскольку некоторые файлы и директории раздела имеют атрибут "скрытый", нам необходимо включить отображение скрытых и системных файлов. Включили в свойствах папки? А теперь, давайте взглянем на искомый нами bootmgr, который расположен прямо в корне партиции:.

На рисунке бывает порой сложно, а чаще и вовсе не получается наглядно отобразить всю структуру раздела, поэтому приведу его в виде текстового списка. Итак, содержимое скрытого раздела "Зарезервировано системой" выглядит следующим образом:. По комментарию напротив справа от каждого файла в окне представления вы можете увидеть краткое описание функционального назначения.

Хотелось бы сделать некое лирическое отступление и поговорить о файлах, имеющих расширение. Если Вы были достаточно внимательны, то обратили внимание, что одноименные файлы с расширением. Это объясняется тем, что. Проще говоря - это перевод интерфейса программы. Технология впервые была использована в ОС Windows Vista и предназначалась для связывания ресурсов, описанных в языковом файле текст меню, диалоговых окон, строк помощи и прочее.

Но, вернемся к основному повествованию. Управление bootmgr Windows 7 получает непосредственно после своей загрузки кодом загрузочного сектора раздела PBR. По анализу кода загрузочного сектора раздела PBR в предыдущих статьях нам удалось определить, что первый файл, который загружается и выполняется после кода PBR, это файл bootmgr, находящийся в корне скрытого системного раздела. Интересно было бы посмотреть на структуру этого файла. С чего мы начнем изучение?

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

Начиная со смещения предположительно идет код, напоминающий по виду обычный машинный код реального режима aka ассемблер. Вероятно, у bootmgr есть участок кода, который исполняется в реальном битном режиме процессора сразу после кода PBR, поскольку последний не успел перевести процессор ни в какой другой режим.

Я думаю, что код этот производит некие подготовительные действия. Насколько мне удалось понять, этот образ располагается вплоть до адреса BF0 , то есть имеет размер в байта h.

И, судя по структуре, он содержит заголовок, но содержит не все типовые секции такие как секции кода, данных, ресурсов. Давайте посмотрим, как с ее помощью построить загрузочный файл BCD с нуля. Рабочий файл BCD обычно включает как минимум два объекта. Во-первых, это диспетчер загрузки, содержащий всю загрузочную информацию, в частности указание на то, какой элемент списка загрузки операционных систем следует использовать по умолчанию, и время ожидания выбора пользователя, если существует несколько элементов списка загрузки операционных систем.

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