jknyght9/diskforge
GitHub: jknyght9/diskforge
一个基于 Python 的声明式磁盘镜像生成工具,通过 JSON 清单定义分区、文件系统、加密和 OS 模板,快速构建可复现的仿真磁盘镜像,专为数字取证培训和事件响应演练场景设计。
Stars: 0 | Forks: 0
# DiskForge
**DiskForge** 是一个基于 Python 的工具,用于生成分区和加密的磁盘映像,适用于数字取证培训、事件响应模拟、CTF 挑战和实验室环境。
在 JSON 清单文件中定义磁盘布局、文件系统、加密方式、OS 模板和文件填充规则——然后使用单个 Docker 命令构建可复现的磁盘映像。
**[完整文档](https://jknyght9.github.io/diskforge)**
## 功能
- 支持 MBR、GPT 和 RAW (超级软盘) 分区表
- 主分区、扩展分区和逻辑分区
- 多种文件系统:FAT32、NTFS、EXT2/3/4、XFS、exFAT、btrfs、F2FS、HFS+
- 分区级别的 LUKS 加密 (v1/v2)
- VeraCrypt 全盘加密
- MBR 引导代码 (通用存根或自定义二进制文件)
- OS 目录模板:Windows 10、Windows XP、Linux、macOS
- 未分配空间注入 (隐藏密码、恢复密钥、数字取证痕迹)
- 支持添加、复制、移动和删除操作的文件填充
- 文件操作支持通配符和 glob 模式
- 单个清单文件构建多磁盘
- 自动化测试和验证套件 (99 项检查)
- 容器化且可复现 (amd64 + arm64)
## 快速入门
### 1. 克隆并构建
```
git clone https://github.com/jknyght9/diskforge.git
cd diskforge
docker build -t diskforge .
```
### 2. 定义清单文件
```
{
"schema_version": "1.0",
"disks": [
{
"name": "training-usb",
"type": "GPT",
"size": "512M",
"partitions": [
{
"number": 1,
"type": "primary",
"filesystem": "ntfs",
"label": "EVIDENCE",
"size": "500M",
"populate": {
"template": "windows10",
"add_files": [
{ "source": "/files/evtx/*", "target": "/Windows/System32/winevt/Logs" },
{ "source": "/files/docs/*", "target": "/Users/Default/Documents" }
],
"delete_files": ["/Users/Default/Documents/secret.xlsx"]
}
}
]
}
]
}
```
### 3. 构建
```
docker run --rm --privileged \
-v "$(pwd)/manifest.json:/manifests/manifest.json" \
-v "$(pwd)/files:/files" \
-v "$(pwd)/output:/output" \
diskforge /manifests/manifest.json
```
输出的 `.img` 文件将放置在 `output/` 目录中。
## OS 模板
在填充取证文件之前应用逼真的目录结构:
```
"populate": {
"template": "windows10",
"add_files": [{ "source": "/files/*", "target": "/Users/Default/Documents" }]
}
```
| 模板 | OS | 推荐的 FS | 核心结构 |
|----------|----|---------------|----------------|
| `windows10` | Windows 10/11 | NTFS | System32, winevt, Prefetch, registry hives, $Recycle.Bin |
| `windowsxp` | Windows XP | NTFS | WINDOWS, Documents and Settings, Recycled, ntldr |
| `linux` | Linux | ext4 | FHS layout, /var/log, /etc, /home, cron, SSH |
| `macos` | macOS | HFS+ | /Library, /System, LaunchAgents, FSEvents, Spotlight |
模板会创建目录和与取证相关的存根文件 (注册表配置单元、日志路径、系统二进制文件)。自定义模板为 JSON 文件——详情请参阅[模板文档](https://jknyght9.github.io/diskforge/configuration/templates/)。
## 加密
### LUKS (分区级别)
```
"encrypt": {
"type": "luks",
"version": "1",
"passphrase": "secret123"
}
```
支持 ext2/3/4 和 xfs 文件系统。
### VeraCrypt (全盘)
```
"encrypt": {
"type": "veracrypt",
"passphrase": "secret123"
}
```
应用于磁盘级别,而非分区级别。
## RAW 磁盘 (超级软盘)
没有分区表的磁盘——文件系统直接写入设备:
```
{
"name": "floppy",
"type": "RAW",
"size": "1.44M",
"filesystem": "fat32",
"label": "FLOPPY",
"populate": {
"add_files": [{ "source": "/files/*", "target": "/" }]
}
}
```
## 示例
| 示例 | 描述 |
|---------|-------------|
| `examples/example_gpt/` | 包含 FAT32、NTFS、exFAT 和 ext3 分区的 GPT |
| `examples/example_mbr/` | 包含引导代码、主分区 + 扩展/逻辑分区的 MBR |
| `examples/example_luks/` | 包含 LUKS 加密 ext4 分区的 GPT |
| `examples/example_veracrypt/` | 全盘 VeraCrypt 加密 |
| `examples/example_raw/` | RAW 超级软盘 FAT32 映像 |
| `examples/example_template/` | 使用 NTFS 的 Windows 10 OS 模板 |
| `examples/example_btrfs/` | 使用 Linux 模板的 btrfs |
| `examples/example_f2fs/` | F2FS 文件系统 |
| `examples/example_inject/` | 隐藏在未分配空间中的数据 |
## 测试
```
bash test/test.sh
```
构建所有 9 个示例映像,然后运行 99 项验证检查:分区表、文件内容、加密密码验证 (正确 + 错误)、引导代码、模板目录和存根文件。
## 项目结构
```
.
├── main.py # CLI entry point
├── diskforge/ # Core Python modules
│ ├── builder.py # Orchestrator
│ ├── disk.py # Image creation, loop devices, VeraCrypt, RAW
│ ├── partitioning.py # MBR/GPT partitioning, formatting, boot code
│ ├── populator.py # File population (template/add/copy/move/delete)
│ ├── templates.py # OS template loader and applicator
│ ├── manifest.py # Manifest loading and validation
│ └── utils.py # Utility functions
├── templates/ # OS directory structure templates (JSON)
├── examples/ # Example manifests
├── files/ # Sample files for populating images
├── test/ # Build and verification scripts
├── docs/ # MkDocs documentation source
└── Dockerfile # Container definition
```
## 环境要求
- Docker (Desktop 或 Engine)
- 执行 loop 设备和分区操作需要 `--privileged` 标志
## 待办事项
- ZFS 支持 (复杂的打包——内核模块 + 用户空间工具)
- 调研 BitLocker 支持 (需要 Windows 工具)
- APFS 支持 (目前不存在 Linux 实现)
## 许可证
本项目是开源的,并在 MIT 许可证下发布。
## 作者
由 **Jacob Stauffer** 创建 | CISSP, GCFA, GREM, OSCP
欢迎贡献代码和提交 PR!


标签:CTF挑战, Docker, EXT, FAT32, GPT, Homebrew安装, JSON配置, LUKS加密, MBR, NTFS, Python, VeraCrypt, 仿真环境, 全盘加密, 分区表, 域渗透, 安全培训, 安全防御评估, 开源, 操作系统模板, 数字取证, 数据隐藏, 文件系统, 无后门, 漏洞管理, 电子数据取证, 磁盘镜像生成, 自动化脚本, 自动化配置, 请求拦截, 逆向工具, 靶场环境