首页 > 其他 > 详细

DOC复合文档修复头

时间:2021-02-02 22:05:27      阅读:27      评论:0      收藏:0      [点我收藏+]

今天练习时,遇到个无法打开的doc文件,尝试对其进行修复

在winhex打开故障DOC文件
技术分享图片
在导航栏找到 专业工具-将镜像文件转换为磁盘 (方便跳转)
上图可见,这是不是一个正常的DOC文件头

判断故障原因为文件头损坏

解决方法:

  1. 创建一个正常的doc文件,在winhex打开,复制其第一个扇区,写入到故障文件的头(第一个扇区,即0号扇区)

  2. 我们需要修改的有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大小个 表项

填写完成后,保存即完成修复,文件可以正常打开

DOC复合文档修复头

原文:https://www.cnblogs.com/w-study/p/14364206.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!