Модификация MBR Windows - PullRequest
       30

Модификация MBR Windows

7 голосов
/ 02 сентября 2008

Мне нужно изменить MBR Windows, и я действительно хотел бы сделать это из Windows.

Вот мои вопросы. Я знаю, что могу получить дескриптор на физическом устройстве с помощью вызова CreateFile. Всегда ли MBR будет на \\. \ PHYSICALDRIVE0? Кроме того, я все еще изучаю Windows API для чтения непосредственно с диска. Являются ли readabsolutesectors и writeabsolutesectdors двумя функциями, которые мне понадобятся для чтения / записи в секторах диска, которые содержат MBR?

Править из того, что я узнал сам. MBR не всегда будет на \\. \ PHYSICALDRIVE0. Также вы можете записать в загрузочный сектор (по крайней мере, с правами администратора в XP), вызвав CreateFile с именем устройства, на котором находится MBR. Кроме того, вы можете записать на этот диск, просто вызвав WriteFile и передав дескриптор устройства, созданного путем вызова CreateFile.

Изменить адрес Джоэл Coehoorn. Мне нужно отредактировать MBR, потому что я работаю над проектом, который должен изменить аппаратные регистры после POST в BIOS, но до того, как Windows будет разрешено загружаться. Мы планируем внести эти изменения, изменив загрузчик так, чтобы он выполнял наш код перед загрузкой Windows.

Редактировать для Cd-MaN. Спасибо за информацию. Однако в вашем ответе нет ничего такого, чего я не знал, и ваш ответ не отвечает на мой вопрос. В частности, реестр не будет делать то, что нам нужно, по нескольким причинам. Основная причина в том, что Windows - самый высокий уровень среди множества программных уровней, которые будут работать с нашим продуктом. Эти изменения должны произойти еще до запуска нижних уровней, поэтому реестр не будет работать.

P.S. для CD-MaN. Насколько я понимаю, информация, которую вы предоставляете, не совсем верна. Для Vista, я думаю, вы можете записать на том, если сектора, в которые пишутся, являются загрузочными секторами. Смотри http://support.microsoft.com/kb/942448

Ответы [ 3 ]

7 голосов
/ 02 сентября 2008

После запуска ОС MBR обычно защищается по вирусным причинам - это один из самых старых вирусных приемов в книгах - восходит к передаче вирусов с дискет на дискеты.

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

Из-за этого вы в значительной степени ограничены написанием низкоуровневого (большинство программ реализует это в ассемблере) или кода C, предназначенного для 16-битной DOS.

Большинство этих программ используют интерфейс BIOS (я полагаю, 13 часов) для прямого доступа к секторам диска. Вы можете получить к ним доступ в C, используя некоторую встроенную сборку или предоставленные компилятором интерфейсы. Как правило, вы не получите доступ к BIOS без сотрудничества с ОС, поэтому ваша программа, опять же, будет ограничена DOS. Если вы можете получить к ним доступ, вы почти дома свободны - хорошая вещь в BIOS - вам не нужно беспокоиться о том, какой тип HD находится в системе - даже карты RAID часто вставляются в процедуры BIOS, чтобы к ним можно было получить доступ не зная, где в памяти находится контроллер ATA или SATA, и выполняя команды на этом низком уровне.

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

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

Удачи!

4 голосов
/ 02 сентября 2008

Модификация загрузчика плохая, плохая идея. Вот только некоторые из возможных ошибок:

  • потенциально может уничтожить продукты полного шифрования диска (Truecrypt, PGP, Vista BitLocker и т. Д.)
  • это может привести к отключению AV-продуктов (пугая пользователей)
  • это потенциально убьет сложные сценарии загрузки (цепные загрузчики и т. Д.)
  • он уничтожит цепочку доверия при использовании модуля TPM (потому что проверяет MBR на наличие изменений перед его выполнением)
  • прямой доступ к диску не разрешен, начиная с Vista (только с использованием драйверов)

Альтернативы (например, изменение аппаратного регистра во время загрузки Windows через драйвер, который настроен на загрузку во время загрузки или после загрузки Windows) действительно должны быть рассмотрены. Если изменение так же просто, как запись в порт, например:

OUT AX, BL

тогда существуют драйверы для всех версий Window, которые могут это делать (чтение / запись значения с / на определенный порт), которые можно вызывать из пользовательского режима.

2 голосов
/ 16 сентября 2008

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

Таким образом, вам не нужно изменять загрузочные записи.

...