最新消息:

分区表简介与逻辑锁(转)

数据恢复 大步 790浏览 0评论

原文链接:http://bbs.wuyou.com/viewthread.php?tid=189106&extra=page%3D8

数据恢复经典书籍:
《数据恢复技术》第二版 戴士剑等编著
《数据重现》 马林编著
《数据恢复技术深度揭秘》 刘伟编著

Ps:书的很厚,不过网上有网友恭喜了,去无忧论坛也有,也可以找我

2684426852907149976

打开磁盘以后,我们看到窗口上面列出了当前的分区,下面是 十六进制数值显示区域。

2554103938690120100

当前扇区在0号扇区,我们称之为MBR扇区,滑动鼠标中键可以上下移动光标位置,滑动时注意左下角的扇区数值的变化,表示当前所在的扇区位置。

 

一个扇区是512字节,在MBR扇区中,其中分区表只占用了64字节,从01BE(446)开始到01FD(509)结束,最后两个字节是分区表有效标志55AA。

 

 

接下来,滑动一下鼠标中键,使我们可以看到 0 扇区的结尾处。注意结尾处的55 AA,这是分区表的有效标志,改成其它数值,会被认为分区

表无效。也就是说,只要将55AA改成其它数值,你重启后,所有分区都会被认为无效,用分区工具查看时会看不到任何分区。1304355042094794659

 

 

 

 

上面已经说过从 01BE 开始到 01FD 结束的区域就是分区描述区域,在图中已经用红框框起来了。

 

为了便于讲解,我把里面显示的数值复制到下面。

6597220399749134201

分区描述一共占用64个字节,每个分区描述占用16个字节,也就是说可以描述4个分区。

 

也许你会问,每个分区描述占用16字节,正好是4个分区的描述,那岂不是说我们最多可以描述4个分区了吗?

 

我来解释一下,如果是主分区的话,只能在这里进行描述,所以我们最多可以分四个主分区。另外,扩展分区也是作为一种特殊的主分区在这儿进行描述。如果要创建一个扩展分区的话,那么我们就只能创建3个主分区了

 

 

关于扩展分区跟逻辑盘,如果你对这个概念也不熟悉的话,我建议你先去了解一下。

 

 

第二部分: EBR分区表与分区表项具体含义

 

在讲解之前,我先来定义几个词语:在上面MBR分区表进行描述的主分区,我们称之为 一级文件系统分区,扩展分区称之为 一级扩展分区。

 

上面介绍了主分区跟扩展分区的描述位置,那么逻辑盘是在哪儿描述的呢?不要着急,我们先来大体了解一下,分区表项具体是怎么进行描述的。

 

分区表项具体含义:

1297599642653749325

第一个字节是分区激活标志,80代表是激活,00是 非激活,其它值无效。往后3

 

个字节是起始CHS参数,第五个字节是分区类型标志,这个字节

 

很关键,常用取值有0C 代表FAT32,07代表NTFS,0F代表扩展分区,12可以让XP无法对分区进行删除操作,更多的类型标志,可以参看DISKGEN

 

软件中的说明,六七八字节是结束CHS参数,9-12字节是分区起始LBA地址,这个也很关键,13-16字节是分区大小扇区数,这个也很重要。

 

为了讲解能够尽量简单易懂,在这里不会对起始CHS以及结束CHS进行讲解,只要能够理解起始LBA地址以及分区大小扇区数就可以了。

 

在这儿要说明一下,起始LBA地址以及分区大小的 十六进制数值是采用 小头位序,也就是低位在前,高位在后。对照这里的实例,我们来实际

 

换算一下:

 

第一个分区的起始LBA地址: 3F 00 00 00 ,我们需要转换为 00 00 00 3F,这才是真正的起始地址,十进制是63.

同样第一个分区的大小扇区数: 82 C4 78 01 ,也需要转换为 01 78 C4 82 十六进制跟十进制的转换,可以使用计算器计算。

 

 

如果你觉得复杂,可以用WINHEX直接进行查看。用鼠标拖拉选取,数据解释器就会自动显示。你可以在数据解释器上面点右键进行设置,比如

 

16位无符号数,32位无符号数,还可以设置是大头位序还是小头位序,以及十进制,十六进制显示。注意拖拉的时候要从后面向前面拖拉。

3070329045977258942

3070329045977258942

第一个分区,第一个字节是80,所以是活动分区。第5个字节是07,分区类型是NTFS。9-12 是起始LBA地址: 63 ,13-16 是分区大小 24691842 。

 

开始扇区63+扇区大小24691842=24691905 246919095 是分区结束LBA地址。

 

|-----大小24691842--------|

63 24691905

开始 结束

 

依次我们把上面所有的分区描述都直观的表达出来。

 

第二分区表项

24691905+203864850=228556755 扩展分区 起始LBA+分区大小=结束LBA地址

第三分区表项

228556755+5879790=234436545 隐藏主分区 起始LBA+分区大小=结束LBA地址

 

我们把分区排列起来:

 

 

||------------------------------||----------------------------------------------||-----------------------||

63 24691905 228556755 234436545

大小24691842 大小203864850 大小5879790

第一个主分区 扩展分区 第二主分区

-------------------------------------------------------------------------------------

分区表项占用了3个,两个主分区,一个扩展分区。

 

 

EBR 分区表描述:

 

下面我们来看一下逻辑分区是怎样描述的:

 

用WINHEX跳转到扩展分区的起始扇区: 菜单: 位置,跳至扇区或者直接按CTRL+G 输入LBA地址:24691905

2627287432634879433

1100848633932975288

下面来具体的说明一下跟0扇区处的描述的不同之处。扩展分区起始处的分区描述只占用两个分区表项。这两个分区表项我们称之为 EBR分区表。

 

第一个分区表项用于描述第一个逻辑分区,这个跟0扇区处的主分区描述是一致的!唯一不同的是,起始LBA地址是相对于当前扇区来进行计算的!!

0扇区处的主分区起始LBA地址是相对于整个硬盘的0扇区来计算的。我们前面已经提过,MBR扇区处的主分区描述,我们称为一级文件系统分区,

这里的逻辑分区描述,我们称之为 二级文件系统分区。

 

第二个分区表项用于描述下一个子扩展分区的起始地址以及大小。注意分区类型是05 扩展。MBR扇区处的扩展分区描述我们前面定义为 一级扩

展分区,这儿的子扩展分区描述,我们定义为 二级扩展分区。需要注意,二级扩展分区起始LBA地址是相对于一级扩展分区起始扇区位置来进行计算的。

 

所有的二级扩展分区起始LBA地址都是相对于一级扩展分区起始扇区来进行计算的,所有的二级文件系统分区起始LBA地址都是相对于当前分区描述区域

所在扇区计算的。

 

一级扩展分区的分区大小描述了整个扩展分区的大小,但二级扩展分区的大小只描述了下一个逻辑磁盘所占用的大小。

 

通过第二个分区表项的起始LBA,我们就可以计算出下一个二级扩展分区的起始位置。

 

起始LBA: CE 6D C0 03 先进行位序转换 03 C0 6D CE 十进制是 62942670 再加上一级扩展分区的起始位置:24691905 ,得到目标位置:

87634575

 

 

两种跳转方法:

 

第一种,直接计算目标LBA地址。 CE 6D C0 03 转换成十进制是62942670 ,62942670+扩展分区的起始扇区 24691905 = 87634575 直接跳转到

 

扇区 87634575 即可。

 

第二种,位置,转到偏移量 ,注意把单位改成sectors,在单位上点鼠标左键可以转换单位, 进制是十六进制,因此,我们可以不用转十进制,

 

但一定要注意数值是小头位序,需要进行转换。 CE 6D C0 03 要转换成 03 C0 6D CE。还要选择相对于当前位置。这样也可以进行跳转。

 

2494712718603986994

我们看到,87634575扇区处的分区描述跟一级扩展分区起始扇区处的分区描述结构是一样的,第一分区表项描述了一个 二级文件系统分区,第

二个分区表项描述了下一个 二级扩展分区。

6597170921725882893 6597170921725882893

逻辑分区就是通过这样以链表的形式来进行描述的。最后一个二级扩展分区的起始扇区处只占用第一个分区表项,用于描述 二级文件系统分区

,也就是逻辑盘,第二个分区表项为空,表示后面没有二级扩展分区了。

 

 

 

逻辑锁的形成:

 

逻辑锁就是利用了扩展分区表的链表形式,人为造成一个循环链,目的就达到了。

 

 

构造方法一: 定位到一级扩展分区起始扇区,将第二个分区表项的起始LBA地址改为0。这样,循环就产生了,我们来分析一下:下一个二级扩

展分区的起始扇区是0,也就是当前扇区,分区表读取程序在读到此处时,将会陷入一个循环,不断重复的读取当前扇区。

将下图中的红框中的数字全部改为0,可以构造死链。2531022990599847677 2531022990599847677

构造方法二: 跟方法一其实是一样的,只不过,我们要构造的复杂一点,让DISKGEN等程序在修复时可能会遇到点麻烦,程序毕竟是死的。

 

定位到最后一个二级扩展分区的起始扇区,将第二个分区表项的内容填写为前面一个二级扩展分区的第二表项,使其内容一样。这样也会造成

一个死链。第二表项的描述跟前面的描述是重复的,分区表修复程序在分析过程中,可能会认为有两个错误,错误一,逻辑锁,错误二,分区

重叠。在这样的情形下,程序可能会不知所措,而不能自动修复。

 

 

 

 

 

 

 

 

 

 

 

 

 

转载请注明:大步's Blog » 分区表简介与逻辑锁(转)

SiteMap