您好,欢迎访问华山数据恢复

当前位置:华山数据 >>技术专栏>> 技术专题

用WinHex手工修复损坏的复合文档文件头

 用WinHex手工修复损坏的复合文档文件头

 
说明:

1、本教程仅仅针对复合文档(比如Word、Excel等)的文件头损坏后的修复.

2、请允许我假设你已经了解复合文档的结构,至少你能知道复合文档中的一些术语(比如:SAT、SSAT MSAT、标准流、短流等),否则,请你弥补相关知识后继续阅读本教程(可以在百度上搜索“复合文档文件格式研究”的文章学习

3、网上这方面的资料很少,所以本教程中有的名词是自己“命名”的,因此,相关名词请只在本教程中使用和理解!!

一、现象
打开这个文档时出现乱码(如图):

二、分析数据
WinHex打开这个文档,如下图:

 

分析:这个文档的文件头损坏了,继续分析后面的内容损坏没有,现在把这个文档设置为磁盘(如图),复合文档在储存数据的最小单位是块(一个块是512个字节,相当于一个扇区的数据,所以有时我们也把它称为扇区),这样操作后看到的数据可以以一个扇区的形式呈现,便于分析和手工重建。

经过分析数据发现,这个文档好像只有第0扇区的数据完全破坏了,这个扇区的内容是复合文档的文件头内容,网上有恢复复合文档文件头的视频教程(这个论坛上就有!!),好像就是把一个正常的复合文档的前几行数据复制一下就行了,从理论上讲恢复的成功率极小,几乎是0。因为复合文档的结构和FAT文件系统极其相似,但比它还要复杂一些(涉及到短流、SSATMSAT),复合文档的文件头相当于FAT文件系统中的DBR,有很多参数是要根据文件的具体数据进行相应的修改。下图中红底黑字部分描述的就是一般要修改的内容(有7处,小的文档一般只改其中的5处),其它部分可以用一个正常的复合文档的相应数据代替。

说明:要修改的文件头内容:
1、存放扇区配置表(SAT)的扇区总数(2CH2FH
2、存放目录流的第一个扇区的SID30H33H
3、存放短扇区配置表(SSAT)的第一个扇区的SID3CH3FH
4、存放短扇区配置表(SSAT)的扇区总数(40H43H
5、存放主扇区配置表的第一个扇区的SID(如果为-2表示没有附加扇区)(44H47H
6、存放主扇区配置表的扇区总数(48H4BH
7、存放主扇区配置表(MSAT)的第一部分(从4CH开始,视具体情况决定结束位置)
备注:如果文件比较小(存放主扇区配置表的第一部分在第0扇区没有装满),第56两部分不用修改!!

要修复文件头,一般从扇区配置表(SAT)的数据分析开始,SAT相当于FAT文件系统中的FAT表,它把这个复合文档的各类数据“链”在一起,所以我们反过来通过分析它们的链接情况和相应位置的数据,来分析整个文档的数据结构,最后根据相关信息重建文件头,达到修复文件头的目的。

在分析前有必要作一个说明,不然你会越看越糊涂的!!我们现在看到的数据所在的扇区数据和复合文档中描述的扇区数有一个扇区的错位,比如说复合文档中描述的第0扇区在WinHex中看到的是第1扇区,为了便于区分,把用WinHex打开看到的扇区叫做物理扇区,文档的参数中描述的扇区叫参数扇区(这是我自己想的一个概念,请只在本教程中使用和理解!!)。我们可以这样理解:物理0扇区是这个复合文档的文件头,存放了复合文件的一些整体信息,它对后面的数据来说是一个隐藏扇区,所以对数据区来说,它把物理1扇区看成它的第一个扇区(即参数0扇区),物理2扇区就是参数1扇区,依此类推(如下图所示)。
物理扇区 0123456…………N
参数扇区 012345…………N1
 
通过分析开始几个扇区的数据很容易判断出物理1扇区的数据就是SAT(如图)

1扇区(物理)

从这个扇区中的数据可以看到,在参数0扇区和参数100扇区这两个扇区中的数据是SAT数据(因为相应的位置是FDFFFFFF,而FDFFFFFF是存放SAT扇区标志),参数0扇区就是物理1扇区的位置,现在的这个位置就是SAT数据,不必再分析,现在到参数100扇区,就是物理101扇区去看看(如图):

101扇区(物理)

这个扇区中没有FDFFFFFF,而且从偏移CA6BH开始,后面全部是FFFFFFFF(空闲的SID),综合这两个扇区(物理第1和第101扇区)的数据可以确定:存放扇区配置表(SAT)的扇区总数:2个(要修改的第1个参数);这两个是:参数0扇区和参数100扇区(要修改的第7个参数)。(其实存放扇区配置表的扇区总数可以根据这个文档的扇区总数直接判断!!)然后分析这两个扇区的SAT链接情况和相应扇区的数据获得以下信息(下面的扇区都是指参数扇区):

SAT0100(共2个扇区)

DIR1154(共2个扇区)

SSAT2(共1个扇区)

短流:3153(共2个扇区)

标准流:4――(100)――152(从参数4扇区到152扇区,不包括参数100扇区,共148扇区)

三、手工修复文件头
1、将一个正常的复合文档的第一个扇区(物理0扇区)的数据复制到这个要修复的文档的物理0扇区位置(如图)

2、修复相应的数据
因为这个文档比较小,所以只修改5个位置,即:
1、存放扇区配置表(SAT)的扇区总数(2CH2FH):02000000
2、存放目录流的第一个扇区的SID30H33H):01000000
3、存放短扇区配置表(SSAT)的第一个扇区的SID3CH3FH):02000000
4、存放短扇区配置表(SSAT)的扇区总数(40H43H):01000000
5、存放主扇区配置表(MSAT)的第一部分:0000000064000000FFFFFFFF(后面全部是FF
 

要修复的数据

修复后
然后保存,可以正常打开这个文档(因为这个文档设置的有密码,考虑到隐私问题)
 
 

2008年3月29日  华山剑客写于湖北随州