MBR主分区拓展分区逻辑分区介绍

Blackbox

发布日期: 2018-12-11 09:07:50 浏览量: 1101
评分:
star star star star star star star star star_border star_border
*转载请注明来自write-bug.com

背景

主引导记录(MBR,Main Boot Record)是位于磁盘最前边的一段引导(Loader)代码。它负责磁盘操作系统(DOS)对磁盘进行读写时分区合法性的判别、分区引导信息的定位,它由磁盘操作系统(DOS)在对硬盘进行初始化时产生的。

MBR 位于硬盘的 0 磁头、0 柱面、1 扇区,大小为 512 字节。它里面包含着操作系统里的分区信息。现在,我就简单介绍怎么从MBR作为入口点,获取系统的主分区、拓展分区以及逻辑分区。

硬盘基础知识介绍

硬盘物理结构

硬盘的物理结构如下面两幅图片所示。正面包括:空气过滤片、主轴、音圈马达、永磁铁、磁盘、磁头、磁头臂等。

反面包括:主控制芯片、数据传输芯片、高速数据缓存芯片等,其中主控制芯片负责硬盘数据读写指令等工作。

硬盘逻辑结构

新买来的硬盘是不能直接使用的,必须对它进行分区并进行格式化才能储存数据
经过格式化分区之后,逻辑上每个盘片的每一面都会被分为磁道、扇区、柱面这几个虚拟的概念。

磁道

当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道。

扇区

分区格式化磁盘时,每个盘片的每一面都会划分很多同心圆的磁道,而且还会将每个同心圆进一步的分割为多个的圆弧,这些圆弧就是扇区。

柱面

硬盘通常由一个或多个盘片构成,而且每个面都被划分为数目相等的磁道,并从外缘开始编号(即最边缘的磁道为0磁道,往里依次累加)。如此磁盘中具有相同编号的磁道会形成一个圆柱,此圆柱称为磁盘的柱面磁盘的柱面数与一个盘面上的磁道数是相等的。每个盘面都有一个磁头,因此,盘面数等于总的磁头数

硬盘工作原理

硬盘的工作原理就是利用盘片上的磁性粒子的极性来记录保存数据的,其实就是电磁转换的原理。

硬盘存储数据的位置是在盘片的表面,但是盘片的材料一般为合金材料或者是玻璃材料,并非磁性材料,因此不具备记录数据的条件,需要在盘片上附着一层磁性粉,这些磁粉在硬盘工作过程中,通过磁头释放磁性信号将磁粉做以不同的磁化从而记录数据,另外,硬盘在进行数字记录是,首先要将记录的数据信息转为二进制数,然后将磁化状态记录在磁粉介质之上。

硬盘驱动器加电后,磁盘片由主轴电机驱动进行高速旋转,设置在盘片表面的磁头会在电路控制下径向移动到指定位置然后将数据存储或读出来;当系统向硬盘写入数据时,磁头中写数据电流产生磁场使盘片表面磁性物质状态发生改变,并在写电流磁场消失后仍能保持,当系统从硬盘中读取数据时,磁头经过盘片指定区域,盘片表面磁场使磁头产生感应电流或线圈阻抗产生变化,经过相关电路处理后还原成数据。

MBR介绍

MBR (Master Boot Record),即主引导记录,又叫做主引导扇区。是计算机开机后访问硬盘时所必须要读取的首个扇区,它在硬盘上的三维地址为:0磁头、0柱面、1扇区。

MBR结构

512 字节的 MBR ,可细分为 5 个部分:代码区(440字节)、选用磁盘标志(4字节)、保留字段(2字节)、主分区表(64字节)、结束标志(2字节)。其中,主分区表中,存储着 4 个主分区的信息,每个分区信息大小为 16 字节。

主分区表结构

硬盘分区表占据主引导扇区的 64 个字节,可以对 4 个分区的信息进行描述,其中每个分区的信息占据 16 个字节。那么,每个分区表 16 字节可以分成 8 个部分:分区状态(1字节)、分区起始磁头号(1字节)、分区起始扇区号(2字节)、文件系统标志(1字节)、分区结束磁头号(1字节)、分区结束扇区号(2字节)、分区起始相对扇区号(4字节)、分区总扇区数(4字节)。

其中,只有活动分区才可以引导系统,只能设置一个活动分区,随便哪个分区都可以安装系统,但是只有活动分区可以引导系统,系统引导文件都是放在活动分区的。

拓展分区和逻辑分区

可以把扩展分区整体上也看做是一个“主分区”,在主分区表中也有一个表项描述了这个扩展分区的信息,就像上文中描述主分区的表项类似,这个扩展分区表项描述了扩展分区的起始扇区位置和整个扩展分区的大小,在这个扩展分区内部,我们可以创建多个逻辑分区,你可以把整个扩展分区当作是一个新的“硬盘”,在扩展分区内部的逻辑分区是由与之相对应的逻辑分区表项进行维护的。

四个表项全部对应的是主分区,这四个分区全部都是由主分区表这个结点进行维护管理,也就是说一个结点对应多个主分区。

在扩展分区中,每一个逻辑分区都有一个与之对应的逻辑管理结点,逻辑结点中,第一个表项描述了当前结点对应的逻辑分区信息,第二个表项描述的下一个逻辑管理结点的位置。逻辑分区表项的意义和主分区表项的意义是一致的,但是需要注意的是表项中给出的起始扇区地址,这些地址是相对的地址。

例子

Win7 旗舰版 32 位系统中,有 3 个磁盘:C盘(系统盘,大小28.9GB)、E盘(主分区,大小390MB)、F盘(逻辑分区,256MB)、G盘(逻辑分区,375MB)。

主分区表分析

我们直接使用 WinHex 获取从MBR 中获取 64 字节分区表的数据,数据截图如下所示:

我们结合上述讲到的分区表字段意义来对这 64 字节的数据进行分析。

第一个主分区表

分区状态(1字节):0x80;分区起始磁头号(1字节):0x20;分区起始扇区号(2字节):0x0021;文件系统标志(1字节):0x07;分区结束磁头号(1字节):0xFE;分区结束扇区号(2字节):0xFFFF;分区起始相对扇区号(4字节):0x00000800;分区总扇区数(4字节):0x039FF000。

其中,分区状态为0x80,表示激活分区;文件系统标志为 0x07,表示 NTFS 文件系统;分区总扇区数 0x039FF000,乘以每个扇区大小 512 字节,得到分区大小约为 28.9 GB。

第二个主分区表

分区状态(1字节):0x00;分区起始磁头号(1字节):0xFE;分区起始扇区号(2字节):0xFFFF;文件系统标志(1字节):0x07;分区结束磁头号(1字节):0xFE;分区结束扇区号(2字节):0xFFFF;分区起始相对扇区号(4字节):0x039FF800;分区总扇区数(4字节):0x000C3800。

其中,分区状态为0x00,表示非激活分区;文件系统标志为 0x07,表示 NTFS 文件系统;分区总扇区数 0x000C3800,乘以每个扇区大小 512 字节,得到分区大小约为 391 M。

第三个主分区表

分区状态(1字节):0x00;分区起始磁头号(1字节):0xFE;分区起始扇区号(2字节):0xFFFF;文件系统标志(1字节):0x0F;分区结束磁头号(1字节):0xFE;分区结束扇区号(2字节):0xFFFF;分区起始相对扇区号(4字节):0x03AC3001;分区总扇区数(4字节):0x0013BFFF。

其中,分区状态为0x00,表示非激活分区;文件系统标志为 0x0F,表示拓展分区;分区总扇区数 0x0013BFFF,乘以每个扇区大小 512 字节,得到分区大小约为 631 M,恰好是两个逻辑分区 F 盘和 G 盘的大小总和。

拓展分区分析

我们继续对上面的拓展分区进行详细分析。

上面第 3 个主分区表的信息为拓展分区的信息:分区状态(1字节):0x00;分区起始磁头号(1字节):0xFE;分区起始扇区号(2字节):0xFFFF;文件系统标志(1字节):0x0F;分区结束磁头号(1字节):0xFE;分区结束扇区号(2字节):0xFFFF;分区起始相对扇区号(4字节):0x03AC3001;分区总扇区数(4字节):0x0013BFFF。

于是,我们来到其实相对扇区为 0x03AC3001 的位置,这里就是拓展分区的开始。那么获取拓展分区的 64 字节的主分区表,在扩展分区中,每一个逻辑分区都有一个与之对应的逻辑管理结点,逻辑结点中,第一个表项描述了当前结点对应的逻辑分区信息,第二个表项描述的下一个逻辑管理结点的位置。

第一个逻辑结点表项

分区状态(1字节):0x00;分区起始磁头号(1字节):0xFE;分区起始扇区号(2字节):0xFFFF;文件系统标志(1字节):0x07;分区结束磁头号(1字节):0xFE;分区结束扇区号(2字节):0xFFFF;分区起始相对扇区号(4字节):0x0000003F;分区总扇区数(4字节):0x0007FFC0。

其中,分区状态为0x00,表示非激活分区;文件系统标志为 0x07,表示 NTFS 文件系统;分区总扇区数 0x0007FFC0,乘以每个扇区大小 512 字节,得到分区大小约为 256 M。

要额外注意的是,分区起始相对扇区号(4字节):0x0000003F,它是相对于主分区表中的拓展分区的起始扇区号来说的,所以,它实际上的绝对扇区号为 0x03AC3001 + 0x0000003F = 0x03AC3040。

第二个逻辑节点表项

分区状态(1字节):0x00;分区起始磁头号(1字节):0xFE;分区起始扇区号(2字节):0xFFFF;文件系统标志(1字节):0x05;分区结束磁头号(1字节):0xFE;分区结束扇区号(2字节):0xFFFF;分区起始相对扇区号(4字节):0x0007FFFF;分区总扇区数(4字节):0x000BC000。

其中,分区状态为0x00,表示非激活分区;文件系统标志为 0x05,表示 拓展分区逻辑结点;分区总扇区数0x000BC000,乘以每个扇区大小 512 字节,得到分区大小约为 375 M。

逻辑分区

我们继续对上面的拓展分区中的第二项逻辑结点表项继续分析。

分区状态(1字节):0x00;分区起始磁头号(1字节):0xFE;分区起始扇区号(2字节):0xFFFF;文件系统标志(1字节):0x05;分区结束磁头号(1字节):0xFE;分区结束扇区号(2字节):0xFFFF;分区起始相对扇区号(4字节):0x0007FFFF;分区总扇区数(4字节):0x000BC000。

要额外注意的是,分区起始相对扇区号(4字节):0x0007FFFF,它是相对于主分区表中的拓展分区的起始扇区号来说的,所以,它实际上的绝对扇区号为 0x03AC3001 + 0x0007FFFF = 0x03B43000。

于是,我们来到其实相对扇区为 0x03B43000 的位置,这里就是拓展分区的开始。那么获取拓展分区的 64 字节的主分区表:

这时,只有一个逻辑节点节表项,以为是最后一个逻辑分区了。

分区状态(1字节):0x00;分区起始磁头号(1字节):0xFE;分区起始扇区号(2字节):0xFFFF;文件系统标志(1字节):0x07;分区结束磁头号(1字节):0xFE;分区结束扇区号(2字节):0xFFFF;分区起始相对扇区号(4字节):0x00000800;分区总扇区数(4字节):0x000BB800。

要额外注意的是,分区起始相对扇区号(4字节):0x00000800,它是相对于0x03B43000 来说的,所以,它实际上的绝对扇区号为 0x03B43000 + 0x00000800 = 0x03B43800。

这样,我们这个例子到这里就结束了。我们直接从 MBR 扇区中,获取到了系统的所有主分区、拓展分区以及逻辑分区的大小及其绝对起始扇区号。接下来,只需要再了解 NTFS 文件系统的格式,就可以根据硬盘数据直接定位到硬盘上的文件数据了。这样,就可以实现直接修改硬盘数据来操作文件,而不需要装个操作系统。

参考

参考自《Windows黑客编程技术详解》一书

上传的附件

发送私信

一个人的喜悦,无非是岁月静好,现世安稳

10
文章数
11
评论数
最近文章
eject