首页
社区
课程
招聘
[原创]CFB复合文档文件格式研究
2019-8-22 17:00 8757

[原创]CFB复合文档文件格式研究

2019-8-22 17:00
8757

目录

前言

本文分析了一种被称为Microsoft Compound File Binary(CFB)文件格式的文件结构,也称为Object Linking and Embedding(OLE)或组件对象模型(COM)结构化存储复合文件实现二进制文件格式,此结构名称可以缩短为复合文件。本文旨在加深作者对CFB格式的学习和理解,如有笔误,请见谅。

结构图

绘图

工具介绍

微软为研究复合文档开发了款叫OffVis工具,该工具可以获得结构更清晰的二进制文件视图。但是存在一个很小的BUG,
在分析目录的是时候会读取错误。读取内容,如下图所示:
修改前

BUG分析

OffVis是由C#编写,其中Cases.dll下的OLESSDataFile 负责格式解析。下图是遍历目录结构体的代码,该代码通过嵌套2个for循环来控制对目录结构的遍历,外层循环是对扇区的遍历,内层是对扇区内四个结构体遍历,但是可以看到最外层的for循环在获取到下一个SID所指的地址后并没有改变DATA的当前指针,导致内层的for循环直接读取的当前扇区的下一个扇区内容。相关代码,如下图所示:
BUG分析

BUG修复

上面我们已经知道了OffVis在获取目录的时候产生BUG的原因,接下来通过dnSpy来将BUG修复。只需要简单的更改外层循环一句代码代码,即检查SID有效性后添加“Data.Seek(this.GetSectorOffset((uint)num13));”,便能将该BUG修复。修复后的代码,如下图所示:
修复后
修复完后,使用dnSoy重新编译并保存,再次解析doc文档。解析后的截图,如下图所示:
修改后

结语

本文系作者研究Office文件格式解析分析时梳理的部分基础知识,文章部分内容可能会借鉴他人成果,如有笔误,请见谅。作者在附件提供了修改后的Cases.dll

 

(SHA256: 9BD579BEAC7A19702F92CED9FC8409C27339C7F36879ED9CFD50458FFC784951),但是建议自己动手修改。VT查杀结果,如下图所示:
VT

参考文献

  1. 《Office文件格式基础知识》 —— R0fM1a
  2. 《CFB复合文档文件格式研究》 —— ctzhan4072321
  3. 《复合文档格式研究》 —— 李懿
  4. 《MS-CFB》—— Microsoft

[培训]内核驱动高级班,冲击BAT一流互联网大厂工 作,每周日13:00-18:00直播授课

最后于 2019-9-3 11:38 被dx苹果的心愿编辑 ,原因: 图片模糊上传原图
上传的附件:
收藏
点赞3
打赏
分享
最新回复 (3)
雪    币: 1927
活跃值: (49)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
DeeLMind 2019-8-22 17:05
2
0
感谢大哥分享
雪    币: 222
活跃值: (10)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
Fahrenheit 3 2019-8-30 13:38
3
0
好,正好最近在看这个
雪    币: 238
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
万绿湖 2019-11-25 17:27
4
0
感谢,正在学手动恢复复合文档。
游客
登录 | 注册 方可回帖
返回