SecurityRonin/bitlocker-forensic

GitHub: SecurityRonin/bitlocker-forensic

纯 Rust 编写的 BitLocker 取证解密库,可解析 FVE 元数据、通过密码解锁并解密卷,同时自动生成安全配置分级报告。

Stars: 0 | Forks: 0

# bitlocker-forensic [![Crates.io: bitlocker-core](https://img.shields.io/crates/v/bitlocker-core.svg?label=bitlocker-core)](https://crates.io/crates/bitlocker-core) [![Crates.io: bitlocker-forensic](https://img.shields.io/crates/v/bitlocker-forensic.svg?label=bitlocker-forensic)](https://crates.io/crates/bitlocker-forensic) [![Docs.rs](https://img.shields.io/docsrs/bitlocker-core?label=docs.rs)](https://docs.rs/bitlocker-core) [![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) [![Sponsor](https://img.shields.io/badge/sponsor-h4x0r-ea4aaa?logo=githubsponsors)](https://github.com/sponsors/h4x0r) [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/SecurityRonin/bitlocker-forensic/actions/workflows/ci.yml) [![Coverage](https://img.shields.io/badge/coverage-100%25%20lines-brightgreen.svg)](docs/validation.md) [![unsafe forbidden](https://img.shields.io/badge/unsafe-forbidden-success.svg)](https://github.com/rust-secure-code/safety-dance) [![Security advisories](https://img.shields.io/badge/advisories-clean-success.svg)](https://rustsec.org) **通过密码解锁 BitLocker 卷并读取明文 —— 这是一个从零开始构建的纯 Rust BitLocker (BDE) 解密器,已针对真实磁盘映像与 `pybde` 进行了逐字节的验证。** 无需 `dislocker` C 依赖,无需 FUSE,无需挂载:只需一个库即可解析 FVE 元数据,通过密码派生密钥,并解密扇区(AES-128-CBC + Elephant Diffuser)。 ``` use std::fs::File; use bitlocker::BitLockerVolume; // Unlock the dfvfs BitLocker To Go test image with its published password. let mut vol = BitLockerVolume::unlock_with_password(File::open("bdetogo.raw")?, "bde-TEST")?; let mut boot = [0u8; 512]; vol.read_at(0, &mut boot)?; // decrypted FAT boot sector assert_eq!(&boot[3..11], b"MSWIN4.1"); # Ok::<(), Box>(()) ``` ## 范围 此版本完全针对 **Tier-1 oracle 验证**的目标:**密码**保护器(`0x2000`)以及 **AES-128-CBC + Elephant Diffuser**(方法 `0x8000`)。 AES-XTS、恢复密码、启动密钥和 TPM 保护器被特意排除在 *解锁* 范围之外 —— 但元数据解析器仍然会**报告**它发现的每一个保护器和加密算法。请参阅 [`docs/RESEARCH.md`](docs/RESEARCH.md)。 ## 双 crate 架构划分 遵循读取器/分析器分离的标准架构: | Crate | 角色 | 产出 | |---|---|---| | **`bitlocker-core`** | 读取器 / 解密器 (`aes` · `cbc` · `ccm` · `sha2`) | 明文 `Read + Seek` 视图 + 强类型 FVE 元数据 | | **`bitlocker-forensic`** | 基于元数据的异常分析器 | 分级的 `forensicnomicon::report` `Finding`s | ### 分析器发现 | 代码 | 严重程度 | 含义 | |---|---|---| | `BDE-CLEAR-KEY-PRESENT` | 高 | 存在 clear-key 保护器 (`0x0000`) ⇒ 该卷实际上未加密 | | `BDE-PROTECTOR-INVENTORY` | 信息 | 每个保护器(密码 / 恢复密钥 / TPM / 启动密钥 / …)各一个 | | `BDE-WEAK-CIPHER` | 低 | 带有 diffuser 的 AES-CBC 弱于 AES-XTS —— 与旧版操作系统一致 | | `BDE-TO-GO` | 信息 | 一个 BitLocker To Go 可移动媒体卷 | 发现结果仅是**客观观察,绝非最终结论** —— 需由检查人员自行得出结论。 ## 信任但要验证 - **每一个底层原语均采用经过审计的 RustCrypto crate**(`aes`、`cbc`、`ccm`、`sha2`)。唯一手写的加密例程是 **Elephant Diffuser** —— 目前没有现成的 crate —— 它是根据 `libbde` 参考实现的,并且**仅**在真实的 `bdetogo.raw` 映像上通过了独立的 `pybde` oracle 验证,绝非简单的自证往返测试。 - 对不可信卷进行**无 panic、有边界检查**的解析;在生产代码中禁用 `unwrap`/`expect`(`#![forbid(unsafe_code)]`);元数据解析器已经过模糊测试。 - **Tier-1 验证**:解密后的扇区与 `pybde` 逐字节匹配 —— 请参阅 [`docs/validation.md`](docs/validation.md)。 [隐私政策](https://securityronin.github.io/bitlocker-forensic/privacy/) · [服务条款](https://securityronin.github.io/bitlocker-forensic/terms/) · © 2026 Security Ronin Ltd
标签:BitLocker, DNS 反向解析, Rust, 可视化界面, 密码学, 手动系统调用, 数字取证, 磁盘加密, 网络流量审计, 自动化脚本, 解密工具, 通知系统