thezdi/CompoundFileTool

GitHub: thezdi/CompoundFileTool

OLE复合文件解析与重构工具,可将复合文件展开为文件夹结构便于编辑和模糊测试,再重新打包为标准格式。

Stars: 4 | Forks: 0

# CompoundFileTool 用于将 [OLE Compound File](https://learn.microsoft.com/en-us/windows/win32/stg/istorage-compound-file-implementation) 展开为磁盘上的文件夹和文件结构,或通过逆向操作创建新的 OLE Compound File 的工具。 该工具的一个用途是进行 fuzzing 操作。你可以: * 使用此工具展开 seed 文件,然后: * 检查并变更磁盘上生成的文件夹和/或文件,然后: * 再次使用此工具,将变更后的文件夹结构转回可被测试应用程序使用的 OLE Compound File。 ### 用法 要展开 Compound Document 文件: ``` CompoundFileTool /e /o [/f] ``` 除非指定 `/f` (`/force`),否则文件夹 `` 事先不能存在。 如果指定了 `/f`,`` 将首先被完全删除。 要从文件夹结构创建 Compound Document 文件: ``` CompoundFileTool /c /o [/s ] ``` ### OLE Compound File 的文件系统表示形式 Compound Document 文件的文件系统表示形式非常直观。顶层文件夹对应根存储,子文件夹分层对应子存储。Stream 由文件表示。 但是,有一些细微之处: * 如果 storage 或 stream 的名称包含 NTFS 文件名中无效的字符,该字符将被转义为 `!u0000`,其中 `0000` 是该字符的 4 位十六进制表示。 - 如果名称是特殊的保留名称(例如 `NUL`),无法存在于文件系统中,则整个名称将被转义。 * 如果 storage 具有关联的非 NULL [class](https://learn.microsoft.com/en-us/windows/win32/api/objidl/nf-objidl-istorage-setclass),CLSID 将出现在相应文件夹内名为 `!CLSID` 的文件中。格式为 ASCII。 * 如果 storage 具有关联的非零 [state bits](https://learn.microsoft.com/en-us/windows/win32/api/objidl/nf-objidl-istorage-setstatebits),这些状态位将以 ASCII 十六进制格式写入相应文件夹内名为 `!STATEBITS` 的文件中。 * 请注意,`!` 在 compound 文件中的 storage 和 stream 名称中不是有效字符,因此上述对 `!` 字符的使用不会产生歧义。
标签:CFB格式, Fuzzing, OLE2, OLE复合文件, 二进制文件处理, 复合文档, 安全测试, 微软文档格式, 攻击性安全, 数据重构, 文件变异, 文件格式解析, 文件系统映射, 模糊测试工具, 端点可见性, 红队开发工具, 结构化存储