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