用WinHex手工恢复复合文档的文件头!!

  [复制链接]

该用户从未签到

29

主题

1092

回帖

1万

积分

[INTOHARD]工兵

Rank: 1

积分
17691
QQ
发表于 2008-3-29 22:00:50 | 显示全部楼层 |阅读模式
winhex修复损坏的复合文档文件头

说明:
1、本教程仅仅针对复合文档(比如Word、excel等)的文件头损坏后的修复.
2、请允许我假设你已经了解复合文档的结构,至少你能知道复合文档中的一些术语(比如:SAT、SSAT MSAT、标准流、短流等),否则,请你弥补相关知识后继续阅读本教程(以前我曾发过一个相关内容的帖子:http://bbs.intohard.com/viewthread.php?tid=37559&extra=&page=1 )
3、这个教程中涉及到的文档样本大家可以到http://bbs.intohard.com/thread-40685-1-1.html中下载.
4、网上这方面的资料很少,所以本教程中有的名词是自己“命名”的,因此,相关名词请只在本教程中使用和理解!!如有不明白之处,可以相互交流(我的QQ409133413

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

打开时的乱码.JPG



[ 本帖最后由 tclrz100e 于 2008-3-29 22:41 编辑 ]

该用户从未签到

29

主题

1092

回帖

1万

积分

[INTOHARD]工兵

Rank: 1

积分
17691
QQ
 楼主| 发表于 2008-3-29 22:55:06 | 显示全部楼层

谢谢版主夸奖,说实在的,学习复合文档的结构是一波三折,有几次曾想到放弃(实在是有点难理解,对我来说!),最后还是硬着头皮攻下了这一关。
回复 支持 1 反对 0

使用道具 举报

该用户从未签到

29

主题

1092

回帖

1万

积分

[INTOHARD]工兵

Rank: 1

积分
17691
QQ
 楼主| 发表于 2008-3-29 22:01:24 | 显示全部楼层
二、分析数据
WinHex打开这个文档,如下图:
用WINHEX打开时的情况.JPG
分析:这个文档的文件头损坏了,继续分析后面的内容损坏没有,现在把这个文档设置为磁盘(如图),复合文档在储存数据的最小单位是块(一个块是512个字节,相当于一个扇区的数据,所以有时我们也把它称为扇区),这样操作后看到的数据可以以一个扇区的形式呈现,便于分析和手工重建。
设置镜像文件为磁盘.JPG
经过分析数据发现,这个文档好像只有第0扇区的数据完全破坏了,这个扇区的内容是复合文档的文件头内容,网上有恢复复合文档文件头的视频教程(这个论坛上就有!!),好像就是把一个正常的复合文档的前几行数据复制一下就行了,从理论上讲恢复的成功率极小,几乎是0。因为复合文档的结构和FAT文件系统极其相似,但比它还要复杂一些(涉及到短流、SSATMSAT),复合文档的文件头相当于FAT文件系统中的DBR,有很多参数是要根据文件的具体数据进行相应的修改。下图中红底黑字部分描述的就是一般要修改的内容(有7处,小的文档一般只改其中的5处),其它部分可以用一个正常的复合文档的相应数据代替。
文件头中要修复的内容.JPG


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



[ 本帖最后由 tclrz100e 于 2008-3-29 22:07 编辑 ]

该用户从未签到

29

主题

1092

回帖

1万

积分

[INTOHARD]工兵

Rank: 1

积分
17691
QQ
 楼主| 发表于 2008-3-29 22:02:02 | 显示全部楼层
要修复文件头,一般从扇区配置表(SAT)的数据分析开始,SAT相当于FAT文件系统中的FAT表,它把这个复合文档的各类数据“链”在一起,所以我们反过来通过分析它们的链接情况和相应位置的数据,来分析整个文档的数据结构,最后根据相关信息重建文件头,达到修复文件头的目的。
在分析前有必要作一个说明,不然你会越看越糊涂的!!我们现在看到的数据所在的扇区数据和复合文档中描述的扇区数有一个扇区的错位,比如说复合文档中描述的第0扇区在WinHex中看到的是第1扇区,为了便于区分,把用WinHex打开看到的扇区叫做物理扇区,文档的参数中描述的扇区叫参数扇区(这是我自己想的一个概念,请只在本教程中使用和理解!!)。我们可以这样理解:物理0扇区是这个复合文档的文件头,存放了复合文件的一些整体信息,它对后面的数据来说是一个隐藏扇区,所以对数据区来说,它把物理1扇区看成它的第一个扇区(即参数0扇区),物理2扇区就是参数1扇区,依此类推(如下图所示)。

物理扇区 0 1 2 3 4 5 6 …………N
参数扇区   0 1 2 3 4 5 …………N1

通过分析开始几个扇区的数据很容易判断出物理1扇区的数据就是SAT(如图)
第一扇区的数据.JPG
1扇区(物理)
从这个扇区中的数据可以看到,在参数0扇区和参数100扇区这两个扇区中的数据是SAT数据(因为相应的位置是FDFFFFFF,而FDFFFFFF是存放SAT扇区标志),参数0扇区就是物理1扇区的位置,现在的这个位置就是SAT数据,不必再分析,现在到参数100扇区,就是物理101扇区去看看(如图):
第101扇区的数据(SAT).JPG
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扇区)



[ 本帖最后由 tclrz100e 于 2008-3-29 22:09 编辑 ]

该用户从未签到

29

主题

1092

回帖

1万

积分

[INTOHARD]工兵

Rank: 1

积分
17691
QQ
 楼主| 发表于 2008-3-29 22:02:39 | 显示全部楼层
三、手工修复文件头
1、将一个正常的复合文档的第一个扇区(物理0扇区)的数据复制到这个要修复的文档的物理0扇区位置(如图)
复制正常的文件头.JPG
2、修复相应的数据
因为这个文档比较小,所以只修改5个位置,即:
1、存放扇区配置表(SAT)的扇区总数(2CH2FH):02000000
2、存放目录流的第一个扇区的SID30H33H):01000000
3、存放短扇区配置表(SSAT)的第一个扇区的SID3CH3FH):02000000
4、存放短扇区配置表(SSAT)的扇区总数(40H43H):01000000
5、存放主扇区配置表(MSAT)的第一部分:00000000 64000000 FFFFFFFF(后面全部是FF
修改.JPG
要修复的数据位置



修复后.JPG

修复后

然后保存,可以正常打开这个文档(因为这个文档设置的有密码,考虑到隐私问题,不便告诉大家。大家在拿到这个样本文档边看这个教程边恢复的时候,如果最后恢复后打开这个文档提示输入密码时,说明你恢复成功了,对我们来说,文档的内容不是很重要)



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




[ 本帖最后由 tclrz100e 于 2008-3-29 22:19 编辑 ]

该用户从未签到

20

主题

245

回帖

1261

积分

Intohard Team

Rank: 7Rank: 7Rank: 7

积分
1261
QQ
发表于 2008-3-29 22:42:45 | 显示全部楼层
佩服楼主,
能把复合文档研究得如此透彻真是难得。
  • TA的每日心情
    慵懒
    2019-3-24 12:40
  • 签到天数: 3 天

    [LV.2]九品芝麻官

    0

    主题

    241

    回帖

    373

    积分

    [INTOHARD]排长

    Rank: 3Rank: 3

    积分
    373
    发表于 2008-3-30 09:30:29 | 显示全部楼层
    好贴值的一看~~~认真学习谢谢楼主分享

    该用户从未签到

    10

    主题

    99

    回帖

    2588

    积分

    [INTOHARD]工兵

    Rank: 1

    积分
    2588
    发表于 2008-3-30 18:36:10 | 显示全部楼层
    教程写的真不错!特别是楼主的钻研精神,值得学习!

    该用户从未签到

    132

    主题

    1250

    回帖

    5851

    积分

    [INTOHARD]团长

    Rank: 8Rank: 8

    积分
    5851
    发表于 2008-3-30 21:41:51 | 显示全部楼层
    真是高手,我学[wiki]数据恢复[/wiki]的都没你理解这么好,谢了,以后多多支持!!!
  • TA的每日心情
    开心
    2015-2-11 15:09
  • 签到天数: 122 天

    [LV.7]四品道员

    16

    主题

    892

    回帖

    995

    积分

    [INTOHARD]连长

    Rank: 4

    积分
    995
    发表于 2008-3-31 13:28:03 | 显示全部楼层
    楼主的理解很厉害支持一下,一直对符合文档类的文件的数据结构不了解,学习下
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    快速回复 返回顶部 返回列表