手工数据恢复你也行:FAT文件系统DBR损坏后的恢复+手工修复FAT16的DBR+shift+delete文件删除的恢复

对于FAT16文件系统,因为没有DBR备份扇区,所以当DBR损坏时,就需要根据分区中的数据存储情况重建其DBR,手工恢复如此,软件也如此,只不过软件是虚拟出一个文件系统而已。

对于FAT32文件系统,如果只是DBR意外损坏,位于文件系统6号扇区的备份完好的情况下,可以使用备份DBR恢复主DBR。如果备份DBR也已经损坏,同样只能通过重建DBR来恢复其中的数据。

CIH病毒破坏后的结果应该算是重建DBR的最好案例,也是使用FAT2恢复FAT1的最好案例。CIH病毒对文件系统的破坏方式是使用随机码由文件系统的起始处开始覆盖,通常覆盖掉FAT1的部分内容后即导致计算机死机并崩溃。如图10.32所示,加亮的部分被CIH病毒进行了覆盖写入。

下面我们仍以随书光盘中的虚拟磁盘文件format.hdd为例,使用其中的第二个分区,即F32分区来说明在这种情况下如何使用FAT2恢复FAT1,并根据分区中的数据存储情况计算BPB参数从而重建DBR。

首先将虚拟磁盘文件加载为虚拟盘后,向F32分区中拷入一些文件和目录(也可以直接在其中建立一些目录和文件),以营造数据存储环境。为了便于讲述,我们在其中建立三个目录并分别命名为“目录1”、“目录2”、“目录3”(见图10.33),每个目录下都有一个文件或目录。

然后,我们将保留区域及FAT1中的内容全部清空,制造DBR和FAT1被破坏的实际情景(该镜象文件位于随书光盘A的“第10章”目录下,文件名为DBR_delete.hdd。读者可以将其拷贝到本地磁盘根目录下跟随我们一起完成DBR的重建过程。恢复成功后的镜象文件请保存好,在后面的删除分析章节中我们将会使用这个文件)。完毕后,将虚拟磁盘卸载后重新加载,发现该分区的卷标已经不再显示,试图打开分区时提示未格式化。

这时候,在Winhex中的逻辑磁盘内选择该分区也无法将其打开,Winhex会提示没有找到可识别的文件系统。这是因为使用Winhex直接打开一个文件系统分区时,也是通过调用DBR中的参数对文件系统中的内容进行解释,DBR损坏后当然也就无法打开了。所以,我们应该选择打开物理磁盘,然后在打开的物理磁盘界面中单击按钮选择该分区将其打开。如图10.34所示。

在物理磁盘界面中之所以能够打开DBR已经损坏的分区,是因为这时候Winhex并不是使用该分区的文件系统参数对分区内的数据进行解释,而只是利用分区表对该分区的起始位置及大小描述将其空间呈现给我们而已。

分区打开后,我们看到分区DBR已经不存在,向下翻看几十个扇区也没有找到可用的内容。在实际工作中,遇到这种情况时,我们有可能已经了解到该分区原来的文件系统格式为FAT32,也有可能是不知道的。因此,我们第一步应该进行尝试性搜索,来确定原文件系统的类型。下面我们就开始对该分区进行分析与恢复。

步骤1:通过搜索十六进制字节“F8FFFF”寻找FAT表。搜索位于某个扇区偏移0字节处的“F8FFFF”是为了尝试寻找FAT表,如果能找到FAT表,说明原来的文件系统是FAT系列文件系统,然后根据FAT表的特征值进而判断是哪一种FAT类型。这也是我们不建议直接搜索“F8FFFF 0F”的原因,因为目前没有确定该分区就是一个FAT32分区,如果是一个FAT16分区的话,它的FAT表起始处就会是“F8FFFFFF”,所以搜索它们的共性更容易搜索到目标。搜索十六进制“F8FFFF”时,设置如图10.35所示。

很快,在779号扇区找到一个“F8FFFF”,如图10.36所示。

可以看到,这个扇区的内容是一个FAT32的FAT表,说明原来的文件系统为FAT32。因此,我们下面要做的就是重建它的DBR。

重建FAT32的DBR需要以下几个参数:保留区大小扇区数、FAT表个数(通常为2)、每FAT表大小扇区数、根目录簇号(通常为2号簇)、每簇扇区数、分区前隐含扇区数及分区大小扇区数(这两个数值可以在该分区的分区表项中找到)。下面我们就来分析并计算这些参数。

通常FAT1的起始处位于40号扇区以前,而我们搜索到的这个FAT表位置在779号扇区,所以我们应该考虑到它是FAT2,我们按F3键继续向下搜索,没有再次找到该值,说明这确实是FAT2的起始扇区。我们可以画一个简单的示意图。如图10.37所示。

步骤2:寻找根目录。寻找根目录是为了确定FAT2的大小,从而可以使用FAT2恢复FAT1。

寻找根目录的方法有多种:

一种是搜索回收站。在文件系统刚刚创建时,该文件系统下是没有回收站“Recycled”目录的。在第一次将数据删除至回收站时,系统即会在根目录下建立该目录。因此,可以通过搜索字符“Recycled”来寻找根目录。但理论上来讲,如果在第一次分配给根目录的2号簇装满目录项前没有进行过删除操作,那么Recycled目录就会建立在分配给根目录的后续簇空间中,而这个簇可以是未分配的任何一个簇。在这种情况下,我们通过搜索“Recycled”找到的根目录就不是根目录的起始簇。

还有一种方法是估算法。由于FAT2起始于779号扇区,通常FAT32文件系统的FAT1起始于30~40号扇区的位置,由此可以估算出一个FAT表的大小扇区数,然后向后跳过该扇区数,手工查找根目录。根目录前为FAT2的结尾处,而这个结尾处一定会有大量的“00”存在,可以据此判断是否正确地找到了根目录的位置。

第三种方法是搜索卷标。如果为文件系统设置了卷标,则根目录下的第一个目录项一定是卷标目录项。

第四种方法是搜索较早建立于根目录下的目录或文件名。

其他方法我们不再一一列举,读者可以在实际恢复中根据不同情况区别对待,灵活掌握。

为了向读者介绍如何在Winhex中搜索字符,在此我们使用第四种方法。假定我们知道根目录下有一个目录的名字为“目录1”,在Winhex工具栏中单击搜索文本字符按钮或选择菜单栏中的Search | Find Text,即可弹出文本搜索设置框。如图10.38所示。

在设置框中进行如下设置:

在搜索文本框中输入“目录1”。

字符集选择“ASCII/Code page”,这是因为FAT32使用ASCII码存储文本字符。如果在NTFS下,则需要选择“Unicode”。

因为我们当前所处的位置是FAT2的起始扇区,要搜索的根目录位于其后,因此在搜索方向中选择“Down”,即向下搜索。

每个目录项的大小为32个字节,所以我们只需要位于可以被32整除的偏移处的结果,因此偏移调制设置为“?MOD 32=0 ”。

设置完毕后单击OK即开始搜索,最终在1520号扇区找到“目录1”。同时还可以看到了其他两个目录的目录项。也如图10.39所示。

我们将根目录添加进文件系统结构示意图中,如图10.40所示。

现在,我们可以计算出FAT2的大小为1520 – 779=741个扇区。因此,FAT1的起始位置为779 – 741=38号扇区,如图10.41所示。

至此,我们已经得到的参数有:保留区为38个扇区;每FAT大小为741个扇区。我们只要再计算出每簇大小扇区数就可以进行文件系统的修复工作了。

步骤3:计算每簇大小扇区数。在此我们只介绍计算FAT文件系统每簇大小扇区数最常用的方法,这种方法需要依赖于分区原来的根目录下有子目录,如果分区中原来没有子目录,只在根目录下存储所有的文件,则无法使用此方法。不过这种情况毕竟很少出现,没有哪个用户会这样存储数据。

我们知道,为子目录分配的簇空间中,第一个目录项一定是一个“.”目录项,这个目录项用以描述该子目录本身,其中有一个参数描述了它现在所处的扇区的簇号。我们利用两个子目录间的起始扇区号差和它们的簇号差,就可以计算出每个簇的大小扇区数。甚至只需要利用一个子目录和根目录间的扇区号差及簇号差就可以计算得到。

要搜索一个子目录,可以在Winhex中搜索位于扇区起始处的十六进制值“2E20202020202020202020”,这是“.”后面跟随10个空格的十六进制表现形式。其搜索设置框如图10.42所示。

第一个搜索到的子目录起始于1521号扇区,由第一个目录项可以获知该扇区所在的簇号:偏移0x14~0x15为簇号的高二位,偏移0x 1A~0x1B处为簇号的低二位,不要忘记,这两个位置的数字本身都是以little-endian顺序存储的,也就是低位在前,高位在后。因此该扇区的簇号为0x00000003,即3号簇。如图10.43所示。

其实,我们现在已经可以利用该子目录的信息和根目录的信息计算出每簇的大小扇区数:根目录的簇号为2,起始扇区为1520;当前子目录的簇号为3,起始扇区为1521,所以:(1521 – 1520 ) / ( 3 – 2 ) = 1,即每簇大小为1个扇区。

由于在实际当中,有可能某个子目录的信息是过去某个文件系统遗留下来的,所以为了确保结果正确,首先应该验证计算结果是否为2的整数次幂,如果不是2的整数次幂,结果一定是错误的。另外,就是要多搜索几个子目录,根据不同子目录间的关系计算簇大小,以验证当前的结果是否正确。为了节省篇幅,我们在此不再对这个过程进行讲述。

步骤4:从该分区的分区表项中获得其分区前隐含扇区数及分区大小扇区数。如图10.44所示,在物理磁盘界面中,单击按钮,然后选择丢失分区下的Partition table(template)即可跳转到该分区的分区表所在扇区,并自动用模版将其打开,可以从中获知该分区前的隐含扇区数及分区大小扇区数。

从其分区表项中可知,该分区的分区前隐含扇区数和分区大小扇区数分别为63和96327。

步骤5:重构文件系统。目前为止,我们已经得到了所有需要的参数:保留扇区数38,FAT表个数2,每FAT表大小扇区数741,每簇扇区数1,由分区表得到分区前隐含扇区数和分区大小分别为63、96327,可以重构文件系统了。

1)利用我们前面讲到的备份DBR的方法,复制FAT2,然后转到38号扇区将其写入,重建FAT1。

2)复制一个FAT32的DBR扇区,写入0号扇区。如果没有现成的FAT32的DBR,可以虚拟一个磁盘,划分一个分区后将其格式化成FAT32文件系统,然后复制它的DBR扇区。恰好我的计算机C分区是FAT32,所以直接将它复制过来。然后修复其中的参数。如图10.45所示。

可以看到,我们需要修改的参数只有图中所示的四个位置。修改完毕后,将其写入0号扇区。

提示:偏移0x43处的卷序列号也做了修改,因为这个DBR是由笔者计算机的C分区拷贝而来,为了避免冲突造成的不稳定,所以对其进行了修改。读者在实际恢复过程中也应该注意到这一点。

3)将0号扇区复制一份,备份至6号扇区。

步骤6重新识别硬盘。在我们的讲解中使用的是虚拟磁盘,所以将虚拟磁盘卸载并重新加载后原分区再现。如果在实际恢复中使用硬盘,可以在设备管理器中将其卸载后再检测新硬件,硬盘被重新加载后即可完成恢复。

在恢复过程中我们可以注意到,对于Fsinfo信息扇区可不必理会,并不影响数据的正常恢复。

FAT16

1.FAT16的DBR:

0x0B-0x0C:每扇区字节数

0x0D-0x0D:每簇扇区数

0x0E-0x0F:保留扇区数

0x11-0x12:根目录项数

0x16-0x18:每个FAT扇区数

0x1C-0X1F:隐藏扇区数

0x20-0x23:分区的总扇区数

2.文件目录项:

分析abcdefg.jpg的文件目录项:

0-7:文件名

8-10:文件扩展名

11: 0000 0000 可读可写  转换成十六进制00

0000 0001 只读   转换成十六进制01

0000 0010 隐含   转换成十六进制02

0000 0100 系统   转换成十六进制04

0000 1000 卷标   转换成十六进制08

0001 0000 子目录  转换成十六进制20

0010 0000 档案

例如:既有只读,又有隐含,相加的:0000 0011(二进制)转换十六进制03

14-15:起始簇的高十六位

1A-1B:起始簇的低十六位

1C-1F:文件的大小

3.FAT的标志:F8FFFFFF,在FAT16中一个文件目录项16个字节,16个字节是一簇,从0号簇开始,FF FF是结束标志.

总结:

总扇区数*512=多少个字节,1sector=512btye

1 MB=1024 KB,1 KB =1024 B,1 B=1 btye

1 btye=8 bit=8个二进制数,btye*1024*1024=MB

1个汉字=2 btye,2sector=1kb

FAT16 文件的复制

1.打开所在的分区,十六进制搜索”F8FFFFFF”

OK之后,如图所示:

然后Find Text:吴聪慧--ASCII/Code--down

OK之后,搜索到的如图:

由图可知:E5是删除的标志

14-15:起始簇的高位:00 00

1A-1B:起始簇的低位:06 00

例如:高位是:A B,低位是:C D。起始簇的算法:BADC

1C-1F:文件长度58591

方法一:

返回到FAT1,如图所示:

1个FAT表项是2个字节,2个字节是1个簇链,第一个簇是0号簇,以上可得,先找到6簇,从图中看到6号簇是:07 00 08 00 09 00 FF FF ,FF FF是结束标志,先跳转到6号簇,alt+1.然后跳转至10号簇,向滚动,看到一堆00。再向上滚动会看到数据。alt+2.至新文件,扩展名为.jpg

方法二:

由以上得,跳转至6号簇,6号簇的扇区是680,Alt+1,文件长度为58591,所以扇区是58591/512=114,680+114=794,转跳795,向上滚动,Alt+2,至新文件,扩展名为.JPG

同理,FAT32的文件复制也是

手工修复FAT16的DBR

修改重要参数有:隐藏扇区、总扇区数、大小、簇数

注意:隐藏扇区就是分区在磁盘中起始位置,总扇区数就是分区在磁盘中的大小。

1.从别的盘里也是FAT16的文件系统粘贴到该盘。

2.从MBR得知:隐藏扇区为2048(1C-1),总扇区数为419225620(20-23)。

3.十六进制搜索“F8FF”,搜索到的FAT1所在的扇区为8(0E-0F)<F3>接着搜索,搜索到胡FAT2所在扇区为264,所以FAT的大小256(16-17)

4.<1>分区数据区的大小=总扇区数-保留扇区数-FAT大小*2-FDT=419225620-8-256*2-32=4191704

<2>FAT每簇扇区数=数据区的大小/FAT项的簇数=4191704/65536=63

Shift+delete的手工恢复

1.打开所在的分区,十六进制搜索“F8FF”,512=0 向下, 然后Find Test:聪慧--ASCII/Code--down ,搜索到的如图:

由图可知:E5是删除的标志

14-15:起始簇的高位:00 00

1A-1B:起始簇的低位:0A 00

例如:高位是:A B,低位是:C D,起始簇的算法:BADC

1C-1F:文件长度27415

由以上得:跳转至4 号簇,4号簇的扇区是680,Alt+1,文件长度为27415,所以扇区是27415/512=53,680+53=733,同理,FAT32的文件恢复也是这样的步骤。

(0)

相关推荐