今天练习时,遇到个无法打开的doc文件,尝试对其进行修复
在winhex打开故障DOC文件
在导航栏找到 专业工具-将镜像文件转换为磁盘 (方便跳转)
上图可见,这是不是一个正常的DOC文件头
判断故障原因为文件头损坏
解决方法:
创建一个正常的doc文件,在winhex打开,复制其第一个扇区,写入到故障文件的头(第一个扇区,即0号扇区)
我们需要修改的有ROOT目录流的起始扇区,SAT表大小,SSAT表起始扇区,MSAT表
查找ROOT目录控制流的起始扇区,通过Ctrl + F 打开查找文本,Unicode方式查找Root Entry
可以查找到Root的起始目录流位于扇区2,因为SID的计算是不包括文件头的,2-1得出Root目录流的起始扇区SID
填入到文件头的相应位置
查找SAT表大小 因为Root目录控制流上面紧接的是SAT表的尾部,跳转到Root目录控制流的上一个扇区尾部最后一个字节,alt+2选中尾部,Ctrl + alt +x 打开查找十六进制文本,向上搜索 十六进制数 FDFFFFFF 找到SAT表起始扇区的第一个字节点击选中 按 alt+1 选中,切换到十进制查看其大小,除以512,得到SAT表大小
填到文件头的相应位置
找到SSAT表起始扇区,SSAT表起始扇区位于 Root根目录控制流的 下一个扇区, 其结构类似SAT表
成功找到SSAT起始扇区,位于扇区3,转换为扇区ID(SID),将其减去1,得出 2
填到文件头相应位置(若文件没有SSAT即在文件头相应位置 写入 FEFFFFFF)
填写MAST表 每四个字节一个表项,SAT表大小有多少个,就要填多少个表项
通过查找十六进制数值 FDFFFFFF 定位到当前的 FDFFFFFF 位于 SAT表的第几项
转为十六进制 即为MAST的一个表项,以此类推,填写 SAT大小个 表项
填写完成后,保存即完成修复,文件可以正常打开
原文:https://www.cnblogs.com/w-study/p/14364206.html