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

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

2019-8-22 17:00
9740

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

绘图

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

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

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

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

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

 

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

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