手工重建复合文档(.doc;xls,ppt)文件头,修复文件全过程
(2010-11-02 10:51:25)
两个文件的在软件里显示如下图:
复合文档文件头的定义:
Offset
0
8
24
26
28
FFH FEH = Big-Endian
30
为s_size = 2ssz 字节(一般为9即512字节, 最小值为7即128字节)
32
34
44
48
52
56
60
或为–2 (End Of Chain SID)如不存在。
64
68
或为–2 (End Of Chain SID) 若无附加的sectors。
72
76
看起来有些复杂!
修复文件头的数据只需要计算并填写几项,一是扇区分配表(SAT)所占的扇区数,
二是目录起始扇区号,三是短流扇区分配表的起始扇区号及占用扇区数,四是主扇区分配表的起始扇区号及中用扇区数,五是扇区分配表的扇区号,其它内容所有的复合文档都是一样的,从正常文件中拷过来就行。
一:确定目录起始扇区号
打开“损坏的实验文档”,将文件解释为硬盘,搜索字符串“ROOT”(unicode)如图:
搜索到结果,软件自动定位到字符串的位置,如图:
看状态栏:
该字符串位置是43扇区,第一个值确定了,目录起始扇区是43,第一项完成。由于复合文档在扇区编号时不包括文件头,0扇区从512字节处开始,所以目录起始扇区应该是42,下面就不再进行说明。
二:确定扇区分配表(SAT)
我们需要通过扇区的内容来确定某个扇区是不是扇区分配表(SAT)
该文件总共有47个扇区,文件头占一个扇区,剩下46扇区,所以,扇区分配表中的值应该大于0小于等于46,另外还有一些特殊的值,值FEFFFFFF表示扇区链结束,值FDFFFFFF表示该扇区被SAT占用,值FFFFFFFF表示该扇区为空闲。
看文件的1扇区:
数据如下:
该扇区是不是扇区分配表(SAT)呢?
分析里面的数据(4个字节一个项,因为扇区编号是用4个字节来存放的),第一项是ECA5C100,低位在前高位在后,换过来就是00C1A5EC,换成十进制为12690924,文件最大为46扇区,因此该扇区不可能是扇区分配表(SAT)。
看第2扇区,
第三项00007A03不满足条件,因此不是扇区分配表。
重复该过程,1-41扇区均不符合条件,分析到42扇区,看该扇区数据:
继续分析剩下的扇区,直到结束!在本例中,文件总共47扇区大小,而每个扇区512字节,4个字节放一个扇区编号,因此,一个扇区分配表可以存放128个扇区编号,所以说该文件只有一个扇区用来存放扇区分配表(SAT)。第二项完成。
第三:确定主扇区分配表(MSAT)的起始扇区号
主扇区分配表(MSAT)中存放的是扇区分配表(SAT)所在的扇区号,本例中,扇区分配表(SAT)只有一个,根据复合文档的格式定义,文件头中可以存放109项SAT值,也就是说,只要文件的扇区分配表不大于109个,就不需要主扇区分配表,严格的说是不需要额外的主扇区分配表,因为文件头就可以容纳下了,主扇区分配表(MSAT)是在SAT多于109项时,剩下的值用指定的扇区来记录!根据定义,无额外主扇区分配表(MSAT)时,主扇区分配表的起始扇区号为-2,十六进制表示为FEFFFFFF,它占用的扇区数为0,第三项完成
第四:确定短流扇区分配表的起始扇区号及占用的扇区数
短流扇区分配表(SSAT)是复合文档中的另一个概念,短流数据用短流扇区来存放,短流数据存放的位置通过短流扇区分配表来确定。一个文件有没有短流数据可以查看目录,如图:
第四项完成。
第五:确定文件头中的扇区分配表编号
本例子只有一个扇区分配表(SAT),因此文件头中只用填写一个值。
到此,需要重建文件头的所有值基本都确定了,下面的工作就是改写文件头。
定位到0X2C处,2C-2F为扇区分配表(SAT)所占用的扇区数,本例占用1个扇区,转换成十六进制为(01000000,低位在前高位在后),操作完成后如下图:
定位到0X30处,4字节表示目录所在的扇区编号,经前面的计算,目录所在的扇区编号为42,换成十六进制为2A000000,把该值写到此处,操作完成后如下图:
定位到0X3C处,4字节表示短流扇区分配表(SSAT)的起始扇区号,本例短流扇区为44,十六进制值为2C000000,改写后,如下图:
定位到0X40,4字节表示短流扇区分配表占用的扇区数,本例占用1个扇区,应填写01000000,操作完成后如下图:
定位到0X44处,4字节表示MSAT起始扇区编号,本例没有MSAT,填写-2,十六进制值为FEFFFFFF,定位到0X48处,4字节表示MSAT占用的扇区数,本例为0,填写00000000
操作完成后如下图:
定位到0X4C处,此处后的每4个字节填写一项SAT扇区编号,本例只有一个SAT,位置为41,转换成十六进制为29000000,剩下的填写成FFFFFFFF,或者不填写也行!操作完成后如下图:
到此,所有艰苦的工作都完成了,但是文件头的其它数据还没有建立,不过这些数据都是固定的,比如,文件头的前8个字节所有复合文档都是一样的,不一样的只有前面所说的那些项,因此,这些数据可以从别的文件中拷过来!填写完所有数据后,如下图:
保存对文件的修改:
打开“损坏的实验文档”,能够正常打开,并且内容正确!
Office中的WORD,EXCEL,PPT都是复合文档,都可以按这个方法操作