FAT32分区格式化后手工恢复数据一例(手工重建FAT和FDT)

前段时间在论坛上发表了一篇关于NTFS分区格式化后用WINHEX手工提取数据一例原文地址:http://bbs.intohard.com/viewthread.php?tid=46244后,很多朋友加了我的QQ,互相讨论了些关于文件系统方面的问题。在此我个人认为,尽管很多问题,比如说误格式化了用一些恢复软件扫描搜索也能恢复出数据。但如果真正从事数据恢复行业想成为数据恢复高手,不了解文件系统根本是不可能达到的。特别是到了磁盘阵列的数据恢复不了解文件系统根本就无从下手。刚好今天手上有个案例,是用手工恢复的,涉及到文件系统方面的知识(FAT32格式的)就花了点时间放上来供大家相互讨论、交流
问题:客户描述为因系统感染病毒重做系统后又在系统下把另外两个盘也格式化了,才想起一些重要的资料放在桌面我的文档里面。
分析:客户原来的系统是XP的,说到这很多朋友就会知道了,有些版本的XP系统桌面上我的文档其实是在D盘里面,而D盘现在已被格式化
首先,我们对原盘做个镜像,(最好不要在原盘上进行操作)然后用WINHEX打开镜像——专业工具——设置镜像为磁盘。到这里,有必要说明一下,我做数据的首先工具就是WINHEX,也不怕大家笑话,别的工具我还真不太会用。WINHEX的功能非常强大,包含了格式化后对全盘进行扫描搜索及搜索某一类型的文件,在这里就不讲解这些了。打开格式化了的D盘,在专业工具——获取快照如图:


1.jpg


在彻底搜索文件系统数据结构前面的小方框打上勾点击左下角的OK开始全盘搜索


2.jpg


搜索的速度很快,10G的分区几分钟就搜完了


3.jpg


点击OK,我们会在目录浏览器下发现多了一个Path unknown(未适路径)双击打开:


4.jpg


可以看出搜索出来的文件是以号作为文件夹存放的,这样我们查阅起来非常不方便,我们可以按文件来排列:


5.jpg


如上图按文件来排列后我们可以选择任意一个文件单击右键进行预览或者是复制到指定的路径。上面我们选择了一个文件进行预览结果为:


6.jpg


点了确定后还是打不开。那么指定路径拷到硬盘上再打开呢,试了很多文件包括照片、文档大都打不开要么就是乱码。用别的软件搜索呢,也试了,效果更差,更难得整理。这时候我们转回头来再来分析格式化了后对数据结构产生了哪些破坏呢?我们看DBR如下图:


7.jpg


好像没发现有什么问题。暂且不管,再看FAT:


8.jpg


从FAT表中可以看到除了用以记录介质描述的簇0和簇1的的位置为F8 FF FF 0F FF FF FF FF外,整个FAT表格式化后被全部清空了。转到看备份的FAT2也遭到破坏。再到根目录下看看文件目录登记项:


9.jpg


除了只留下一个卷标外连回收站都给清除了。再往下查看子目录的内容发现都是完好的,没有被清0。但我们在资源管理器下看不到,是因为FAT和FDT 被清0了,也就没有记录它们的入口了,所以对操作系统来讲,它们是不存在的。其实想想就会明白,对于较大的文件或是整个分区我们在删除、格式化时所花的时间比拷入文件时所花费的时间少得多,所以不可能对数据区也清0。这就有了只要没覆盖过的数据在理论上都能恢复的说法。也就是说格式后只是删除了FAT和FDT,那么我们就可以想是不是恢复了FAT和FDT就恢复数据呢?这只是一个假想,我们可以来试一下。
   可以查找子目录的标示2E或2E2E,也可以用查找文件名方式。因为查找到子目录的标示后还要一个一个的排除,很慢。所以这里我们采用查找文件名的方式,客户描述有个名为“董事会股东会文件”的文件夹,那么我们新建一个文本文档输入这几个字保存。然后用WINHEX打开:


10.jpg


  回到我们的目标盘,到根目录往下搜索文件名的十六进制数值B6ADCAC2BBE1搜索了一会儿停下来了我们看 :


11.jpg


正是客户所需要的文件,往上翻  


12.jpg

看到所在的子目录先看看该子目录的父目录为:00000000H所以该子目录的父目录就是根目录,那么直接在根目录下建一个目录项对应于该子目录就可以了。因此转到根目录,随便在没有使用的目录项上建:


13.jpg


为了方便就取了一个当天日期的文件名,保存退出。关闭程序再打开:


14.jpg


目录浏览器下多了一个刚才建的名为20080717的文件夹,双击打开:


15.jpg


一目了然,客户确认文件一个都不差。先别高兴,会不会像刚才一们产生打不开、乱码的现象呢?按文件排列,预览先前对全盘扫描搜索出的那个文件


16.jpg



17.jpg



18.jpg

   
无论是EXCEL还是WORD照片都能正常预览,这时细心的朋友可能会发现,先前全盘扫描恢复出来的文件名前面有个问号,而后来采用手工恢复出来的却没有。这个问题就留给大家自己思考了。CTRL+A全选拷到指定的路径:


19.jpg


经检验数据百分百的恢复没有一个乱码打不开的。看到这里,有可能会有人发现我这个恢复的过程不是在镜像上而是原盘上操作的,(我本人是坚决反对在原盘上操作的)这次只是为了讲解下一步省略了一个镜像还原的过程,当然这是要在自己的把握的情况下的,之前我已对原盘做过镜像了。照说数据恢复了,我们的工作也就到此结束了,也许有可能会有人觉得下面的工作是多此一举,不过下面的分析会更有利于我们掌握好文件系统。有兴趣的朋友可以往下看。我们关闭程序,重启电脑。再打开资源管理器打开我们的目标盘可以看到我们刚刚建立名为20080717的文件夹还在,按常规双击打开:


20.jpg

  
这是怎么回事呢?之前我们已经分析过了格式化后,FAT和FDT全部被清0了。系统以簇为单位来为文件分配空间,FAT是系统用来记录每个文件的存储位置的表格以链的方式存放簇号。通俗点说就好像是FAT中没有为文件指定一条走下去的路径一样(哈哈,个人理解),就会出现这种情况了。那么我们可以考虑手工重建FAT,当然这还是要建立在文件是连续存放的基础上的,计算量也很大。在这里我们只是为了分析文件系统,再用WINHEX打开目录盘,到要目录下:


21.jpg


从上图文件夹20080717的FDT表项中可以看到文件夹20080717起始簇号为03H簇,
在FAT32中用四个字节来描述一个簇号,那么其在FAT表中对应的偏移地址为3乘以4等于12,也就是说文件夹20080717在FAT的入口地址为12,8KB。因为每簇扇区数为16所以占用一个簇的空间。我们转到FAT下:


22.jpg

  
重建后保存退出。重启电脑,再进入资源管理器下查看双击打开文件夹20080717:


23.jpg

  
能够顺利打开了。我们打开其中任意一个文件或者是文件夹来看看:  


24.jpg

  
跟先前打开20080717文件夹一样。原因是因为我们刚才只是仅仅恢复了文件夹20080717的FAT簇链。剩下的就留给有兴趣的朋友们自己分析了。也可以加我的QQ共同讨论、交流。
   最后还是声明一下,由于本人的数据恢复技术完全是自学,加上学历也有限,很多东西都只是个人所理解,如有不当之处请大家多多指正。谢谢!
我也来说两句 查看全部回复

最新回复

  • lhs6531 (2008-7-18 16:32:39)

    谢谢了
  • lughon (2008-7-18 17:15:38)

    楼主对文件系统掌握比较熟,很经典,学习了
    这个贴子有一处没有看明白
    从整分恢复过程来看,用户想要的文件应全都是连续的.但为什么用WINHEX做快照时恢复出来的文件打不开,而且"交通部公路司调查表"这个文件的首扇区号,用快照时和重定向目录是一样.这个案例没有FAT表所以用快照时和重定向目录时WINHEX只能通过目录项的大小对文件连续提取(我这样理解不知道对不对).不清楚为什么快照恢复不出来.

    [ 本帖最后由 lughon 于 2008-7-18 18:07 编辑 ]
  • wsszsmx (2008-7-18 19:59:53)

    分析重点:
    1、FAT表中可以看到除了用以记录介质描述的簇0和簇1的的位置为F8 FF FF 0F FF FF FF FF外,整个FAT表格式化后被全部清空了。
    2、转到看备份的FAT2也遭到破坏。
    3、再到根目录下看看文件目录登记项,除了只留下一个卷标外连回收站都给清除了。
    4、再往下查看子目录的内容发现都是完好的,没有被清0。



    看来子目录完好是数据恢复的关键。


    根据该文件夹20080717在子目录的起始簇号为03H簇!
    重新在根目录下重新建立他的FDT!和FAT表!
  • yachengcn (2008-7-18 20:00:17)

    经典啊~~~,没看完。先占位置。
    楼上在抓文章重点,小学那时我们叫什么了?呵呵

    [ 本帖最后由 yachengcn 于 2008-7-18 20:34 编辑 ]
  • lenking (2008-7-18 20:32:32)

    经典,学习中!!!!能不能抽时间整理点关于直接删除文件的例子发上来供我们这些菜鸟学习学习,这里先谢了
  • 逆水寒 (2008-7-18 20:35:33)

    好的,谢谢观注。
  • lianking (2008-7-19 10:22:50)

    写的非常详细,楼主辛苦了。有一点我不明白,能不能帮我解释一下

    “在FAT表中对应的偏移地址为3乘以4等于12,也就是说文件夹20080717在FAT的入口地址为12,8KB。”
    这句分析完后,就在FAT表中填入了“FF FF FF 0F ”是怎么得出来的??
  • 逆水寒 (2008-7-19 13:11:56)

    8KB就是16个扇区,每簇扇区数为16,那就是占用一个簇了。簇链的结束标志为FF FF FF 0F,占用一个簇开始就是结束,结束就是开始,所就就直接填入结束标志就行了
  • lianking (2008-7-19 13:47:00)

    非常感谢逆水寒,在百忙之中还给我回复,不过我还是没太明白,8KB怎么得出来的?然后8KB就是16个扇区是根据什么计算的?F32的每簇扇区数为8,怎么成了16了?给你添麻烦了!
  • 逆水寒 (2008-7-19 13:49:49)

    先问你吧,一个扇区是多少个字节?1KB又是多少个字节?每簇扇区数并不是固定的,是根据分区的大小等一些产生变化的。
  • 逆水寒 (2008-7-19 13:50:52)

    先问你吧,一个扇区是多少个字节?1KB又是多少个字节?每簇扇区数并不是固定的,是根据分区的大小等一些产生变化的。
  • lianking (2008-7-19 14:24:00)

    1KB=1024字节 1字节=8位
    一个扇区是512个字节
  • wsszsmx (2008-7-19 16:13:53)

    QUOTE:

    原帖由 lianking 于 2008-7-19 14:24 发表
    1KB=1024字节 1字节=8位
    一个扇区是512个字节
    1k=1024字节
    一个扇区是512字节
    两个扇区是一K,16个扇区就是8K
  • lianking (2008-7-19 17:09:22)

    多谢wsszsmx,终于明白了。
    但还有疑问,该例子中如何判定该文件夹在FAT表中占用的是1个簇,并判定填入的是开始簇,也是结束簇"FF FF FF 0F"??
  • wsszsmx (2008-7-19 18:18:33)

    QUOTE:

    原帖由 lianking 于 2008-7-19 17:09 发表
    多谢wsszsmx,终于明白了。
    但还有疑问,该例子中如何判定该文件夹在FAT表中占用的是1个簇,并判定填入的是开始簇,也是结束簇"FF FF FF 0F"??
    根据文件夹20080717的大小是8KB!这个簇空间大小是8K,而8k就是16扇区!对应每簇就是16个扇区!这里已经说明了就只有一个簇!
    那么这个文件只占有一个簇,那又知道了入口位置:当然要填FF FF FF OF 了!
    也就是说:只有一个簇那么开始和结束的是这个簇!没有其他多余的簇!就可以认为这个簇是开始簇、结束簇都是它了!


    1111111111.jpg



    所以说:要计算的,每簇扇区数并不是固定的,是根据分区的大小等一些产生变化的。

    [ 本帖最后由 wsszsmx 于 2008-7-19 18:33 编辑 ]
  • xxgyhy (2008-7-19 19:11:02)

    真精彩,虽然看不懂,以后一定会看得懂的.
  • ——叶上秋露 (2008-7-20 14:21:10)

    图文并茙,经典
  • yjlbcjk (2008-7-20 19:26:56)

    LZ能自学到这个地步,非常人所能为
  • lianking (2008-7-21 08:46:35)

    感谢“wsszsmx”,虽然还没完全明白,主要是8KB从那里得出的,好象原帖中并没说文件20080717的大小是是8KB哟!
  • awolfs8888 (2008-7-21 09:05:00)

    太经典的教程了.............好好研究一下................