修改Windows的MBR
我需要修改Windows的MBR,我真的很想从Windows进行此操作。
这是我的问题。我知道可以通过调用CreateFile在物理设备上获取句柄。 MBR是否始终位于\。\ PHYSICALDRIVE0上?另外,我仍在学习Windows API以直接从磁盘读取。是我将需要使用readabsolutesectors和writeabsolutesectdors这两个函数来读写包含MBR的磁盘扇区吗?
根据自己的经验进行编辑。
MBR并不总是位于\。\ PHYSICALDRIVE0上。另外,我们可以通过使用包含MBR的驱动器的设备名称调用CreateFile来写入引导扇区(至少在XP中为Administrator)。同样,我们可以通过简单地调用WriteFile并传递通过调用CreateFile创建的设备的句柄来写入此驱动器。
编辑以解决Joel Coehoorn。
我需要编辑MBR,因为我正在研究一个项目,该项目需要在BIOS中的POST之后但允许Windows引导之前修改硬件寄存器。我们的计划是通过修改引导程序以在Windows启动之前执行我们的代码来进行这些更改。
编辑Cd-MaN。
谢谢(你的)信息。但是,答案中没有我不知道的任何内容,答案也没有解决我的问题。出于多种原因,注册表尤其绝对不会满足我们的需求。主要原因是Windows是将随我们的产品一起运行的多个软件层中的最高层。这些更改甚至需要在较低级别运行之前发生,因此注册表将无法工作。
P.S.用于Cd-MaN。
据我了解,我们提供的信息不太正确。对于Vista,我认为如果要写入的扇区是引导扇区,则可以写入卷。请参阅http://support.microsoft.com/kb/942448
解决方案
回答
修改引导加载程序是不好的主意。以下是一些可能的陷阱:
- 它可能会杀死全盘加密产品(Truecrypt,PGP,Vista的BitLocker等)
- 可能会使AV产品跳闸(吓ing用户)
- 它可能会杀死复杂的启动方案(链式启动加载程序等)
- 使用TPM模块时,它将终止信任链(因为它会在执行MBR之前检查其更改)
- 从Vista开始不允许直接访问磁盘(仅使用驱动程序)
确实应该考虑其他选择(例如在Windows启动期间通过设置为在启动时或者Windows启动后加载的驱动程序修改硬件寄存器)。如果修改就像写入端口一样简单,即:
OUT AX, BL
然后存在所有版本的Window都可以执行此操作的驱动程序(可以从某个端口读取/向某个端口写入值),可以从用户模式调用该驱动程序。
回答
一旦启动操作系统,MBR通常是出于病毒原因而受到保护的,这是本书中最古老的病毒技巧之一,可以追溯到将病毒从软盘传播到软盘。
即使不受限制,我们也必须编写低级代码,它不是文件系统的一部分,而是存在于硬盘驱动器上的特定位置。
因此,我们几乎只能编写低级代码(大多数程序在汇编中实现此功能)或者针对16位DOS的C代码。
这些程序大多数都使用BIOS接口(我相信是13h)来直接访问磁盘的扇区。我们可以使用一些内联程序集或者编译器提供的接口以C语言访问它们。但是,如果没有操作系统的合作,通常将无法访问BIOS,因此,程序将再次仅限于DOS。如果我们可以访问这些硬盘,则几乎可以自由出游BIOS的好处是,我们不必担心系统中存在哪种类型的HD,即使RAID卡通常将其插入BIOS例程中也可以在不知情的情况下进行访问。 ATA或者SATA控制器在内存中的位置,并在该低级别上执行命令。
但是,如果绝对必须在操作系统内访问它,则几乎必须编写设备驱动程序来访问BIOS或者HD控制器所在的内存空间。不过,我不建议这样做,因为要处理现代计算机,这非常棘手,因为它们会将HD控制器放在内存中的不同位置,具有不同的IRQ,并且每个芯片组都变得更加深奥了,因为它们可以为BIOS进行启动,然后使用Windows的特定驱动程序。他们跳过了所有其他被认为与其他控制器兼容的接口,因为兼容成本更高。
我们可能会发现,在Windows内部的驱动程序级别,我们将拥有直接(或者直接伪造)访问驱动器扇区的方法,但是由于上述病毒问题,它们也可能受到很好的保护。
祝你好运!
回答
也许PXE引导方案可以为我们提供帮助?只需在我们制作的PXE映像上引导即可,该映像会修改我们需要修改的硬件寄存器,然后将控件返回到主引导记录或者活动分区的引导记录。
这样,我们不必修改启动记录。