H盘是fat32系统,簇大小8 。根目录下有一个123.xls文件,winhex下查看文件共有7个碎片。现在删除这个文件,再用winhex分析查找到所有碎片,提取出来,最后在重组为一个文件。
下面是恢复过程:打开winhex,根据目录项定位到他的文件头扇区(过程略)。1591240号扇区 。
根据文件头中的参数跳转到ROOT所在扇区,查看workbook流的起始位置,为08 00 00 00,
跳转过去,
然后根据workbook流的结构关键字标识(比如字体,格式,样式,调色板,SST,sheet表等等)来分析当前碎片的结束位置和下一个碎片的开始位置。
当分析到1591271扇区时,发现下一扇区明显是另外一个复合文档的文件头,这说明1591271扇区就是第一个碎片的结束扇区,经过计算,这个扇区正好是198404号簇的最后一个扇区。
这样第一个碎片就确定了,1591240---1591271 ,提取出来保存为1.dat 。现在查找第二个碎片,我们利用下一个碎片第一个关键字标识距离碎片开始的字节长度为线索来查找。期间排出了几个错误的搜索结果,最后确认1591280扇区为下一个碎片的开始扇区。
下面继续分析,查找是碎片的结尾。通过分析搜索,在1592143扇区找到了碎片尾部,如图:
这样,第二个碎片就确定了,1591280---1592143。提取出来保存为2.dat。
下面查找第三个碎片的开始扇区,同样的思路。最终在1593840扇区找到了下一个碎片的开始扇区。如图:
继续分析查找碎片的结尾,在1594191扇区找到了碎片的结束扇区,如图:
这样,第三个碎片就确定了大小范围,1593840---1594191 。提取出来保存为3.dat 。继续分析搜索第四个碎片。我就不一一贴图了,以下是分析出的各碎片的范围:
4. 1595128---1596183
5. 1669056---1669631
6. 1745208---1745623
7. 1761672---1762887
最后把这提取出来的7个碎片文件合并成一个excel文件:recovery.xls 。然后打开验证
一下,如图:
没有问题,文件重组成功!
以上是我做的实验,在实际的重组过程中可能会碰到一些其他问题。就不探讨了。此实验只是提供一种思路供大家参考,前提是要对workbook流的结构要有一定的了解。好了,就到这里,再见!
bsmao
2014-1-8