SecurityRonin/gpt-partition-forensic

GitHub: SecurityRonin/gpt-partition-forensic

一款 Rust 编写的 GPT 分区表取证分析器,能够解析磁盘结构并按严重性分级报告分区表中的各种完整性异常。

Stars: 0 | Forks: 0

# gpt-partition-forensic [![Crates.io: gpt-partition-core](https://img.shields.io/crates/v/gpt-partition-core.svg?label=gpt-partition-core)](https://crates.io/crates/gpt-partition-core) [![Crates.io: gpt-partition-forensic](https://img.shields.io/crates/v/gpt-partition-forensic.svg?label=gpt-partition-forensic)](https://crates.io/crates/gpt-partition-forensic) [![docs.rs](https://img.shields.io/docsrs/gpt-partition-forensic)](https://docs.rs/gpt-partition-forensic) [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/7d56685594125818.svg)](https://github.com/SecurityRonin/gpt-partition-forensic/actions) [![Sponsor](https://img.shields.io/badge/sponsor-h4x0r-ea4aaa?logo=github-sponsors)](https://github.com/sponsors/h4x0r) **一个对读取内容进行评级的 GUID Partition Table 解析器** —— 验证 header 和 partition-array 的 **CRC32** 完整性,协调 **primary 与 backup** GPT 之间的差异,并将重叠、越界范围、混合 MBR 隐藏分区以及保护性 MBR 不一致等问题作为按严重性分级的发现呈现出来,而普通的 GPT crate 会默默接受这些问题。 ## 在 30 秒内查看其工作原理 ``` [dependencies] gpt-partition-forensic = "0.4" ``` ``` use gpt_partition_forensic::analyse; use std::fs::File; let mut img = File::open("disk.img")?; let size = img.metadata()?.len(); let report = analyse(&mut img, size)?; println!("disk GUID: {}", report.disk_guid); println!("partitions: {}", report.partitions.len()); println!("GPT SHA-256: {}", report.gpt_sha256); for a in &report.anomalies { // each anomaly is a graded forensicnomicon::report::Observation println!("[{:?}] {}: {}", a.severity, a.code, a.note); } # Ok::<(), gpt_partition_forensic::Error>(()) ``` ``` disk GUID: E86E657A-D840-4C09-AFE3-A1A5F665CF44 partitions: 2 GPT SHA-256: 6e4309388564459a83eae7dcd8bf6765d93db6923c951bee98392f236e632e94 [Critical] GPT-PART-OVERLAP: partitions 0 and 1 claim overlapping LBA ranges ``` 被篡改的磁盘不会保持安静:partition array 中翻转的字节、与 primary 不一致的 backup GPT,或者两个占用相同扇区的分区,都会作为一个带有稳定 `code` 和磁盘位置信息的、按严重性分级的异常显现出来。 如果需要一个现成的命令行工具,它可以自动检测分区方案并为*任何*磁盘打印这些信息,请安装统一的 [`disk4n6`](https://github.com/SecurityRonin/disk-forensic) 工具(`cargo install disk-forensic`)。 ## 两个 crate,一个 workspace | Crate | 角色 | 提供的功能 | | --- | --- | --- | | [`gpt-partition-core`](https://crates.io/crates/gpt-partition-core) | **Reader** | 纯 `Read + Seek` GPT 解码器 —— header、partition entries、GUID、CRC32、SHA-256 以及 protective/legacy MBR。无发现。 | | [`gpt-partition-forensic`](https://crates.io/crates/gpt-partition-forensic) | **Analyzer** | 运行 reader,然后将结构评级为 [`forensicnomicon::report::Observation`] 发现。重导出 reader,因此您只需依赖一个 crate。 | ## 它能检测什么 `analyse()` 返回一个 `GptAnalysis` —— 解析出的 `primary` 和(当可读时)`backup` headers、`disk_guid`、使用中的 `partitions`、自动检测的 `sector_size`、包含 header 扇区加上 entry array 的监管链指纹 `gpt_sha256`,以及经过评级的 `anomalies`。每个异常都带有一个稳定的 `code`: | Code | Severity | 含义 | | --- | --- | --- | | `GPT-HDR-CRC` | High | Header 自身的 CRC32 与其内容不匹配。 | | `GPT-HDR-SLACK` | High | Header 的保留空闲区域中存在非零字节。 | | `GPT-HDR-LBA` | High | Header 的自引用 LBA 与其读取的位置不匹配。 | | `GPT-ARRAY-CRC` | High | Partition-array CRC32 与条目不匹配。 | | `GPT-BACKUP-MISSING` | High | Backup GPT 缺失或不可读 —— 磁盘无法自我修复。 | | `GPT-BACKUP-NOTATEND` | High | Backup GPT 不在最后一个 LBA 处 —— 尾部区域被隐藏。 | | `GPT-DIVERGENCE` | High | primary 和 backup GPT 之间存在字段分歧。 | | `GPT-PART-OVERLAP` | Critical | 两个分区声明了重叠的 LBA 范围。 | | `GPT-PART-DUPGUID` | High | 两个 partition entries 共享相同的 unique GUID。 | | `GPT-PART-ENCRYPTED` | High | 分区的内容熵与隐藏的加密卷一致。 | | `GPT-PART-OOB` | High | 分区超出了最后一个可用的 LBA。 | | `GPT-PART-RESERVED` | High | 分区在保留的 GPT 区域内的第一个可用 LBA 之前开始。 | | `GPT-MBR-NOPROT` | High | 存在 GPT 但 MBR 没有 protective (`0xEE`) 条目进行保护。 | | `GPT-MBR-UNDERSIZED` | High | Protective MBR 覆盖的范围小于整个磁盘 —— 尾部暴露给不支持 GPT 的工具。 | | `GPT-MBR-HYBRID-HIDDEN` | High | 混合 MBR 条目不匹配任何 GPT 分区 —— legacy 可见但对 GPT 隐藏。 | 扇区大小是通过在 512 和 4096 字节边界处定位 `EFI PART` 自动检测的;当 header magic 损坏时,可以通过 `analyse_with_options` 和 `AnalyseOptions { sector_size }` 覆盖它。 ## 仅 Reader 当您只需要解码表(无需评级)时,直接依赖 reader 即可: ``` [dependencies] gpt-partition-core = "0.4" ``` ``` // Import path stays `gpt::…` despite the published name. use gpt::{GptHeader, GptEntry, Guid}; ``` 它是一个纯 `Read + Seek` 库,**自身不进行任何 image-format 解码** —— 将其与容器 crate(`ewf`、`vhd`、`vmdk`,……)组合,无需先提取原始镜像即可分析 E01 / VHD / VMDK 证据。Analyzer 是 [`mbr-forensic`](https://github.com/SecurityRonin/mbr-forensic) 的直接替代品,当发现 protective MBR 时它会自动调用 Analyzer,因此无论您是从 MBR 还是从 GPT 开始,都可以使用跨 MBR↔GPT 的协调功能。 ## 信任,但要验证 - **轻量依赖** —— CRC32 (ISO-HDLC) 和 SHA-256 (FIPS 180-4) 从零开始实现,并针对 zlib / NIST 向量进行了验证;运行时依赖项为 `thiserror` 和 `forensicnomicon`(共享的发现模型)。 - **无 panic** —— 生产代码不包含 `unwrap`/`expect`/`panic!`,由 workspace 的 `unwrap_used`/`expect_used = deny` lints 强制执行,并在攻击者可控的输入上执行带边界检查的整数读取。 - **无 `unsafe`** —— 整个 workspace 实行 `#![forbid(unsafe_code)]`。 - **经过 Fuzz 测试** —— 一个 `cargo fuzz` workspace 驱动解析器和完整的 `analyse` pipeline;其不变式是“不得 panic”。 - **已针对真实磁盘镜像进行验证**,不仅是合成测试固件。 - **默认安全** —— 零配置的 `analyse()` 路径会执行每一项完整性检查;您不会意外跳过 CRC 验证。 ## 同级 crate 每个分区方案对应一个取证解析器 —— 每个都是一个纯 `Read + Seek` 库,可与相同的容器 crate 组合: - [`mbr-forensic`](https://github.com/SecurityRonin/mbr-forensic) —— Master Boot Record(传统 BIOS 分区;对于带有 protective-MBR/GPT 的磁盘会自动委托给这里处理) - [`apm-forensic`](https://github.com/SecurityRonin/apm-forensic) —— Apple Partition Map(经典 Mac 和混合光学介质) - [`disk-forensic`](https://github.com/SecurityRonin/disk-forensic) —— **编排器**:将其指向任何磁盘,它会自动检测方案并分派给上面正确的解析器 [隐私政策](https://securityronin.github.io/gpt-partition-forensic/privacy/) · [服务条款](https://securityronin.github.io/gpt-partition-forensic/terms/) · © 2026 Security Ronin Ltd
标签:GPT, Rust, 可视化界面, 数字取证, 数据完整性校验, 文件系统, 漏洞管理, 磁盘分析, 网络流量审计, 自动化脚本, 通知系统