datahdd 发表于 2014-12-22 23:54:25

XLS数据恢复之碎片重组

       Excel文档误删除或误操作导致后用数据恢复软件找回来发现文件打不开,为什么恢复的Excel文档打开是乱码或者不对呢?下面一例Excel文档碎片数据恢复文件头损坏导致损坏是其中的一种。

       此例要恢复的XLS大小为3.7M,去到WINHEX里面首先要确定文件的头对不对



       在这里可以看到文件大小为3.7M,初步看文件头大小是对的



       可以看到上图标记位置大小为3B000000=59,那么按照经验可能估算文件大小约为60KB*59=3540KB,这跟目录项的大小相近,那么这个头应该是对的。

       接下来根据文档MSAT(下图标记位置)去寻找文件的结尾



       可以看到在最后一个MSAT为681D0000=7528,因为文件MSAT的标记为FDFFFFFF,他的相应的偏移量为7528 MOD 128=104*4=416,于是可以搜索偏移量为416的地方搜索标记FDFFFFFFFEFFFFFF(因为最后一个主MSAT过后肯定是一个流的标记,而流的标记为FEFFFFFF,于是我们可以增加这个标识来增大搜索的精准度),如下图所示:



       一般搜索从文件头的位置开始向下搜索。搜索到符合条件再要判断他的扇区对应位置对不对



如上图,可以看到标记位置ID为7469,那么第一个MSAT的位置则为7471(隔了8个字节),这时再看文件头看是否第一个MSAT指向7471扇区。



       如上图第一个MSAT位置为7470,所对应扇区为7471(因为是相对位置,所以要加1才是对应的扇区位置),因此找到的这个位置有可能是文档的尾巴,针对U盘做碎片重组,FAT32的文件系统里的XLS文档多数是由两个碎片组成,其中一个碎片一个是文件头,由一个簇组成,除文件头其它部分则为第二个碎片。因为此种结构的文档最后一个扇区是目录流,结构如下图:



       可以看到最后一个扇区位置为146662,这个是该文档的最后一个扇区,文件的第一个碎片为文档头开始的8个扇区,第二个碎片的大小则为除去文件头后的大小,结束位置为146662扇区。而从文档头可以知道文档的总大小。



       从上图可以看到文件的最后一个扇区为为7530,那么大小为7531(因为从0开始计扇区),则碎片分为两部分,分别是0-7,8-7530。于是第二个碎片的开始位置就可以算出来了,为146662-(7530-8)=139140,现在跳到这个扇区



       可以看到139140扇区内容明显是XLS的头内容,那么把139140-146662的扇区段保存为另一个碎片,再跟第一段组合起来文件就可以正常打开了。

heyun234 发表于 2014-12-23 09:01:33

不错谢谢楼主了

英胜数据恢复 发表于 2014-12-23 11:43:59

恩。。。。。
只有两个,运气好。。。

15770134380 发表于 2014-12-23 15:42:15

如果多个文件碎片呢?请教高手

happy2011 发表于 2014-12-24 08:41:21

good~~~~~~~~~~~~~~~~~

laxiaota 发表于 2014-12-25 01:32:23

备受启发,好帖子已经收藏,非常感谢楼主的高技术含量帖子!

puteng 发表于 2014-12-27 17:20:06

写得太好。。但还没看懂。。新手。。。

xiongdeyuan 发表于 2014-12-28 10:59:10

不错,谢谢分享

jhg315806721 发表于 2015-1-17 16:48:46

好贴必顶

pgxp 发表于 2015-1-18 20:54:41

谢谢楼主提供,学习了
页: [1] 2 3
查看完整版本: XLS数据恢复之碎片重组