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

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

2019-8-22 17:00
10576

本文分析了一种被称为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

 
  1. 《Office文件格式基础知识》 —— R0fM1a
  2. 《CFB复合文档文件格式研究》 —— ctzhan4072321
  3. 《复合文档格式研究》 —— 李懿
  4. 《MS-CFB》—— Microsoft
  •          前言
  •          结构图
  •          工具介绍
  •                  BUG分析
  •                  BUG修复
  •          结语
  •          参考文献
  • 《Office文件格式基础知识》 —— R0fM1a
  • 《CFB复合文档文件格式研究》 —— ctzhan4072321
  • 《复合文档格式研究》 —— 李懿
  • 《MS-CFB》—— Microsoft

  • [培训]科锐软件逆向54期预科班、正式班开始火爆招生报名啦!!!

    最后于 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
    活跃值: (56)
    能力值: ( LV2,RANK:10 )
    在线值:
    发帖
    回帖
    粉丝
    4
    感谢,正在学手动恢复复合文档。
    2019-11-25 17:27
    0
    游客
    登录 | 注册 方可回帖
    返回