FAT32文件系统下,分区根目录下的文件及文件夹的目录项存放在根目录区中,分区子目录下的文件及文件夹的目录项存放在子目录区中,根目录区和子目录区都在数据区中。

FAT32的目录项与FAT16的目录项一样,都可以分为四类:

①短文件名目录项。

②长文件名目录项。

③“.”目录项和“..”目录项。

④卷标目录项。

FAT32文件系统的四类目录项中,只有短文件名目录项的结构跟FAT16稍有区别,其他三类都完全一样,所以本节就不再重复讲解长文件名目录项、“.”目录项和“..”目录项以及卷标目录项的结构了,这些内容请读者查看4.4.5节的“1. 目录项的作用及结构特点”。

下面具体讲解一下FAT32文件系统的短文件名目录项。

首先看一个具体的短文件名目录项,如图4-296所示。

FAT32文件系统目录项分析-数据恢复迷

图4-296 FAT32的短文件名目录项

图4-296是一条文件目录项,目录项占32字节,从WinHex中看也就是两行数据。FAT32的短文件名目录项中各字节的含义见表4-27。

表4-27 FAT32短文件名目录项的含义

FAT32文件系统目录项分析-数据恢复迷

从表4-27中可以看出,FAT32短文件名目录项的结构与FAT16短文件名目录项结构的唯一区别,就在偏移“14H”处的两个字节,在FAT16的短文件名目录项中不用这两个字节,而在FAT32的短文件名目录项中,这两个字节是文件起始簇号的高位,偏移“1AH”处的两个字节是文件起始簇号的低位,这四个字节共同构成文件的起始簇号。

将光标放在目录项的第一个字节上,然后打开WinHex中短文件名目录项的模板,如图4-297所示。

FAT32文件系统目录项分析-数据恢复迷

图4-297 FAT32短文件名目录项的模板

下面对这些参数做详细分析。

(1)00H~07H:主文件名

主文件名共占8字节,如果文件名用不完8字节,后面用空格(16进制数值为20H)填充。在当前例子中主文件名为“SYSLOG”。

另外该位置的第一个字节也用来表示目录项的分配状态,当该字节是“00”时,表示该目录项从未使用过;当该字节是“E5”时,表示该目录项曾经使用过,但目前已经被删除。

(2)08H~0AH:文件的扩展名

文件的扩展名共占3字节,对于文件夹来说没有扩展名,那么这3个字节用空格填充。在当前例子中扩展名为“TXT”。

(3)0BH~0BH:文件属性

文件属性占1字节,可以表示文件的各种属性,表示的方法是按二进制位定义,最高两位保留未用,0~5位分别是只读位、隐藏位、系统位、卷标位、子目录位、存档位。在当前例子中属性值为“20H”,换算为2进制等于“00100000”,所以该文件为存档属性。

(4)0CH~0CH:未用

该字节不使用。

(5)0DH~0DH:文件创建时间精确到10ms的值

文件在创建时的时间值中精确到10ms的值用该字节表示,在当前例子该值为“01H”,换算为十进制等于1,所以文件的创建时间为10ms,也就是0.01s。

(6)0EH~0FH:文件创建时间

这是文件创建的时、分、秒的数值,用16位二进制记录文件创建时间,时、分、秒三个部分的表达方法如下:

①0~4位,这5位记录“秒”值,单位是2s,也就是把这4位的值乘以2才是文件创建时间的“秒”值,其取值范围是0~29。

②5~10位,这6位记录“分”值,其取值范围是0~59。

③11~15位,这5位记录“时”值,其取值范围是0~23。

在当前例子中该值为“01H BFH”,这是Little-Endian的字节序,从高位往低位写应为“BFH 01H”,将其换算为二进制,结果为“1011111100000001”,具体时间转换方式如图4-298所示。

FAT32文件系统目录项分析-数据恢复迷

图4-298 时间表达方式

经过计算其时间为23时56分02秒,再加上其毫秒值10,所以该文件最终的创建时间为23时56分02秒10毫秒。这个时间可以通过查看文件的属性获得,如图4-299所示。

FAT32文件系统目录项分析-数据恢复迷

图4-299 “syslog.txt”的属性信息

在属性信息中文件的创建时间精确到秒,所以是23时56分02秒。

(7)10H~11H文件创建日期

这是文件创建的年、月、日的数值,用16位二进制记录文件创建日期,年、月、日三个部分的表达方法如下:

①0~4位,这5位记录“日”值,其取值范围是1~31。

②5~8位,这4位记录“月”值,其取值范围是1~12。

③9~15位,这7位记录“年”值,其值是相对于1980年开始计数的,必须加上1980才是正确的年份,其取值范围是0~127,也就是可以从1980年记录到2107年。

在当前例子中该值为“53H 3BH”,这是Little-Endian的字节序,从高位往低位写应为“3BH 53H”,将其换算为二进制,结果为“0011101101010011”,具体日期表达方式如图4-300所示。

FAT32文件系统目录项分析-数据恢复迷

图4-300 日期表达方式

(8)12H~13H文件最近访问日期

这是文件最后访问的年、月、日的数值,用16位二进制记录文件最后访问日期,其表达方式与文件创建日期一致,不再重复。

(9)14H~15H:文件起始簇号的高位

这两个字节作为文件起始簇号的高位使用,当前值为“0002H”。

(10)16H~17H:文件修改时间

这是文件最后修改的时、分、秒的数值,用16位二进制记录文件最后修改时间,其表达方式与文件创建时间一致,不再重复。

(11)18H~19H:文件修改日期

这是文件最后修改的年、月、日的数值,用16位二进制记录文件最后修改日期,其表达方式与文件创建日期一致,不再重复。

(12)1AH~1BH:文件起始簇号的低位

这两个字节作为文件起始簇号的低位使用,当前值为“1003H”。

FAT32的目录项中,文件起始簇号占用4字节,把偏移14H~15H处的两个字节作为高位,跟该偏移处的两个字节和在一起,得到文件开始簇号为“21003”簇,换算为十进制等于135 171,所以该文件开始于135 171号簇。

(13)1CH~1FH:文件大小

文件大小占用4字节,记录着文件的总字节数。当前值为“0AH E1H”,换算成十进制就是2785,说明文件大小为2785字节。文件大小也可以通过查看文件的属性获得,如图4-301所示。

FAT32文件系统目录项分析-数据恢复迷

图4-301 文件大小的信息

到此一个FAT32的短文件名目录项也就分析完了。