ebrig/ewf-image

GitHub: ebrig/ewf-image

一个纯 Rust 编写的数字取证磁盘镜像库,提供 EWF/E01(含 EWF1 和 EWF2)格式镜像的完整读写能力、元数据检查和完整性校验功能。

Stars: 0 | Forks: 0

# ewf-image **一个纯 Rust 库,用于读取和写入专家证人格式(Expert Witness Format, EWF)取证镜像。** [![Crates.io](https://img.shields.io/crates/v/ewf-image.svg)](https://crates.io/crates/ewf-image) [![文档](https://docs.rs/ewf-image/badge.svg)](https://docs.rs/ewf-image) [![许可证](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](LICENSE) ![ewf-image 项目横幅](https://raw.githubusercontent.com/ebrig/ewf-image/main/docs/assets/ewf-image-banner.png) `ewf-image` 读取和写入数字取证中使用的 EWF/E01 镜像格式 —— 包括物理、逻辑、SMART 和 EWF2 系列 —— 没有任何 unsafe 代码,也没有外部工具依赖。它暴露了用于原始流访问、元数据检查、逻辑单文件目录和 EWF 输出创建的专用 API。 ## 亮点 - **全格式覆盖。** 读取和写入 EWF1 (`.E01`, `.L01`, `.S01`) 和 EWF2 (`.Ex01`, `.Lx01`),包括 raw、zlib、BZip2 和 pattern-fill chunks。 - **流式读取。** 不可变的 `Image` handle 提供定位读取、 `Read + Seek` 游标,以及有界的解码 chunk 缓存。 - **丰富的元数据。** 检查获取头、存储的 MD5/SHA1 哈希、 获取错误、会话和轨道。 - **完整性校验。** 通过一次 `Image::verify()` 调用即可重新计算并比对存储的哈希。 - **灵活的写入。** 支持压缩、segment 分割、 secondary/shadow 镜像、自定义元数据,以及通过重写实现的恢复。 - **构造上的安全性。** `#![forbid(unsafe_code)]`,在 clippy pedantic/nursery 下进行了 lint 检查,并针对外部 EWF 工具预言机进行了测试。 ## 安装说明 ``` [dependencies] ewf-image = "0.1" ``` 默认的 `verify` 特性通过 `Image::verify()` 启用流式 MD5/SHA1 验证。如果您不需要该 API,可以将其去掉: ``` [dependencies] ewf-image = { version = "0.1", default-features = false } ``` ## 快速入门 打开一个镜像,检查其格式,并从逻辑媒体流中读取: ``` use std::io::Read; let image = ewf_image::Image::open("case.E01")?; let info = image.info(); println!("{:?}: {} bytes across {} segment(s)", info.format, info.logical_size, info.segment_count); // Read the first sector from the cursor... let mut first_sector = vec![0; 512]; image.cursor().read_exact(&mut first_sector)?; // ...or read directly at any offset. let mut sector_at_offset = vec![0; 512]; image.read_at(&mut sector_at_offset, 4096)?; ``` 读取取证元数据并验证存储的哈希: ``` let image = ewf_image::Image::open("case.E01")?; if let Some(case_number) = image.header_value("case_number") { println!("case: {case_number}"); } let result = image.verify()?; println!("MD5 match: {:?}", result.md5_match); ``` 从 raw 字节写入新的压缩 EWF2 镜像: ``` use std::fs::File; let mut input = File::open("disk.raw")?; let mut options = ewf_image::WriteOptions::default(); options.format = ewf_image::WriteFormat::Ewf2Physical; options.compression = ewf_image::WriteCompression::Zlib; options.metadata.set_header_value("case_number", "CASE-001"); let mut writer = ewf_image::EwfWriter::create("case.Ex01", options)?; std::io::copy(&mut input, &mut writer)?; let result = writer.finish()?; println!("wrote {} segment(s)", result.segment_paths.len()); ``` 有关完整的、可运行的程序,请参阅 [`examples/`](examples),包括读取、 raw 导出、逻辑检查和镜像次要输出。 ## 支持的格式 | 家族 | 读取 | 写入 | 备注 | | --- | :---: | :---: | --- | | EWF1 物理 `.E01` / EVF | ✓ | ✓ | Segment 发现、raw/zlib chunks、元数据、哈希、获取错误、会话、轨道和分割输出。 | | EWF1 逻辑 `.L01` / LVF | ✓ | ✓ | 逻辑单文件目录和路径查找。 | | EWF1 SMART `.S01` | ✓ | ✓ | SMART 媒体配置文件处理。 | | EWF2 物理 `.Ex01` | ✓ | ✓ | raw、zlib、BZip2 和 pattern-fill chunks;EWF2 元数据、内存范围和分割输出。 | | EWF2 逻辑 `.Lx01` | ✓ | ✓ | 逻辑单文件目录和辅助单文件表。 | 写入器还支持 SMART 输出、压缩、segment 分割、 secondary/shadow 镜像、自定义元数据、存储的哈希、不完整的 EWF1 输出,以及通过重写实现的恢复。 ## 限制 - 加密的 EWF2 镜像会被检测到并拒绝;解密尚未 实现。 - 加密写入尚未实现。 - Base 加 overlay 的 delta/shadow 镜像尚未实现。 - EWF2 BZip2 chunks 在本地受支持,但某些外部 EWF 工具无法 生成或导出 BZip2 固件,因此它们的外部预言机覆盖率 被单独跟踪。 详情请参阅 [docs/limitations.md](docs/limitations.md)。 ## 测试 兼容性由本地合成固件、写入器往返和 可选的外部 EWF 工具预言机测试覆盖。常规检查包括: ``` cargo fmt --check cargo test --no-default-features cargo test --all-features cargo clippy --all-targets --all-features -- -D warnings cargo check --examples --all-features RUSTDOCFLAGS="-D warnings" cargo doc --all-features --no-deps ``` 默认情况下会忽略外部语料库和工具预言机检查,因为它们 需要本地固件和已安装的 EWF 工具。请参阅 [docs/testing.md](docs/testing.md) 和 [docs/compatibility.md](docs/compatibility.md)。 ## 文档 - [架构](docs/architecture.md) - [兼容性](docs/compatibility.md) - [限制](docs/limitations.md) - [测试](docs/testing.md) - [API 参考 (docs.rs)](https://docs.rs/ewf-image) ## 贡献 欢迎贡献。请参阅 [CONTRIBUTING.md](CONTRIBUTING.md) 开始入门, 以及 [SECURITY.md](SECURITY.md) 了解如何报告安全问题。 ## 许可证 在 Apache License, Version 2.0 下授权。请参阅 [LICENSE](LICENSE)。
标签:EWF格式, Rust, 可视化界面, 哈希校验, 数字取证, 文件系统解析, 磁盘镜像, 网络流量审计, 自动化脚本, 通知系统