SecurityRonin/disk-forensic

GitHub: SecurityRonin/disk-forensic

一款磁盘取证映像编排工具,能够自动解码多种容器格式并路由到对应的分区与文件系统取证分析。

Stars: 1 | Forks: 0

# disk-forensic [![Crates.io](https://img.shields.io/crates/v/disk-forensic.svg)](https://crates.io/crates/disk-forensic) [![docs.rs](https://img.shields.io/docsrs/disk-forensic)](https://docs.rs/disk-forensic) [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/6ab1210ccc092507.svg)](https://github.com/SecurityRonin/disk-forensic/actions) [![Sponsor](https://img.shields.io/badge/sponsor-h4x0r-ea4aaa?logo=github-sponsors)](https://github.com/sponsors/h4x0r) **将 `disk4n6` 指向任何磁盘映像或取证容器 —— E01、VMDK、VHDX、VHD、QCOW2、DMG、原始 `dd` 或 ISO —— 它会解码封装层,识别分区方案(MBR / GPT / APM),并运行正确的取证解析器。** 无需先提取原始映像,也无需猜测该使用哪种工具。 ## 30 秒查看其运行效果 ``` $ cargo install disk-forensic # crate: disk-forensic, binary: disk4n6 $ disk4n6 evidence.E01 # an EnCase image straight off the shelf ``` ``` Scheme: Gpt MBR Forensic Analysis disk signature : 0x00000000 boot code : AllZeros partitioning : Unknown Partition table (1 entries): [0] GPT Protective MBR LBA 1..=409599 fs=Unknown GPT cross-check: 131 GPT partition entries GPT Forensic Analysis ================================================================================ Disk GUID: 9D71FE48-F2FB-43F1-9326-36644D4D4E70 Revision: 1.0 ``` 该 E01 已被解码,交叉检查了保护性 MBR,并解析了 GPT —— 只需一条命令,无需中间文件。正常退出码为 `0`,如果存在任何异常则为 `1`,因此它可以直接无缝接入分类(triage)pipeline。添加 `--json`(构建时使用 `--features serde`)即可获得机器可读的输出。 ## 支持几乎所有映像 —— 根据内容而非扩展名检测封装格式 `disk4n6` 嗅探容器的 magic number,将其解码为原始磁盘的 `Read + Seek` 视图,并进行分析。即使将 `.vmdk` 重命名为 `.bin`,它依然可以正常工作。 | 输入 | 处理方式 | |---|---| | Raw / `dd` | 原地分析 | | **E01 / EWF** (EnCase) | 解码 | | **VMDK** (VMware) | 解码 —— 顺沿快照/增量数据链追溯至基础映像 | | **VHDX** (Hyper-V) | 解码 | | **VHD** (Virtual PC,固定 + 动态) | 解码(内置) | | **QCOW2** (QEMU/KVM) | 解码 | | **DMG** (Apple UDIF) | 解码 | | **ISO 9660** (光盘) | 路由至文件系统分析(见下文) | | AFF4 | 可识别,但需先解码为原始格式 —— 解码器尚未接入 | 损坏或不支持的容器变体将以**明确报错**的形式响亮地失败,并提供清晰的解码错误,而不是静默产生错误的输出。 ## 光学介质生成文件系统报告 ISO 是一种文件系统,而不是分区的磁盘,因此 `disk4n6` 会将其路由到 [`iso9660-forensic`](https://github.com/SecurityRonin/iso9660-forensic) 并呈现相同的标准化发现 / 来源 / **时间线**视图 —— 包括卷标识、母带工具指纹、Rock Ridge 创作者所有者、结构异常以及重构的创作时间窗口: ``` $ disk4n6 image.iso ``` ``` Filesystem: ISO 9660 Findings: none (clean) Provenance: volume label: DFTEST (iso9660-forensic) system identifier: APPLE INC., TYPE: 0002 (iso9660-forensic) sector mode: Iso2048 (iso9660-forensic) extensions: Rock Ridge: true, Joliet: true (iso9660-forensic) sessions: 1 (iso9660-forensic) Rock Ridge owners: uids [501], gids [0] (iso9660-forensic) ``` 随后,**时间线**部分会根据 PVD 和文件记录的时间重构卷的创作时间窗口 —— 在真实介质上,这些时间会发散成一个你可以进行逻辑推断的时间跨度(一个日期*晚于*其自身所在卷,或处于未来的文件,将被标记为一项发现)。 ## Rust 库 ``` [dependencies] disk-forensic = "0.5" ``` ``` use std::fs::File; // Decode whatever container the evidence arrived in, then analyse the disk. let opened = disk_forensic::container::open(std::path::Path::new("evidence.E01"))?; let mut img = opened.reader; match disk_forensic::analyse_disk(&mut img, opened.size)? { disk_forensic::DiskReport::Gpt(a) => println!("GPT: {} partitions", a.partitions.len()), disk_forensic::DiskReport::Mbr(a) => println!("MBR: {} partitions", a.partitions.len()), disk_forensic::DiskReport::Apm(a) => println!("APM: {} partitions", a.partitions.len()), } # Ok::<(), Box>(()) ``` `analyse_disk` 接受任何 `Read + Seek` 类型,因此你也可以直接传入原始映像。没有识别出方案的磁盘(例如直接写入介质的文件系统)将返回 [`Error::UnknownScheme`] 而不是发生错误解析。每个分析器都会标准化为共享的 [`forensicnomicon::report`](https://github.com/SecurityRonin/forensicnomicon) 模型,因此发现和来源结果可以在所有方案和 ISO 文件系统层中以统一的方式呈现。 ## 方案解析器 `disk-forensic` 是纯粹的调度层 —— 它使用 [`forensicnomicon`](https://github.com/SecurityRonin/forensicnomicon) 中引用的 magic number 对方案进行分类,并将每一个实际的解析工作委托给专注于特定功能、轻量依赖的兄弟库。当你已经明确知道方案时可以直接使用它们;当你不确定时,可以通过本 crate 进行调用: | Crate | 方案 | |---|---| | [`mbr-partition-forensic`](https://github.com/SecurityRonin/mbr-partition-forensic) | 主引导记录 —— 引导代码指纹识别、间隙/残余空间(slack)数据剥离(carving)、**逐分区的 VBR 文件系统指纹识别**、保护性 MBR/GPT 检测 | | [`gpt-partition-forensic`](https://github.com/SecurityRonin/gpt-partition-forensic) | GUID 分区表 —— CRC32 完整性校验、主/备份分区表协调核对 | | [`apm-partition-forensic`](https://github.com/SecurityRonin/apm-partition-forensic) | Apple 分区图 —— 经典 Mac 和混合光学介质 | ## 设计 - **默认安全** —— 拥有单一自动检测入口:调用者无法为磁盘选错解码器或解析器,零配置路径即是正确的路径。 - **明确报错** —— 损坏的容器或未知方案将返回类型化的错误;绝不会静默产生错误的输出。 - **`#![forbid(unsafe_code)]`** 并针对精心构造/损坏的输入进行了 fuzz 测试(`cargo fuzz`)。 - **基于真实映像进行验证**,而不仅仅是合成测试固件 —— 包含真实的 EnCase/qemu/hdiutil 容器以及来自公开 CTF 磁盘的纯正 NTFS 卷。详见 [`docs/VALIDATION.md`](docs/VALIDATION.md)。 [隐私政策](https://securityronin.github.io/disk-forensic/privacy/) · [服务条款](https://securityronin.github.io/disk-forensic/terms/) · © 2026 Security Ronin Ltd
标签:Rust, 动态分析, 可视化界面, 数字取证, 文件系统解析, 磁盘镜像分析, 网络流量审计, 自动化脚本, 通知系统