disk-forensic¶
disk4n6 is the fleet's universal forensic disk layer. Point it at any container — E01, VMDK, VHDX, VHD, QCOW2, DMG, raw dd, or ISO — and it decodes the wrapper, identifies the partitioning scheme (MBR / GPT / APM), and runs the right forensic parser. Run it bare and it maps every physical disk and partition on the live system — macOS, Linux, and Windows in one unified output — with acquisition-integrity findings you need before you image.
The library is also one of three front-ends over the fleet's universal forensic VFS: a layered trait model that lets issen, 4n6mount, and disk4n6 share one open-any-image entry point instead of three parallel detection stacks.
See it work in 30 seconds¶
$ cargo install disk-forensic # crate: disk-forensic, binary: disk4n6
$ disk4n6 evidence.E01 # an EnCase image straight off the shelf
Scheme: Gpt
MBR Forensic Analysis
disk signature : 0x00000000
boot code : AllZeros
partitioning : Unknown
Partition table (1 entries):
[0] GPT Protective MBR LBA 1..=409599 fs=Unknown
GPT cross-check: 131 GPT partition entries
GPT Forensic Analysis
================================================================================
Disk GUID: 9D71FE48-F2FB-43F1-9326-36644D4D4E70
Revision: 1.0
That E01 was decoded, the protective MBR cross-checked, and the GPT parsed — one command, no intermediate files. Exit code is 0 when clean and 1 when any anomaly is present, so it drops straight into a triage pipeline. Add --json (build with --features serde) for machine-readable output.
Feed it almost any image — the wrapper is detected by content, not extension¶
disk4n6 sniffs the container magic, decodes it to a Read + Seek view of the raw disk, and analyses that. Rename a .vmdk to .bin and it still works.
| Input | Handling |
|---|---|
Raw / dd |
analysed in place |
| E01 / EWF (EnCase) | decoded |
| VMDK (VMware) | decoded — follows snapshot/delta extent chains to the base image |
| VHDX (Hyper-V) | decoded |
| VHD (Virtual PC, fixed + dynamic) | decoded (built-in) |
| QCOW2 (QEMU/KVM) | decoded |
| DMG (Apple UDIF) | decoded |
| ISO 9660 (optical) | routed to filesystem analysis |
| AFF4 (physical) | decoded — aff4:ImageStream / aff4:Map opens as a disk view |
| AFF4 (logical) / AD1 | logical file containers — read via disk_forensic::logical::open (not a raw disk) |
A corrupt or unsupported-variant container fails loud with a clear decode error rather than silently producing wrong output. A logical file container (AD1, or an AFF4-Logical aff4:FileImage collection) returns OpenError::LogicalContainer, naming logical::open.
Design properties¶
- Secure by default — one auto-detecting entry point: a caller cannot pick the wrong decoder or parser for a disk.
- Read-only by construction — the
ImageSourcetrait has no write method; a write is uncompilable, not merely undocumented. - Fails loud — a corrupt container or unknown scheme returns a typed error with the offending bytes; it never emits silently wrong output.
#![forbid(unsafe_code)]and fuzz-tested (cargo fuzz) against crafted/corrupted input.- Validated against real images — real EnCase/qemu/hdiutil containers and a genuine NTFS volume from a public CTF disk. See Validation.
Architecture¶
disk-forensic is one of three front-ends over the fleet's universal forensic VFS, sharing one open-any-image entry point with issen and 4n6mount. The layered *Open model, the SourceOpen resolution graph, and the full reader fleet are documented in forensic-vfs — the source of truth. See Architecture for disk-forensic's own role.