saadtahir-dev/swift-forensic-image-playbook
GitHub: saadtahir-dev/swift-forensic-image-playbook
一份在 macOS 上使用 Swift 构建取证磁盘映像工具的实战指南,解决 Apple Silicon 环境下的编译和集成挑战。
Stars: 0 | Forks: 0
# Swift 取证剧本
在 macOS 上使用 Swift 构建取证映像工具意味着要与 C/C++ 库、autoconf 构建系统、跨架构编译以及 SPM 互操作打交道——这些内容没有哪一处的文档是齐全的。这份剧本记录了完整的实际构建过程,包括遇到的每一个错误及其解决方法。
## 这是什么
这是一份针对主要取证磁盘映像格式的逐步构建和打包指南集合,每份指南都可生成:
- 一个通用静态库(arm64 + x86_64 fat binary)
- 一个封装了 C 接口的 Swift 包(SPM)
- 通过 `swift build` + `swift test` 验证
所有指南均基于 Apple Silicon macOS 上的实际构建过程编写。记录了所有失败、变通方法和修复措施。
## 涵盖的格式
| 格式 | 库 | 状态 |
|---|---|---|
| [Raw / DD](./raw-dd/README.md) | Direct I/O + macFUSE | ✅ |
| [E01 / Ex01 / S01 (EWF)](./ewf/README.md) | libewf | ✅ |
| [AFF4](./aff4/README.md) | aff4-cpp-lite + Velocidex/c-aff4 | ✅ |
| [DMG / SparseBundle](./dmg/README.md) | macOS 原生 (DiskArbitration) | ✅ |
| [VMDK](./vmdk/README.md) | libvmdk | ✅ |
| [VHD / VHDX](./vhd/README.md) | libvhdi | 🔜 |
## 适用人群
- 构建取证映像工具的 Swift/macOS 开发者
- 在 macOS 应用中集成取证格式支持的安全研究人员
- 任何花费数小时试图在 Apple Silicon 上静态构建 `libewf` 或 `libaff4` 的人
## 环境
所有指南均假设:
- Apple Silicon Mac(M 系列)
- macOS 12.0+ 部署目标
- Xcode 15+
- 已安装 Homebrew
跨架构构建(arm64 + x86_64)贯穿始终,包括在 Apple Silicon 上必需的 pkg-config 隔离技术。
**路径约定:** 编译或复制产物的 Bash 片段以 `BUILD_ROOT="${HOME}/forensic-libs"`(目标文件、前缀、fat 库)和 `SPM_ROOT="${HOME}/forensic-spm"`(Swift 包检出)开头。在直接运行命令前,请根据您的机器情况覆盖这些变量。
## 结构
```
(your SPM_ROOT)/swift-forensic-playbook/
├── raw-dd/ ← Raw/DD sector dump formats
├── ewf/ ← Expert Witness Format (E01/Ex01/S01)
├── aff4/ ← Advanced Forensics File Format 4
├── dmg/ ← Apple DMG/SparseBundle (native)
├── vmdk/ ← VMware VMDK
└── vhd/ ← Microsoft VHD/VHDX
```
## 所有指南中的关键概念
**通用 fat binary** — 包含 arm64 和 x86_64 两个切片的单个 `.a` 文件,通过 `lipo -create` 创建。这是面向双架构的 SPM 包所必需的。
**pkg-config 隔离** — 在 Apple Silicon 上,Homebrew 仅安装 arm64 包。跨架构构建需要将 `PKG_CONFIG_PATH` 隔离到自定义构建的 x86_64 依赖树。在 AFF4 指南中有详细介绍。
**静态链接** — 所有库均使用 `--enable-static`(autoconf)或 `-DBUILD_SHARED_LIBS=OFF`(CMake)构建,以生成无运行时 dylib 依赖的自包含 SPM 包。
**module.modulemap** — C++ 库暴露一个 Swift 可调用的 C 接口(`extern "C"`)。`module.modulemap` 将 SPM 的模块系统限制为仅包含 C 兼容头文件,隐藏 C++ 内部实现。
**libyal 构建模式** — libyal 库(libewf、libvmdk、libvhdi 等)需要 `git clone`(而非 tarball)、`./synclibs.sh` 填充嵌入的依赖项,以及 `./autogen.sh` 生成构建系统。直接使用 `autoreconf -fi` 无效。
## 贡献
如果您构建了此处未涵盖的取证格式库,欢迎提交 PR。请遵循现有指南结构——记录每一个错误和修复,而不仅仅是理想路径。
## 许可证
MIT
标签:AFF4格式, Apple Silicon, autoconf, Bash脚本, C/C++集成, DMG格式, EWF格式, macOS开发, SPM互操作, Swift包管理, Swift编程, VMDK格式, 取证成像工具, 实际案例, 库封装, 教程指南, 数字取证, 构建系统, 磁盘镜像, 磁盘镜像分析, 自动化脚本, 跨架构编译, 通用二进制, 错误处理, 静态库