FAT文件系统与文件恢复
FAT文件系统与文件恢复
文章目录
一、FAT32文件系统结构介绍
FAT32文件作为Windows操作系统的主流文件,其文件系统主要由MBR、DBR及其保留扇区、FAT1、FAT2和DATA五部分组成。FAT1与FAT2的大小相同,FAT可变长度,其长度随着分区大小、每簇扇区数的变化而变化。在FAT32文件中,把目录当文件管理,所以没有独立的目录区。
1.1 主引导记录
硬盘的第1个扇区叫 MBR (Master Boot Record)扇区,为主引导扇区记录,占512字节,MBR的引导程序占前446个字节,后64个字节为硬盘分区表DPT,末尾的两个字节 “55AA”是分区有效结束标志。 引导标志位只能是 00H 和 80H,80H指活动,00H指非活动, 其余值默认非法。
1.2 操作系统引导记录
DBR (DOS Boot Record),操作系统引导记录。文件系统的 DBR 包括跳转指令、OEM 代号、BPB、引导程序和结束标志。 对 FAT32 进行数据恢复时,通常可由引导扇区 BPB 参数中的保留扇区数、FAT数、每个 FAT32所占扇区数来定位根目录的起始位置。
1.3 文件分配表
FAT(File Allocation Table),文件分配表。在FAT32文件中有两个相同的FAT,第一个称为主FAT,另一个是FAT1的备份。FAT是位于DBR之后,同一个文件的数据并不一定完整地存放在磁盘的一个连续区域内,以链式存储方式记录于FAT表中。
1.4 文件系统目录项
FAT32文件系统没有独立的根目录区,分区根目录下的文件及文件夹的目录项存放在根目录区中,分区子目录下的文件及文件夹的目录项存放在子目录区中,根目录区的和子目录区都在数据区中。文件目录项(FDT)占32字节,子目录项的长度为零,已删除目录项的首字节值为 E5H。
1.5 数据区
数据区位于FAT2之后。对数据区中数据定位,首先通过分区表信息, 定位相应的 DBR 扇区,得到 DBR 保留扇区数值和每个 FAT扇区数,通过相应的计算公式得到分区的数据区起始扇区。
二、DBR扇区及其保留扇区
FAT32引导扇区结构 (仅取关键字节)
字节偏移(16进制) | 字节数 | 含义 |
---|---|---|
0x00-0x02 | 2 | 汇编指令,跳转到引导代码处 |
0x0B-0x0C | 2 | 每扇区字节数,一般为512 |
0x0D | 1 | 每簇扇区数,这个值为2个整数次幂 最大不超过64 |
0x20-0x23 | 4 | 文件系统扇区总数 |
0x24-0x27 | 4 | 每个FAT表占用扇区数 |
0x2C-0x2F | 4 | 根目录起始簇号 |
0x52~0x59 | 8 | 文件系统格式的ASCII码 |
0x5A~0x1FD | 410 | 引导代码 |
0x1FE-0x1FF | 2 | 签名“55AA” |
0x200~0x203 | 4 | 扩展引导标志“52 52 61 41” |
0x204~0x3E3 | 480 | 全部置0 |
0x3E4~0x3E7 | 4 | FSINFO签名“72 72 41 61” |
0x3E8~0x3EB | 4 | 文件系统的空簇数 |
0x3EC~0x3EF | 4 | 下一可用簇号 |
0x3FE~0x3FF | 2 | 签名“55AA” |
offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
00000000 | EB 58 90 4D 53 44 4F 53 35 2E 30 00 02 08 22 00
00000010 | 02 00 00 00 00 F8 00 00 3F 00 FF 00 3F 00 00 00
00000020 | C5 BB 3F 00 E7 0F 00 00 00 00 00 00 02 00 00 00
00000200 | 52 52 61 41 00 00 00 00 00 00 00 00 00 00 00 00
000003E0 | 00 00 00 00 72 72 41 61 77 F3 07 00 05 00 00 00
0x00-0x10
:58EB
跳转指令,即JMP 58
,90
为NOP指令,后面8个字节表示文件系统标志和版本号为MSDOS5.0,0200
指每扇区512字节. 08
指每簇有8个扇区,0022
指保留扇区数有34个, 02
指FAT表个数为2。
0x20-0x23
:文件系统总扇区数为003FBBC5
,每个FAT表占用00000FE7
个扇区,根目录所在的第一个簇的簇号为0x02
。
0x3E8-0x3EF
: 文件系统空簇数为0007F377
,下一可用簇号为00000005
。
三、FAT表
FAT表项的前两个FAT项为文件系统保留使用,0号FAT为介质类型,1号FAT为文件系统错误标志。用户的数据从2号FAT开始记录。
如果某个文件占用很多个簇,则第一个FAT项记录下一个FAT项的编号(既簇号),如果这个文件结束了,则用“0F FF FF FF”表示。
定位FAT与数据区绝对位置的方法:
1、从MBR的分区表中得知分区的起始扇区,偏移到此扇区。
2、从DBR的BPB中得知DBR的保留扇区数,FAT表的个数,FAT表的大小。
3、FAT1=分区起始扇区+DBR保留扇区,FAT2=分区起始扇区+DBR保留扇区+FAT1,根目录=分区起始扇区+DBR保留扇区+(FAT表 * 2)+(簇大小 * 2)
四、根目录
字节偏移(16进制) | 字节数 | 含义 |
---|---|---|
0x00-0x07 | 8 | 文件名,不足8个字节0x20补全 |
0x08-0x0A | 3 | 扩展名 |
0x0B | 1 | 文件属性,0x20表示归档 |
0x0D | 1 | 创建时间的10毫秒位 |
0x0E-0x0F | 2 | 文件创建时间 |
0x10-0x11 | 2 | 文件创建日期 |
0x12-0x13 | 2 | 文件最后访问日期 |
0x14-0x15 | 2 | 文件起始簇号的高16位 |
0x16-0x17 | 2 | 文件最近修改时间 |
0x18-0x19 | 2 | 文件最近修改时间 |
0x1A-0x1B | 2 | 文件最近修改时间 |
0x1C-0x1F | 4 | 文件的长度 |
五、FAT32文件恢复
实验准备
VMware Fusion + Winxp虚拟机 + Winhex
-
搭建FAT32文件系统:在VMware上新建硬盘并在xp虚拟机中初始化为FAT32文件系统,命名为D,在其中创建测试文件。
-
使用winhex打开D盘:每个扇区512字节,每个簇8个扇区,保留扇区数34,磁盘有两个FAT,每个FAT占扇区4071,每个簇占用4096个字节。
-
查看根目录模板:TEST文件大小为0000598D即22925个字节,占6个簇。TEST文件的首簇号在00000005(14h-15h,1Ah-1Bh)。
54 45 53 54 20 20 20 20 54 58 54 20 18 56 97 80 |TEST TXT 99 4F 99 4F 00 00 66 A6 99 4F 05 00 8D 59 00 00 |
-
查看文件的簇链表
06 00 00 00 07 00 00 00 08 00 00 00 09 00 00 00 0A 00 00 00 FF FF FF 0F | 以0FFFFFFF结尾
直接右键删除文件的文件恢复
根目录下文件首字节变成E5
,文件大小不变,文件首簇号不变。
E5 45 53 54 20 20 20 20 54 58 54 20 18 56 97 80
99 4F 99 4F 00 00 66 A6 99 4F 05 00 8D 59 00 00
进入簇链表,内容也和原来一样,则只需要修改其首字节为54
即可完成文件恢复。即右键E5->编辑->填充选块->输入16进制数。
Shift+delete删除文件的文件恢复
根目录下文件首字节变成E5
,文件大小不变,文件首簇号不变,文件对应的簇链表内容被清空。
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
根据首簇号为5,修改簇链表内容为
06 00 00 00 07 00 00 00 08 00 00 00 09 00 00 00
0A 00 00 00 FF FF FF 0F
即恢复成功。
这种方法的前提是默认首簇号的高16位为0,判断首簇号是否为0的检验方法:
1.根据根目录中对应文件首簇号的高位和低位来计算首簇号其相应的十进制数,然后菜单->导航->转到扇区->簇->查看里面的数据是否是我们想要的数据,如果不是则猜测错误。接着猜测高位为0001,即可找出正确的高位。
2.修改了根目录的簇链高位后,进行簇链的恢复:导航->转到FAT项->输入由簇链高位低位计算得出的十进制数->修改相应的簇即可。