SecurityRonin/cfb-forensic

GitHub: SecurityRonin/cfb-forensic

一款用于深度提取 OLE/CFB 复合文件中已删除数据残留与结构篡改痕迹的 Rust 取证分析库。

Stars: 0 | Forks: 0

# cfb-forensic [![cfb-forensic](https://img.shields.io/crates/v/cfb-forensic.svg)](https://crates.io/crates/cfb-forensic) [![Docs.rs](https://img.shields.io/docsrs/cfb-forensic)](https://docs.rs/cfb-forensic) [![Rust 1.81+](https://img.shields.io/badge/rust-1.81%2B-blue.svg)](https://www.rust-lang.org) [![License: Apache-2.0](https://img.shields.io/badge/License-Apache--2.0-blue.svg)](LICENSE) [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/f07a9d4056063420.svg)](https://github.com/SecurityRonin/cfb-forensic/actions) [![unsafe forbidden](https://img.shields.io/badge/unsafe-forbidden-success.svg)](https://github.com/rust-secure-code/safety-dance/) [![Sponsor](https://img.shields.io/badge/sponsor-h4x0r-ea4aaa?logo=github-sponsors)](https://github.com/sponsors/h4x0r) **深度提取 OLE Compound File Binary ([MS-CFB]) 文件中被正常读取路径所隐藏的内容——包括孤立(已删除)的目录条目、空闲扇区和残区残留,以及结构性篡改痕迹。** CFB(又称 OLE2 / COM Structured Storage)是 JumpLists (`.automaticDestinations-ms`)、旧版 Office `.doc`/`.xls`/`.ppt`、`.msi`、`.msg`、thumbcache 以及便签背后的容器格式。成熟的 [`cfb`](https://crates.io/crates/cfb) crate 能够完美读取*活跃*流和存储;但它**不**暴露那些对审查人员至关重要的已删除流元数据、未分配扇区或标记违规。`cfb-forensic` 正是在此基础上添加了这一提取层——就像 `sqlite-forensic` 之于 `rusqlite` 一样,它是 CFB 的取证对应物。 ## 30 秒审计复合文件 ``` [dependencies] cfb-forensic = "0.1" ``` ``` use cfb_forensic::audit_bytes; for finding in audit_bytes(compound_file_bytes) { println!("{finding:?}"); // OLECF-ORPHANED-DIR-ENTRY, OLECF-FREE-SECTOR-RESIDUE, ... } ``` `audit_bytes` 对头部、FAT/mini-FAT 和目录进行了最小化的原始遍历——这独立于 `cfb` 的逻辑视图——因此它能够发现那些已被导航层丢弃的扇区和目录条目。 ## 观察内容 | 代码 | 观察内容 | |---|---| | `OLECF-ORPHANED-DIR-ENTRY` | 从根红黑树无法到达的目录条目——可恢复的**已删除流**名称、大小和内容指针 | | `OLECF-FREE-SECTOR-RESIDUE` | FAT/mini-FAT 中标记为空闲(`FREESECT`)但仍保留非零字节的扇区——已删除流的残留物 | | `OLECF-SLACK-RESIDUE` | 在流最后分配的扇区中,超出其声明大小的非零字节 | | `OLECF-STRUCTURE-ANOMALY` | 标记 / DIFAT / 红黑树违规,或者带有非零 CLSID 或时间戳的流条目([MS-CFB] 规定对于流这些必须为零——这是一种篡改痕迹) | | `OLECF-ROOT-CLSID` | 根存储 CLSID 以及 CFB 记录的唯一创建/修改时间戳 | 每一条发现都是一个 `forensicnomicon::report` 观察——**“与……一致”,绝不是最终结论**;结论由分析人员做出。格式常量(签名、扇区标记、目录条目偏移量、`ObjectType`/`Color` 枚举)来自 [`forensicnomicon::olecf`](https://crates.io/crates/forensicnomicon)。 ## 信任但验证 对不可信输入保证无 panic——每个偏移量、扇区索引和长度字段在使用前都进行了范围检查,分配设有上限,且原始遍历绝不进行未检查的切片索引。代码使用 `#![forbid(unsafe_code)]`,针对 `audit_bytes` 进行了模糊测试,并根据真实的复合文件(JumpLists 和 `.msi`/`.msg` 样本)进行了验证。正常读取路径是经过实战检验的 `cfb` crate(自 2017 年以来下载量超过 4000 万次);我们仅添加了提取遍历部分。 [隐私政策](https://securityronin.github.io/cfb-forensic/privacy/) · [服务条款](https://securityronin.github.io/cfb-forensic/terms/) · © 2026 Security Ronin Ltd
标签:OLE/CFB, Rust, 代码示例, 可视化界面, 数字取证, 数据分析, 数据恢复, 文件格式分析, 网络流量审计, 自动化脚本, 通知系统