FAT32文件系统的DBR恢复研究与实践
0 引言
在信息化时代,数据存储日益重要,但在计算机操作过程中,由于断电、病毒、误操作或振动等原因可能会导致硬盘中文件系统分区的DBR扇区信息损坏,使其分区表现为未格式化,以至无法访问分区信息,但如果重新格式化分区,则可能导致该分区数据被破坏。本文通过研究FAT32文件系统的结构,提出了通过FAT表和根目录来计算DBR的重要参数以恢复DBR的方法,并利用硬盘编辑工具Winhex,针对不同的情况,采用不同的方法重构DBR扇区,恢复分区信息,进而能成功访问FAT32分区中的数据。
1 FAT32文件系统
FAT(File Allocation Table)是Windows操作系统平台下一种较常见的文件系统,根据FAT项大小的不同,可分为FAT12、FAT16和FAT32共3种文件系统,FAT32文件系统目前在移动硬盘、U盘等存储介质中得到了广泛应用。FAT32文件系统一般包括保留区、FAT表区、DATA数据区3个部分,文件系统结构如图1所示。在FAT32 文件系统中,保留区和FAT表区采用“扇区地址”管理,而数据区采用“簇地址”管理,根目录属于数据区。
图1 FAT32文件系统结构
2 FAT文件系统结构分析
FAT文件系统的保留区位于文件系统的前部,保留区的第1个扇区,即文件系统的0号扇区,称为Dos引导记录(Dos Boot Recorder,DBR)扇区,存储着文件系统在硬盘上的保留扇区数、总扇区数、每簇扇区数、FAT 表个数和大小、根目录起始簇号等重要信息,具体数据结构见表1。
FAT表区由两个大小相同的FAT表组成,即FAT1表和FAT2表,FAT表是用来描述数据区中簇的分配状态以及文件或目录分配的簇的前后连接关系<sup>[1]</sup>。FAT表由一系列大小相等的FAT表项组成,每个FAT表项由4个字节组成,记录的是数据区中每个簇的地址,由0开始编号,0号表项与1号表项被系统保留用来存储特殊标志,2号表项开始每个表项对应一个数据区的簇号,FAT表的表项编号与数据区的簇号相同,2号表项对应2号簇,0号表项的16进制字节为“F8FFFF0F”,1号表项为“FFFFFF0F”或“FFFFFFFF”。若某个簇未被分配,那么它所对应的FAT 表项值为“0”。若某个簇已被分配,那么它所对应的FAT 表项值为该文件或目录的下一个簇的编号,如果该簇是分配给文件或目录的最后一个簇,那么该簇所对应的FAT 表项为“FFFFFF0F”,表示一个文件或目录的结束标记[1-3]。
数据区包含根目录,用来存储用户的数据,簇从2号开始编号,一般情况下根目录放在数据区的最前面,所以根目录的簇号为2。在根目录下建立文件或目录时,则将在分配给根目录的簇中建立相应文件或目录的目录项<sup>[4]</sup>,FAT32文件系统目录项的数据结构和含义如表2 所示。
表1 FAT32文件系统DBR数据结构和含义
字节偏移
(16进制)字节数值(十进制)含义
00-023EB 58 90跳转指令
03-0A8如:字符串“MSDOS5.0”厂商标志和OS版本号,OEM标志
0B-0C200 02每扇区字节数,一般为512
0D108每簇扇区数(分区大于2G时为08)
0E-0F2根据分区实际情况而定保留扇区数
10102FAT表个数,FAT32文件一般为2
1C-1F4根据分区实际情况而定分区前已用扇区数,指DBR扇区相对于硬盘0号扇区的扇区偏移
20-234根据分区实际情况而定文件系统的总扇区数
24-274根据分区实际情况而定每个FAT表的扇区数
2C-2F402 00 00 00根目录起始簇号,一般为2
32-33206 00备份DBR扇区的位置,一般为6
52-598字符串“FAT32”文件系统格式,ASCII码
5A-1FD4100未使用
1FE-1FF255AA签名标志
表2 FAT32文件系统目录项的各重要字节数据结构和含义
字节偏移
(十六进制)字节数 含义
001文件名或目录名的第一个ASCII码字符,若为0x00,表示目录项未分配使用,若为0xE5,表示曾经分配过,但已被删除。
01-0A10文件名或目录名的第2至 第11个ASCII码字符
04-152文件名或目录的起始簇号的高两个字节
1A-1B2文件名或目录的起始簇号的低两个字节
3 FAT32 文件系统的DBR恢复方法
根据FAT32文件系统DBR扇区的数据结构,在文件系统的6 号扇区存在一个DBR 扇区的备份。因此,若6号扇区没有损坏,则可通过6号扇区来恢复DBR扇区的信息。但是如果DBR扇区和备份DBR 扇区的信息都被损坏,则需重建DBR扇区。由表1可知,重建DBR的关键参数主要有:保留区扇区数、根目录簇号、每簇扇区数、FAT表个数、每个FAT表总扇区数等信息。
4 FAT32文件系统DBR恢复实例
本文采用VMware Workstation虚拟机软件生成两块40G的虚拟硬盘,对于操作系统而言,跟真实硬盘没有区别,其硬盘分区结构如图2所示。在各分区根目录下创建一些文件和目录,以营造数据存储环境,然后使用“0x00”值填充实验分区的DBR扇区,造成DBR扇区损坏的实际环境,保存后分区因DBR扇区损坏,表现为未格式化。根据前述方法,下面利用磁盘编辑工具Winhex分几种情况重建DBR扇区的信息。由于备份DBR扇区未损坏情况的恢复很简单,本文不再赘述。
图2 硬盘分区
4.1 FAT32的DBR和备份DBR都被损坏
4.1.1 损坏的分区是主磁盘分区(以F盘为例)
步骤1:利用Winhex软件打开被损坏的逻辑驱动器F,先判断文件系统类型,此处是FAT32。
步骤2:将一个完好的FAT32分区里面的DBR复制到本分区0扇区位置即DBR位置处。如图3所示。
图3 修改前FAT32文件系统的DBR
步骤3:修改图3中DBR的BPB表结构的相应参数(即上面红色框位置):
(1)0E~0F :FAT表前的保留扇区数。
从0扇区开始,菜单上搜索——查找十六进制数值F8FFFF0F,得到第一个搜索位置,如图4所示,从图中可看出此扇区为36号扇区,即FAT1表所在的位置36D=24H。将其反写填入(0E~0F)位置即为2400。
图4 十六进制数值F8FFFF0F的第一个搜索位置
(2)24~27:每个FAT表所占扇区数。
从搜索到的扇区的下一位置开始,菜单上搜索——查找十六进制数值F8FFFF0F,得到第二个搜索位置,如图5示,从图中可看出此扇区为12026号扇区,
即FAT2表所在的位置,从而得出每个FAT表所占扇区数为:12026-36=11990D=2ED6H。将其反写为D62E0000填入(24~27)。
(3)1C~1F:隐含扇区。
(4)20~23:文件系统扇区总数。
对于参数(3)、(4)可以从该分区所在的物理硬盘主引导记录(Master Boot Record,MBR)的DPT处获取。打开硬盘1的物理驱动器,定位0扇区的DPT,得到该分区是DPT的第二个分区。可知此分区为主磁盘分区,则直接从MBR中DPT获取,如图6所示。所以1C~1F处填入F238D301。20~23处填入7A0D7701。
图5 十六进制数值F8FFFF0F的第二个搜索位置
图6 物理硬盘1 中MBR的DPT
(5)43~46:序列号,这4个字节随意修改即可,只要不与原来的相同。
以上参数修改完后DBR的BPB表结构如图7所示。
图7 修改后FAT32文件系统的DBR
步骤4:定位到本逻辑分区的6号扇区,将修改好的DBR扇区信息复制到此扇区中。保存修改,退出Winhex软件,此时DBR扇区重建完成,文件系统恢复正常,可以访问分区中的数据。
4.1.2 损坏的分区是扩展磁盘分区(以J盘为例)
步骤1:同4.1.1中的步骤1。
步骤2:同4.1.1中的步骤2。
步骤3:修改DBR中BPB表结构中相应的参数:
(1)0E~0F :FAT表前的保留扇区数。
从0扇区开始,菜单上搜索——查找十六进制数值F8FFFF0F,得到第一个搜索位置,如图8所示,从图中可看出此扇区为36号扇区,即FAT1表所在的位置36D=24H。将其反写填入(0E~0F)位置即为2400。
图8 十六进制数值F8FFFF0F的第一个搜索位置
(2)24~27:每个FAT表所占扇区数。
从上面搜索到的扇区的下一位置开始,菜单上搜索——查找十六进制数值F8FFFF0F,得到第二个搜索位置,如图9示,从图中可看出此扇区为13022号扇区,即FAT2表所在的位置,从而得出每个FAT表所占扇区数为:13022-36=12986D=32BAH。将其反写为BA320000填入(24~27)。
图9 十六进制数值F8FFFF0F的第二个搜索位置
(3)1C~1F:隐含扇区。
(4)20~23:文件系统扇区总数。
对于参数(3)、(4)可以从该分区所在的物理硬盘MBR的DPT处获取。利用Winhex打开硬盘2的物理驱动器,定位0扇区的DPT,得到该分区是DPT的第二个分区。从图10中的绿色框可知此分区为扩展磁盘分区。
图10 物理硬盘2 中MBR的DPT
打开硬盘2的物理驱动器,单击该分区,即到达DBR位置,再根据此位置的扇区数(-63),即可定位到此分区的扩展引导记录EBR位置,在此EBR中的DPT找到它的第一个分区信息,如图11所示。因此,本分区的隐含扇区数(1C~1F)填入3F0000:本分区总扇区数(20-23)填入FA2E9601。
图11 FAT32文件系统中EBR的DTP结构
(5)43~46:序列号,这4个字节随意修改即可,只要不与原来的相同。
步骤4:同4.1.1中的步骤4。
4.2 FAT32的DBR、备份DBR以及FAT1都被损坏
根据病毒破坏数据的原理,当病毒破坏到FAT1表时,计算机也就死机,不能再往下破坏了,所以利用这一原理,用FAT 1表的备份FAT 2表来恢复数据。
步骤1:利用Winhex软件打开被损坏的逻辑驱动器F,先判断文件系统类型,此处是FAT32。
步骤2:用FAT2恢复FAT1:
(1)查找FAT表。首先看查找到的FAT表在几号扇区,如果在30~40号扇区,也即扇区号比较靠前,是FAT1表,而扇区号比较靠后的,就是FAT2表。从0扇区开始,菜单上搜索——查找十六进制数值:“F8FFFF”,得到搜索位置,如图12所示。这里搜索到的FAT表在13022号扇区,可知FAT1表被破坏,此位置是FAT2表的起始扇区所在的位置。
(2)计算FAT2表的结束扇区。由于FAT2表后面紧跟着目录区,因此,从FAT2表的起始扇区开始,菜单上搜
索——查找文本值:“Recycled”,即回收站的英文文件名。搜索结果如图13所示。这里是26008号扇区,又因为根目录的起始扇区,即为FAT2的结束扇区,所以,用26008-13022(FAT2的起始扇区)=12986(FAT表的长度),接下来,定位到FAT2的起始扇区13022号扇区,从13022一直复制到26008号扇区前,因为这些是FAT2表的长度,所以要全部复制下来,再用13022(FAT2的起始扇区)-12986(FAT表的长度)=36(FAT1的起始扇区)。接着定位到36号扇区,将刚才复制的内容进行粘贴,至此,即用FAT 2表恢复了FAT 1表。
图12 十六进制数值F8FFFF的搜索位置
图13 文本值“Recycled”的搜索位置
余下步骤同4.1节中FAT32的DBR和备份DBR都被损坏时的恢复方法。
5 结语
针对FAT32文件系统DBR扇区信息的损坏导致分区表现为未格式化或计算机关机的情况,通过分析FAT32文件系统结构,提出了一种重建FAT32文件DBR扇区的方法,即通过搜索FAT表和根目录的信息,计算出FAT32文件系统的FAT 表个数和大小、每簇扇区数、保留扇区数、总扇区数等参数,以此重建DBR 扇区,进而恢复FAT32文件系统。最后通过实例分析验证了该方法的可行性。
参考文献:
\[1\] 戴士剑,涂彦辉.数据恢复技术[M].第2 版.北京:电子工业出版社,2005.
[2] 马林.数据重现:文件系统原理精解与数据恢复最佳实践[M].北京:清华大学出版社,2009.
[3] 钟秀玉.基于FAT32的数据恢复系统的设计[J].计算机应用与软件,2008,25 (11):57.
上一篇:大数据及可信技术的发展探讨