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复合文件, 二进制文件处理, 复合文档, 安全测试, 微软文档格式, 攻击性安全, 数据重构, 文件变异, 文件格式解析, 文件系统映射, 模糊测试工具, 端点可见性, 红队开发工具, 结构化存储