逆水寒 发表于 2008-8-15 03:09:09

NTFS文件系统下文件的删除

前些时间在论坛上发表了一篇《FAT32分区格式化后手工恢复数据一例(手工重建FAT和FDT)》原文地址:http://bbs.intohard.com/viewthread.php?tid=46905和一篇《NTFS分区格式化后用WINHEX手工提取数据一例》原文地址:http://bbs.intohard.com/viewthread.php?tid=46244的贴子。应一些朋友们的要求说是希望出一个关于在FAT32系统下文件删除的视频教程,看了下,在论坛上和一些关于数据恢复技术的书籍上,及最新出版的一本《数据恢复方法及案例分析》对FAT32文件系统及文件的删除都有很详细的介绍,数据恢复新手们可以买来看看。(这里就不再对FAT的文件系统进行研讨了)反倒是对NTFS文件系统及文件的删除介绍得不是很详细,所以今天就抽了点时间参考了些资料,写了这篇《NTFS文件系统下文件的删除》由于NTFS文件系统相关的资料实在是太少也介绍得不是很详细,大部分还是我自己个人所理解。文中如有错误和疏漏之处还请高手加以指正。
       在NTFS系统中删除一个文件时,系统至少在三个地方做了改变。一是该文件MFT的头偏移16H处的一个字节,该字节为0表示文件被删除,为1表示该文件是正被使用的文件,为2表示其是一个目录;二是其父目录文件夹的INDEX-ROOT属性(90H属性)或者INDEX-ALLOCATION(A0属性);三是在位图($Bitmap)元数据文件中把该文件占用的簇对应的位置清0,以便给其他文件留出空间。
       比较一下删除一个文件前后该文件在两个地方的变化,即该文件的MFT与该文件父目录的INDEX属性(90属性或是A0属性)。我们看下面的这个案例:用WINHEX打开这个NTFS格式的分区有一个名为个人资料的文件夹,该文件夹中有几个WORD文档。看下图:
                           
      接下来我们看其中一个名为《武汉市商品房买卖合同》的文档在删除前的MFT记录:
                           
      然后我们在系统下将《武汉市商品房买卖合同》这个文档删除再用WINHEX打开看删除后该文件的MFT记录:
                           
      
       经过对比我们可以发现文件删除前后MFT的变化如下:
                              
      在NTFS分区格式中,虽然文件被删除了,但是其MFT并没有被清空,不过删除文件的同时MFT被清空的可能性也不是没有,那是在最极端的情况下,我们都知道NTFS把磁盘分成了两大部分,其中大约百分之十二分配给了MFT,以满足其不断增长的文件数量。如果系统分配给MFT空间已经接近用完时,系统在删除文件的同时也会将MFT清空,并直接用其它文件的MFT覆盖该文件的MFT。
       这里我们就不讨论上面所说的最极端的情况,通过观察对比前后MFT的变化,可以发现,文件的删除前后MFT的不同之处有四点,它们全部在MFT头中如上表所示。除了MFT头不同,MFT中的其它属性完全一样,包括10H标准文件属性、30H文件名属性、80H数据流属性,看起来好像是只有把文件删除标志从0改成1就能够恢复被删除的文件了,但实际上并非如此。因为NTFS在删除文件时并不只是做了个标记而已,它还在其它至少两个地方做了改变,分别是其父目录的INDEX属性,它可能是90H属性或是A0H属性,当目录中文件或子目录很少完全可以在NFT中描述该目录中的所有文件或子目录的文件索引时,系统会用90H属性。而当该目录下的文件和子目录非常多,多到该目录下的索引项并不能容纳在1KB大小的MFT中,NNTFS系统会选择用A0H属性,并将这些索引放入A0H属性的运行中。
       文件删除前其父目录的变化情况看下图:
                           
   文件删除后其父目录的变化情况看下图:
                           
      经过对比不难看出文件删除后父目录的MFT中定义记录头和属性的总长度的字节发生了变化,删除文件前这个父目录的MFT偏移18H处为十六进制30 02 00 00H而删除后为60 01 00 00H。还有就是偏移30H的更新序列号发生了变化,因为文件夹被修改过,所以其最后的访问时间、修改时间等都发生了变化。但这些变化都不重要,最重要的是这个目录的90H属性的变化,文件《武汉市商品房买卖合同》的索引项已经被删除了。
       除文件自身的MFT和其父目录的MFT中的INDEX属性发生了变化外,为了能将已删除的文件的空间空闲出来,系统还会在位图($Bitmap)元数据文件中的相应位置置0,有兴趣的朋友可以自己往下再分析看看。也可以加我的QQ号共同讨论。
      最后我们到该文件的数据区也可以发现文件删除前后,文件数据区的内容没有任何的改变。至于如何实现手工恢复大家可以参照帖子开头提到的《NTFS分区格式化后用WINHEX手工提取数据一例》。

qwert2000 发表于 2008-8-15 08:05:40

值得学习。。。顶一个先!!!!

lhx0915 发表于 2008-8-15 08:28:38

呵呵,虽然暂时看不懂,但还是顶一下.

玉树临风 发表于 2008-8-15 08:46:30

是付出了一定的劳动,收点也应该!!

lqrqq 发表于 2008-8-15 09:46:20

非常的详细呀。楼主真好。

lhw8033 发表于 2008-8-15 10:03:40

已阅!8错,厉害!!

tclcm056 发表于 2008-8-15 10:33:55

感谢无私奉献的精神

tclrz100e 发表于 2008-8-15 10:38:51

很好的教程!花了很长时间吧,谢谢LZ的无私奉献!!
有两个问题讨论一下:
1、文中除了图片以外的文字部分都是你的原创吗?初看内容时很眼熟,于是查看了涂彦晖和戴仕剑在2005年合写的《数据安全与编程技术》这本书,发现你的内容和这本书中第175页-179页中的文字部分内容惊人的相似(雷同率达到96%)。小心涂彦晖和你打官司(因为你在文中有“大部分还是我自己个人所理解”这句话)!
2、你的这个文章中好像有两处错误(那本书中那两处也错了!!),这个错误我在这个论坛中曾提到过。

逆水寒 发表于 2008-8-15 10:51:59

回复 9# 的帖子

你说的涂彦晖和戴仕剑在2005年合写的《数据安全与编程技术》这本书我可以发誓我从来没就看过,天地良心.

tclrz100e 发表于 2008-8-15 11:19:04

回复 10# 的帖子

没别的意思,只是提个醒,因为雷同的内容太我多了,而且错的也是一样。
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: NTFS文件系统下文件的删除