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文档。看下图:
                           


1.jpg


      接下来我们看其中一个名为《武汉市商品房买卖合同》的文档在删除前的MFT记录:
                           


2.jpg


      然后我们在系统下将《武汉市商品房买卖合同》这个文档删除再用WINHEX打开看删除后该文件的MFT记录:
                           


3.jpg


        
       经过对比我们可以发现文件删除前后MFT的变化如下:
                           


4.jpg

   
        在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属性的运行中。
       文件删除前其父目录的变化情况看下图:
                           


5.jpg


   文件删除后其父目录的变化情况看下图:
                           


6.jpg


        经过对比不难看出文件删除后父目录的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)

    是付出了一定的劳动,收点也应该!!
  • avast200112 (2008-8-15 09:19:13)

    好啊!~很好,谢谢!
  • 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)

    你说的涂彦晖和戴仕剑在2005年合写的《数据安全与编程技术》这本书我可以发誓我从来没就看过,天地良心.
  • tclrz100e (2008-8-15 11:19:04)

    没别的意思,只是提个醒,因为雷同的内容太我多了,而且错的也是一样。
  • 逆水寒 (2008-8-15 11:29:19)

    呵呵,我也没有别的意思.还是谢谢了,
  • love200052 (2008-8-15 11:42:08)

    数据安全与编程技术

    http://books.google.cn/books?id= ... &hl=zh-CN#PPT56,M1


    001.JPG



    002.JPG



    003.JPG



    [ 本帖最后由 love200052 于 2008-8-15 11:52 编辑 ]
  • ——叶上秋露 (2008-8-15 12:04:41)

    不管怎么样还是谢谢楼主,支持楼主。别人花了那么长时间整理出来,收取一两银子也说得过去吧,总比那些保守的人好得多。顶起
  • 逆水寒 (2008-8-15 12:07:47)

    呵呵,谢谢了
  • cyb (2008-8-15 12:14:07)

    QUOTE:

    原帖由 ——叶上秋露 于 2008-8-15 12:04 发表
    不管怎么样还是谢谢楼主,支持楼主。别人花了那么长时间整理出来,收取一两银子也说得过去吧,总比那些保守的人好得多。顶起
    好样的,顶起
  • cyb (2008-8-15 12:24:54)

    不管怎么样还是谢谢楼主,支持楼主。别人花了那么长时间整理出来,收取一两银子也说得过去吧,总比那些保守的人好得多。顶起
    支持逆水寒再发好帖.我们这些新手真是受益不少啊
  • yachengcn (2008-8-15 12:39:18)

    顶起~~~~,买下
  • 逆水寒 (2008-8-15 12:40:58)

    谢谢支持
  • tclrz100e (2008-8-15 13:11:08)

  • lhw8033 (2008-8-15 13:19:09)

    你是一个很细心的人,看好你哟!!