SecurityRonin/bitlocker-forensic
GitHub: SecurityRonin/bitlocker-forensic
纯 Rust 编写的 BitLocker 取证解密库,可解析 FVE 元数据、通过密码解锁并解密卷,同时自动生成安全配置分级报告。
Stars: 0 | Forks: 0
# bitlocker-forensic
[](https://crates.io/crates/bitlocker-core)
[](https://crates.io/crates/bitlocker-forensic)
[](https://docs.rs/bitlocker-core)
[](https://www.rust-lang.org)
[](LICENSE)
[](https://github.com/sponsors/h4x0r)
[](https://github.com/SecurityRonin/bitlocker-forensic/actions/workflows/ci.yml)
[](docs/validation.md)
[](https://github.com/rust-secure-code/safety-dance)
[](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, 可视化界面, 密码学, 手动系统调用, 数字取证, 磁盘加密, 网络流量审计, 自动化脚本, 解密工具, 通知系统