对于FAT16文件系统,因为没有DBR备份扇区,所以当DBR损坏时,就需要根据分区中的数据存储情况重建其DBR,手工恢复如此,软件也如此,只不过软件是虚拟出一个文件系统而已。
对于FAT32文件系统,如果只是DBR意外损坏,位于文件系统6号扇区的备份完好的情况下,可以使用备份DBR恢复主DBR。如果备份DBR也已经损坏,同样只能通过重建DBR来恢复其中的数据。
CIH病毒破坏后的结果应该算是重建DBR的最好案例,也是使用FAT2恢复FAT1的最好案例。CIH病毒对文件系统的破坏方式是使用随机码由文件系统的起始处开始覆盖,通常覆盖掉FAT1的部分内容后即导致计算机死机并崩溃。
重建FAT32的DBR需要以下几个参数:保留区大小扇区数、FAT表个数(通常为2)、每FAT表大小扇区数、根目录簇号(通常为2号簇)、每簇扇区数、分区前隐含扇区数及分区大小扇区数(这两个数值可以在该分区的分区表项中找到)。下面我们就来分析并计算这些参数。
通常FAT1的起始处位于40号扇区以前,而我们搜索到的这个FAT表位置在779号扇区,所以我们应该考虑到它是FAT2,我们按F3键继续向下搜索,没有再次找到该值,说明这确实是FAT2的起始扇区
寻找根目录。寻找根目录是为了确定FAT2的大小,从而可以使用FAT2恢复FAT1。
寻找根目录的方法有多种:
u 一种是搜索回收站。在文件系统刚刚创建时,该文件系统下是没有回收站“Recycled”目录的。在第一次将数据删除至回收站时,系统即会在根目录下建立该目录。因此,可以通过搜索字符“Recycled”来寻找根目录。但理论上来讲,如果在第一次分配给根目录的2号簇装满目录项前没有进行过删除操作,那么Recycled目录就会建立在分配给根目录的后续簇空间中,而这个簇可以是未分配的任何一个簇。在这种情况下,我们通过搜索“Recycled”找到的根目录就不是根目录的起始簇。
u 还有一种方法是估算法。由于FAT2起始于779号扇区,通常FAT32文件系统的FAT1起始于30~40号扇区的位置,由此可以估算出一个FAT表的大小扇区数,然后向后跳过该扇区数,手工查找根目录。根目录前为FAT2的结尾处,而这个结尾处一定会有大量的“00”存在,可以据此判断是否正确地找到了根目录的位置。
u 第三种方法是搜索卷标。如果为文件系统设置了卷标,则根目录下的第一个目录项一定是卷标目录项。
u 第四种方法是搜索较早建立于根目录下的目录或文件名。
其他方法我们不再一一列举,读者可以在实际恢复中根据不同情况区别对待,灵活掌握。
为了向读者介绍如何在Winhex中搜索字符,在此我们使用第四种方法。假定我们知道根目录下有一个目录的名字为“目录1”,在Winhex工具栏中单击搜索文本字符按钮 或选择菜单栏中的Search | Find Text,即可弹出文本搜索设置框。
在设置框中进行如下设置:
u 在搜索文本框中输入“目录1”。
u 字符集选择“ASCII/Code page”,这是因为FAT32使用ASCII码存储文本字符。如果在NTFS下,则需要选择“Unicode”。
u 因为我们当前所处的位置是FAT2的起始扇区,要搜索的根目录位于其后,因此在搜索方向中选择“Down”,即向下搜索。
u 每个目录项的大小为32个字节,所以我们只需要位于可以被32整除的偏移处的结果,因此偏移调制设置为“?MOD 32 = 0”。
设置完毕后单击OK即开始搜索,最终在1520号扇区找到“目录1”。同时还可以看到了其他两个目录的目录项