MBR详细分析

搜索公众号:itxxgh  (IT学习干货),全公益,免费,定期,提供,《IT学习教程》。不会骚扰大家,只需轻点关注,也会传播《中华传统文化》传播正能量,扫码关注


分区表是硬盘中很重要的一个表,它描述了硬盘各个分区的大小和起始位置等信息,倘若磁盘分区表损坏将会导致硬盘分区丢失,数据将无法读取和写入.本文这里涉及的是MBR格式的分区表,GPT格式的请自行百度。在阅读本文之前你需要了解硬盘的一些基本的信息,比如什么是磁头、柱面和扇区,可以参见这篇文章:http://www.youranshare.com/push/topics/other/128.html 

用winhex足矣:


什么是MBR分区表?

传统的分区方案(称为MBR分区方案)是将分区信息保存到磁盘的第一个扇区(0柱面,0磁头,1扇区,偏移位置为0x1BE)中的64个字节中,每个分区项占用0x10个字节,这0x10个字节中存有活动状态标志、文件系统标识、起止柱面号、磁头号、扇区号、隐含扇区数目(4个字节)、分区总扇区数目(4个字节)等内容。由于MBR扇区只有0x40个字节用于分区表,所以只能记录4个分区的信息。这就是硬盘主分区数目(注意是主分区不能超过4个的原因。后来为了支持更多的分区,引入了扩展分区及逻辑分区的概念。但每个分区项仍用16个字节存储。
主分区数目不能超过4个的限制,很多时候,4个主分区并不能满足需要。另外最关键的是MBR分区方案无法支持超过2TB容量的磁盘。因为这一方案用4个字节存储分区的总扇区数,最大能表示2^32次方个扇区,按每扇区512字节计算,每个分区最大不能超过2TB。磁盘容量超过2TB以后,分区的起始位置也就无法表示了。

每一个分区表项占用0x10个字节,其相关的含义如下:

  1. 偏移量0:这个字节表示活动标志,若为0x00h则表示该分区为非活动分区,若为0x08h则表示该分区为活动分区
  2. 偏移量1~3: 这3个字节表示该分区的起始磁头号(1字节)、扇区号(2字节低6位)、柱面号(2字节高2位+3字节)号
  3. 偏移量4:这个字节表示分区文件系统标志,0x05h,0x0Fh 表示扩展分区;0x06h表示FAT16分区;0x0Bh表示FAT32分区;0x07h表示NTFS 分区(当然有其他的标识)
  4. 偏移量5~7:这3个字节表示该分区的结束磁头号、扇区号、柱面号
  5. 偏移量8~11:这4个字节表示逻辑起始扇区号
  6. 偏移量12~15:这4个字节表示分区占用的扇区数目

在上面的含义中分别有3个字节表示起始和结束的柱面、磁头和扇区号,这种寻址方式是CHS寻址,最大只能支持8GB,8GB现在来说已经很小了,所以提出了LBA(Logical Block Address)的寻址方式,LBA就是为所有的扇区从0开始编号,访问的时候直接给出对应的扇区号就行了,每一个分区表项中8~11表示了起始的LBA,12~15表示了结束的LBA,因为是32位,所以最大就能支持2TB容量的硬盘了,例如下面是我的硬盘上的主分区表的一项:

80 01 01 00 07 FE FF FF  3F 00 00 00 36 C1 C0 08

按照对应的格式进行划分  (80) (01 01 00) (07) (FE FF FF) (3F 00 00 00) (36 C1 C0 08),我们得到的结果就是该分区的激活标识为80表示激活,(01 01 00)起始的柱面、磁头和扇区号,文件系统为07表示NTFS的,(FE FF FF)表示结束的柱面、磁头和扇区(分区已经超过8G了,这个数据就无效了),(3F 00 00 00)表示分区的起始扇区LBA为0x0000003F(注意是小端),(36 C1 C0 08)表示当前分区大小为0x08C0C136

主分区表项较为简单,我先来说一下主分区表定位主分区的过程

我把我的U盘格式化成了4个主分区,其中第一个分区和第二个分区之间有间隙,如图DiskGenius显示的图片


因为都是主分区,所以在我们的MBR扇区应该有四个表项,我们用工具看一下我们的四主分区表项目:


  1. 表项1,80 20 21 00 07 B2 59 F400 08-00 00DB B4 7A 00 描述了第1个分区激活,起始LBA为0x00000800,大小为0x007AB4DB
  2. 表项2,00 6B A2 0A 07 FE FF FF 00 10-80 00 00 08 80 00描述了第2个分区不是激活,起始LBA为0x00801000,大小为0x00800800
  3. 表项3,00 FE FF FF 07 FE FF FF 00 18-00 01 00 08 80 00 描述了第3个分区不是激活,起始LBA为0x01001800,大小为0x00800800
  4. 表项4,00 FE FF FF 07 FE FF FF 00 20-80 01 00 80 54 00描述了第4个分区不是激活,起始LBA为0x01802000,大小为

根据上面的分析我们可以绘制出当前分区边界的图:


图中只有一个管理结点,这是因为这些都是主分区,由主分区表进行管理,所以四个主分区都在主管理结点内部;图中我们还看到了一个分区间隙,这个间隙是怎么来的呢?我们来计算一下,分区表告诉我们分区一占用的位置为:0x00000800~(0x00000800+0x007AB4DB)=0x007ABCDB,分区二占用的位置为0x00801000~(0x00801000+0x00800800)=0x01001800,从数据中可以看到分区一的结束位置不是分区二的开始位置,那么就很明显了,这个两个分区没有连续,这就是导致间隙的原因。如果分区全部是主分区,那么我们的分区管理可以用下面的图描述:


如果全为主分区,那么就只能创建4个分区,这很难满足我们的要求,扩展分区便应运而生




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

上文中,我们说到如果我们的硬盘全部都是主分区的话,那么分区管理的图可以按照下面的方式进行描述:


从上图中可以看到,四个表项全部对应的是主分区,这四个分区全部都是由主分区表这个结点进行维护管理,也就是说一个结点对应多个主分区。如果我们的主分区表中的表项2对应的分区是一个扩展分区,扩展分区内部有多个逻辑分区的话,那么我们的主管理结点就没办法对逻辑分区进行描述了,这个时候就需要逻辑管理结点来对逻辑分区进行描述了。

在扩展分区中,每一个逻辑分区都有一个与之对应的逻辑管理结点,逻辑管理结点与硬盘的主管理结点结构是一样的,不同的是逻辑管理结点中的四个表项只有前两个表项是有用的,逻辑结点中,第一个表项描述了当前结点对应的逻辑分区信息,第二个表项描述的下一个逻辑管理结点的位置;这样看来这是一个二叉树的结构,我们可以用下图描述扩展分区内的逻辑分区的关系:


 

逻辑分区表项的意义和主分区表项的意义是一致的,但是需要注意的是表项中给出的起始扇区地址,这些地址是相对的地址,来举个例子,这里把U盘格式化出一个主分区,一个扩展分区,扩展分区内部有3个逻辑分区,我们来分析一下,如图所示:



我们来看一下主分区表的结构:


80 20 21 00 07 0E 70 DE 00 08 00 00 00 28 75 00
00 0E 71 DE 0F FE FF FF 00 30 75 00 00 70 5F 01
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

可以看到,主分区表中只有2项,第一项 (80) (20 21 00) (07) (0E 70 DE) (00 08 00 00) (00 28 75 00),80表示激活,07表示NTFS,分区起始地址0x00000800,大小为0x00752800,既然第一个主分区从0x00000800开始的,分区的上面是结点,你说第一个主管理结点大小是多少?肯定是0x800;好我们接着看第二项,(00) (0E 71 DE) (0F) (FE FF FF) (00 30 75 00) (00 70 5F 01),00表示没激活,0F表示扩展分区,扩展分区的起始地址是0x00753000 ,大小为0x015F7000,这个时候要注意了,我前面说扩展分区可以当作一个新的“硬盘”,那么这个硬盘得有一个起始的地址吧,我们记作L0,那么L0这里就是0x00753000。

好了,我们已经知道L0=0x00753000了,我们也知道扩展分区内的节点是一个二叉树的结构了,那么我们现在开始进入扩展分区吧,进入到0x00753000这个扇区,这就是第一个逻辑管理节点所在的扇区了,这个逻辑结点里面有两项:

 

第一项 (00) (2F 52 DE) (07) (1D E1 BC) (00 08 00 00) (00 28 75 00) 描述的是当前逻辑节点管理的逻辑分区信息,这一项说当前的逻辑分区开始于相对于当前结点0X00000800的位置也就是当前结点的起始位置0x00753000+0X00000800=0x753800,大小为0x00752800,这样第一个逻辑分区就完成了

第二项 (00) (0E 71 DE) (0F) (FE FF FF) (00 30 75 00) (00 30 75 00)描述的是下一个逻辑管理结点的位置,注意这里它描述的下一个结点的相对位置为0x00753000,相对的是L0,也就是扩展分区的起始地址,所以我们计算出下一个管理结点的位置为L0+0x00753000=0x00EA6000 (注意我这里刚好巧合L0也是0x753000了= =)

我们从前面的分析知道了第二个逻辑结点为0x00EA6000,我们进入这个扇区看看,这个逻辑节点也有2项:


 

00 3E C3 BC 07 FE FF FF 00 08 00 00 00 28 75 00
00 FE FF FF 05 FE FF FF 00 60 EA 00 00 10 75 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

第一项 (00) (3E C3 BC) (07) (FE FF FF) (00 08 00 00) (00 28 75 00)计算得出 当前的逻辑分区起始扇区:当前逻辑节点的起始+0x000000800 = 0x00EA6000+0x000000800=0x00EA6800,大小为0x00752800

第二项 (00) (FE FF FF) (05) (FE FF FF) (00 60 EA 00) (00 10 75 00),描述的是下一个结点的位置,可以得出下一个结点的起始扇区为:L0+0x00EA6000 = 0x00753000+0x00EA6000=0x015F9000

后面的我们就不分析了,通过上面的例子我想现在你应该已经能准确计算出你的MBR硬盘的分区信息了,总结一下两篇文章的主要方法:

  1. 找到硬盘0号逻辑扇区,读取0x40个字节的主分区表信息
  2. 第一个分区前面的部分就是主管理节点的大小(主管理节点从0x00000000开始的)
  3. 如果是扩展分区,就将扩展分区作为一个新的“硬盘”,记录下这个新的“硬盘”起始地址L0,开始进入逻辑分区管理结点,逻辑管理结点第一项描述当前分区的信息,其起始位置相对于当前管理结点的开始,第二项描述下一个管理结点的位置,其位置相对于L0进行计算

另外值得说的是硬盘的分区间隙问题,间隙产生的原因是分区之间不连续照成的,比如上一个结点描述的上一个分区结束位置不是当前结点的开始位置,这样就会产生一个间隙,结点与其管理的分区之间是不存在间隙的,间隙只会产生在分区与分区之间或者上一个分区与下一个结点之间.

总结这两篇文章,我画了一张图来描述MBR的管理:


 


  • 5
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: MBR(Master Boot Record)是计算机系统的启动程序,位于硬盘的第一个扇区,一般占用512字节。它包含了分区表以及启动操作系统所需的代码。IDA是一款反汇编软件,可以用于对二进制文件进行静态分析。 使用IDA对MBR进行二进制静态分析,可以深入了解MBR的功能和执行流程。 首先,在IDA中打开MBR的二进制文件,IDA会自动识别并显示程序的指令流。可以通过分析指令之间的跳转、数据处理等关系,还原出MBR的代码逻辑。 其次,IDA可以对二进制文件进行反汇编,将机器指令转换成可读性更高的汇编指令,方便程序员理解和分析。通过IDA的反汇编功能,可以逐步追踪程序的执行路径,查看各个函数的调用关系,识别出程序的功能模块。 此外,IDA还提供了图形化界面,用于展示程序的控制流图、函数调用图等可视化信息,方便用户理解程序的结构和逻辑。 最后,通过IDA的静态分析功能,可以查找程序中的漏洞和恶意代码。例如,可以搜索特定的字符串、调用系统函数的位置,以便检测程序是否含有病毒、后门等恶意代码。 总的来说,利用IDA进行MBR二进制静态分析,可以帮助研究人员深入了解MBR的工作原理和代码逻辑,识别恶意代码,加强对计算机系统的安全防护。 ### 回答2: IDA是一款十分常用的二进制静态分析工具,它主要用于对二进制文件进行逆向工程和安全分析。二进制文件通常是以机器语言编写的,分析这样的文件是十分困难的。然而,IDA通过对二进制文件进行分析,可以还原出源代码的一些结构和逻辑。 首先,IDA的静态分析功能使得我们可以在不运行程序的情况下查看程序的执行流程、函数调用、内存分配等。我们可以分析程序的汇编指令,了解每条指令的作用和执行过程,进而还原出程序的整体逻辑。 其次,IDA提供了反汇编功能,可以将机器码反汇编成汇编代码,这样我们就可以看到程序从二进制代码转换为汇编代码的过程。这对于探查程序中隐藏的功能和漏洞非常有用。 此外,IDA还提供了交互式调试功能,可以在不运行程序的情况下直接查看和修改内存中的值,对程序的执行进行调试,并寻找和解决问题。 总之,通过IDA的二进制静态分析,我们可以更好地理解程序的功能和结构,发现潜在的安全漏洞,从而提高软件的安全性和性能。这使得IDA成为许多安全研究人员和软件工程师的重要工具之一。 ### 回答3: MBR(Master Boot Record,主引导记录)是磁盘的第一个扇区,是启动操作系统的关键组成部分。IDA(Interactive Disassembler,交互式反汇编器)是一款二进制静态分析工具,用于逆向工程和恶意软件分析。 使用IDA进行MBR的二进制静态分析时,首先需要将MBR的二进制文件导入到IDA中。IDA通过解析二进制代码,将其转换为可读的汇编语言代码,以便分析和理解程序的逻辑。 对于MBR的二进制静态分析,可以使用IDA进行以下方面的研究: 1. 代码调用关系分析:IDA可以显示函数之间的调用关系,帮助我们理清代码的逻辑流程。 2. 变量和数据结构分析:IDA可以识别并显示代码中使用的变量和数据结构,帮助我们了解数据的存储和使用方式,进而理解程序的功能。 3. 漏洞分析:通过IDA的漏洞分析功能,我们可以查找代码中存在的安全漏洞或异常处理不当的问题,从而提供安全修复建议。 4. 反汇编代码注释:IDA可以让我们添加自己的注释,对代码进行解释和标记,方便后续的分析和理解。 综上所述,IDA作为一款强大的二进制静态分析工具,可以帮助我们深入理解MBR的功能和逻辑,发现其中的潜在问题,从而提供安全修复和改进的建议。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值