一个XLS的碎片提取<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

最近接了一个用户的活,要求恢复一个XLS。该文件存储在一个移动硬盘上,用户误格式化了移动硬盘,写入了一定的数据,然后用软件扫描找到了大部分数据,但是有一个XLS却无法打开,在试了很多次都失败的情况下用户求助于我们。
首先对软件扫描的XLS进行了分析,发现仅仅只有文件头所在的簇(该逻辑盘8SEC一个簇)是正常的,其它全部有问题,该文件没有ROOT没有SAT,如果文件头正确的话很明显这个文件应该是有碎片,然后软件扫描时只是简单的根据文件头进行了连续提取造成了文件的不正确。文件头开始于硬盘2006簇,以下为文件头的信息。
从文件问中可以得知,该XLS无MSAT,只有三个SAT扇区。接挨着文件头的是一个以0908开始的SEC,如果文件头正确那么该簇应该就是该XLS开始的前8个SEC,再往下的簇为INDEX是一个索引,很明显他不属于该文件,那么这个XLS很可能在此处被“隔”开了,碎片产生了
从图中可以得知DocumentSummaryInformation的SID为303,正好在SAT第一个SID的前8个SEC,通过脚本很快定位了几个符合条件的,经过和用户沟通,从中找出一个符合要求的,如下图:
有了这些信息就好处理了,我们可以得到各个SHEET表的偏移值及长度,这样进行查找就方便了,经过两个小时的奋战终于得到了所有的SHEET表,如下图