-
-
[原创]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循环直接读取的当前扇区的下一个扇区内容。相关代码,如下图所示:
上面我们已经知道了OffVis在获取目录的时候产生BUG的原因,接下来通过dnSpy来将BUG修复。只需要简单的更改外层循环一句代码代码,即检查SID有效性后添加“Data.Seek(this.GetSectorOffset((uint)num13));”,便能将该BUG修复。修复后的代码,如下图所示:
修复完后,使用dnSoy重新编译并保存,再次解析doc文档。解析后的截图,如下图所示:
本文系作者研究Office文件格式解析分析时梳理的部分基础知识,文章部分内容可能会借鉴他人成果,如有笔误,请见谅。作者在附件提供了修改后的Cases.dll
(SHA256: 9BD579BEAC7A19702F92CED9FC8409C27339C7F36879ED9CFD50458FFC784951),但是建议自己动手修改。VT查杀结果,如下图所示:
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2019-9-3 11:38
被dx苹果的心愿编辑
,原因: 图片模糊上传原图