SecurityRonin/iso9660-forensic
GitHub: SecurityRonin/iso9660-forensic
SecurityRonin/iso9660-forensic:基于Rust的ISO 9660光盘镜像取证分析工具。
Stars: 0 | Forks: 0
[](https://crates.io/crates/iso9660-forensic)
[](https://docs.rs/iso9660-forensic)
[](LICENSE)
[](https://github.com/SecurityRonin/iso9660-forensic/actions)
[](https://github.com/sponsors/h4x0r)
**将光盘镜像传递给 `analyse()` 并获取一个按篡改、损坏和隐藏发现排序的列表——以及表明谁、什么和何时构建它的来源面包屑。**
一个纯 Rust ISO 9660 读取器 *和* 法医分析器。读取器处理让基本解析器困惑的扩展(多会话、Rock Ridge、Joliet、El Torito、原始 2352 字节 CD 扇区)。分析器将解析转换为 **23 个异常发现**——ISO 9660 在每个地方都保留冗余副本,并对每个非文件字节进行雕刻。
## 30 秒到一个发现
```
[dependencies]
iso9660-forensic = "0.4"
```
```
use iso9660_forensic::analyse;
use std::fs::File;
let mut img = File::open("evidence.iso")?;
let report = analyse(&mut img)?;
// Provenance — what a report leads with (observed facts, never conclusions)
let v = &report.volume;
println!("label={:?} mastered-by={:?} created={:?}",
v.volume_label, v.data_preparer_id, v.creation_time);
// Anomalies — ranked by severity, each with a stable code and a plain-language note
for a in &report.anomalies {
println!("[{}] {} — {}", a.severity, a.code, a.note);
}
```
```
label="INSTALL_CD" mastered-by="MKISOFS 2.01" created=Some("2026-01-14 09:02:11")
[High] ISO-PATHTABLE-ENDIAN — path-table entry 3: LBA mismatch L=412 M=88231 …
[High] ISO-DISGUISED-EXEC — `docs/readme.txt` content begins with a PE executable …
[Medium] ISO-TRAILING-DATA — 1.2 MB of non-zero data past the declared volume end …
[Medium] ISO-SUPERSEDED-FILE — `setup.ini` exists in session 0 but not the active tree …
```
每个发现都从单个分类的 `kind` 中获得其 `severity`、`code` 和 `note`,因此它们不会漂移——与兄弟 `gpt-forensic` / `mbr-forensic` 集装箱使用的相同形状,准备好折叠到一个统一的报告中。
## 它检测什么
引擎是 **冗余 + 松弛**:ISO 9660 大多数东西都存储两次(两端字节序字段、两个路径表、主 + Joliet 树、每个会话描述符)——比较每个副本;然后雕刻每个非文件字节。每个发现区分一个 *观察到的事实* 和一个 *"与...一致"* 推理,并将结论留给检查员。
| 类别 | 发现 |
|----------|----------|
| **交叉冗余**(篡改) | 两端字节序字段不匹配 · L↔M 路径表 · 路径表↔树(幽灵/鬼目录) · 主↔Joliet 树 |
| **松弛和附加数据** | 非零文件松弛 · 体积结束后的尾部有效负载 · 系统区域前的有效负载 · 非零 PVD 保留字段 |
| **结构** | 超出范围的扩展 · 扩展重叠 · 目录循环 · 孤儿(未链接)文件 |
| **时间** | 文件记录在体积之后 · 混合时区 · 不可能的体积日期(1985 年前/未来) · ISO ↔ Rock Ridge 时间不匹配 |
| **历史** | 会话间的替代/可恢复内容 |
| **身份和逃逸** | 符号链接路径遍历 & 绝对目标泄露 |
| **隐藏和真实性** | Rock Ridge ↔ Joliet 文件名差异 · 通过文档扩展名伪装的执行文件 · 无效/零 EDC · 无效的里德-所罗门 P/Q ECC |
…来源摘要还显示了母盘工具指纹、体积时间戳、创作时间窗口、Rock Ridge 所有者 UIDs/GIDs/inodes、El Torito 启动平台 + 启动图像 SHA-256,以及 Rock Ridge / Joliet / ISO 9660:1999 扩展标志。
它还可以 **在损坏的证据上优雅地降级**:超出范围的扩展、目录循环和截断图像被 *报告为发现* 而不是崩溃分析。
## 提供任何光盘容器
`open()` 将常见的图像容器解析为 ISO 9660 数据轨道上的 `Read + Seek`,因此相同的 `analyse()` 可以在所有这些上工作:
```
use iso9660_forensic::{analyse, open};
let mut src = open("image.cue")?; // .iso .cue .ccd .nrg .mds .toc
let report = analyse(&mut src)?;
```
## 浏览体积
除了分析之外,`IsoReader` 是一个完整的导航器:
```
use iso9660_forensic::IsoReader;
use std::fs::File;
let mut reader = IsoReader::open(File::open("image.iso")?)?;
println!("sessions={} rock_ridge={} joliet={}",
reader.session_count(), reader.has_rock_ridge(), reader.has_joliet());
for entry in reader.walk()? {
println!(" {} ({} bytes, LBA {})", entry.path, entry.record.size, entry.record.lba);
}
let entry = reader.find_entry("docs/readme.txt")?;
let bytes = reader.read_file_entry(&entry)?;
```
| 扩展 | 基本读取器 | `iso9660-forensic` |
|-----------|:-----------:|:------:|
| 多会话 / 多轨道 | 仅最后会话 | 所有会话(+ 每个会话遍历) |
| Rock Ridge (RRIP) NM / PX / TF / SL | 否 | 是 |
| Joliet UCS-2 文件名 | 否 | 是 |
| El Torito 启动目录 | 否 | 是(BIOS + UEFI,多部分) |
| ISO 9660:1999 增强体积描述符 | 否 | 是 |
| 原始 2352 字节 Mode-1 扇区 | 否 | 是(自动检测) |
| 路径遍历 / 循环 / OOB 保护 | 很少 | 总是 |
`serde` 在 `serde` 功能之后——每个输出类型都继承 `Serialize` 以进行 JSON / DFXML 报告。
## 验证
- 与来自不同来源的独立真实世界图像进行了验证,因此解析器不会与任何单个固定生成器共享盲点——Microsoft VL 压缩(普通 ISO 9660)、TinyCore Linux(Rock Ridge + Joliet + El Torito)、Debian netinst(BIOS+UEFI 混合启动)和真实的 CloneCD / Alcohol / CDRDAO 容器。
- 在发货之前,每个异常都在干净的语料库上进行了验证,并且 EDC/ECC 算法都经过往返 + 已知答案测试,以 ECMA-130 参考为基准。
- 大图像在缺失时自动跳过;运行 `bash corpus/fetch.sh` 以在本地启用它们。
有关支持的格式矩阵,请参阅 [docs/formats.md](
标签:CD 镜像, El Torito, ISO 9660, Joliet, MIT 许可, Rock Ridge, Rust 编程, Zenmap, 代码审查, 可视化界面, 多会话支持, 开源框架, 异常检测, 持续集成, 数字取证, 数据完整性, 数据恢复, 文件分析, 溯源, 漏洞分析, 磁盘镜像, 篡改检测, 自动化脚本, 证据链, 路径探测, 通知系统