文件删除前的底层分析

首先来从文件系统底层了解一下FAT32文件系统中文件各部分结构的管理。

现在以FAT32分区中的文件“xiaodie.jpg”为例,讲解文件的各部分结构,文件如图4-320所示。

FAT32文件系统删除文件的分析及恢复-数据恢复迷

图4-320 FAT32分区中的文件“xiaodie.jpg”

这是一个图片文件,打开该文件其画面如图4-321所示。

FAT32文件系统删除文件的分析及恢复-数据恢复迷

图4-321 文件“xiaodie.jpg”的画面

该文件在FAT32文件系统中由三部分结构进行管理,分别为文件目录项、FAT表和数据区,文件目录项的内容如图4-322所示。

FAT32文件系统删除文件的分析及恢复-数据恢复迷

图4-322 文件“xiaodie.jpg”的文件目录项

从目录项中可看出该文件开始于03H(十进制值为3)簇,文件大小为CC30H(十进制值为52 272)字节,图4-323是该文件在FAT表中的簇链。

FAT32文件系统删除文件的分析及恢复-数据恢复迷

图4-323 文件“xiaodie.jpg”在FAT表中的簇链

FAT32文件系统的FAT表是32位的,每个FAT项占用4字节,可以看出该文件是连续存放的,共占用13个簇。

然后再用WinHex跳转到分区的3号簇,其部分内容如图4-324所示。

FAT32文件系统删除文件的分析及恢复-数据恢复迷

图4-324 3号簇的部分内容

从3号簇所在扇区开始,往后连续的52 272(“xiaodie.jpg”文件的大小)字节,就是这个文件的所有数据。

文件删除后的底层分析

为了学习文件删除后恢复的方法,先从文件系统级别了解一下文件删除时在FAT32文件系统中发生的变化。

查看了“xiaodie.jpg”文件的各部分结构后,现在把此文件彻底删除,然后再对其各部分结构进行分析,并讲解恢复的思路。

首先将文件“xiaodie.jpg”删除(彻底删除,不是放入回收站),如图4-325所示。

FAT32文件系统删除文件的分析及恢复-数据恢复迷

图4-325 删除文件“xiaodie.jpg”

“xiaodie.jpg”文件删除后其目录项如图4-326所示。

FAT32文件系统删除文件的分析及恢复-数据恢复迷

图4-326 “xiaodie.jpg”文件删除后的目录项

从图4-326中可以看出“xiaodie.jpg”文件目录项的第一个字节已经被改为“E5”了,而文件名的其他字节没有变化。文件开始簇号03H(十进制值为3)看似没有改变,但其实已经发生改变了。因为FAT32文件系统是用4个字节记录文件开始簇号的,当文件被删除后,文件开始簇号高位的2个字节是要清零的,所以“文件开始簇号”这个值实际已经发生了改变,只是这个文件的开始簇号高位的2个字节本身就为零,所以看不出改变。另外文件大小CC30H(十进制值为52 272)字节没有改变。

“xiaodie.jpg”文件删除后其FAT表的簇链如图4-327所示。

FAT32文件系统删除文件的分析及恢复-数据恢复迷

图4-327 “xiaodie.jpg”文件删除后其FAT表的簇链

很明显“xiaodie.jpg”文件删除后其FAT表的簇链已经全部清零。下面再来看数据区,跳转到“xiaodie.jpg”文件的开始位置:3号簇,其内容如图4-328所示。

从图4-328中看,数据区的内容并没有改变。

FAT32文件系统删除文件的分析及恢复-数据恢复迷

图4-328 “xiaodie.jpg”文件开始位置的数据内容

文件删除后的恢复

将这个被删除的文件的数据区的内容全部选中,并另存为一个新文件,如图4-329所示。

FAT32文件系统删除文件的分析及恢复-数据恢复迷

图4-329 将“xiaodie.jpg”文件的数据区选中并另存

将该文件的数据区中这些十六进制值保存到D盘根目录下,并命名为123.jpg。

保存后在D盘根目录下可以看到“123.jpg”文件,如图4-330所示。

FAT32文件系统删除文件的分析及恢复-数据恢复迷

图4-330 D盘根目录下的123.jpg文件

这个文件就是用WinHex从FAT32分区中恢复出来的被删除的“xiaodie.jpg”文件的数据区的内容,双击打开这个文件,可以看到如图4-331所示的图片。

FAT32文件系统删除文件的分析及恢复-数据恢复迷

图4-331 被恢复出来的文件打开后的画面

很明显,这个文件的画面就是被删除的“xiaodie.jpg”文件,以上的过程也就是恢复被删除的文件的过程。

这里再做几点补充说明:

  • 如果文件在数据区中存放的位置比较靠后,文件起始簇号就会很大,那么文件目录项中记录文件起始簇号的高位两个字节就会有数据,当文件删除时,这两个字节会被清零,该文件的起始簇号值也就丢失了,这种删除的文件比较难恢复。
  • 文件删除后,其FAT表中的簇链也会清零,如果文件有碎片,也就是不连续存放,这种删除的文件也比较难恢复。
  • 文件删除后,虽然文件的内容并不会被清除,但其所占用的簇会释放,这些簇就很容易被其他文件进一步占用,这样就覆盖了被删除文件的数据,这种情况下的数据将无法恢复。