pallab-js/forensic-kit
GitHub: pallab-js/forensic-kit
ForensicKit 是一款 macOS 取证数据采集框架,通过 CLI 和 SwiftUI 桌面应用实时采集进程、内存、网络和文件系统数据并提供哈希校验与多格式导出。
Stars: 1 | Forks: 0
# ForensicKit
ForensicKit 从运行中的 macOS 系统采集实时取证数据:进程列表、内存使用快照、网络接口信息,以及带有 SHA-256 哈希校验的文件系统目录快照。结果以结构化的 `ForensicEvent` 对象流式传输,并可导出为 JSON、Markdown 报告或 CSV 格式。
## 功能
- **进程树** — 通过 `sysctl(KERN_PROC_ALL)` 快照获取所有正在运行的进程(PID、名称、父 PID、路径),并利用 macOS Security framework 进行**自动代码签名验证**(检测 `valid`、`unsigned` 或 `invalid` 签名)
- **内存记录器** — 通过 `MACH_TASK_BASIC_INFO` 持续监控内存,支持自定义监控间隔、持续时间和告警阈值
- **网络监控** — 通过 `getifaddrs(3)` 列出 IPv4、IPv6 和 MAC 地址,支持协议族分类及安全的可变长度地址提取
- **文件系统扫描器** — 使用 POSIX `lstat` 进行目录快照,捕获常规文件、目录和**符号链接**(在不追踪的情况下记录链接目标),并计算 SHA-256 完整性哈希
- **健壮的异常处理** — 当流中遇到不可读取的项目(例如受 SIP 保护的文件)时,会发出优雅的 `.warning` 事件,而不是静默跳过
- **CLI** — 基于 `swift-argument-parser` 的命令行界面,支持输出 JSON 和 Markdown 报告
- **桌面应用** — 基于 SwiftUI `NavigationSplitView`,提供实时流式图表、配置预设、带有代码签名状态徽章和 symlink 目标可视化的可排序表格、搜索/过滤功能,以及 CSV 导出
- **全阶段 98 项测试** — 使用 Swift Testing,典型运行时间 >0.190s
## 环境要求
- **Swift 6.3+** (`swift --version`)
- **macOS 14+**
- **无需 Xcode**
## 构建与运行
```
# 构建所有 target
swift build
# 运行 CLI
swift run forensic-kit
# 运行桌面应用
swift run forensic-kit-desktop
# 运行所有测试
swift test
# 构建 release
swift build -c release
```
### 桌面应用 (macOS .app bundle)
```
# 手动 .app bundle
bash build-app.sh
```
该脚本将创建包含 Info.plist 和强化 entitlements 的 `ForensicKit.app`。可以将其拖放到 `/Applications` 或通过 Finder 运行。
## 项目结构
```
forensic-kit/
├── Package.swift # SPM manifest (6 targets)
├── Sources/
│ ├── ForensicKit/ # Core library (models, protocols, services)
│ │ ├── Models/ # ForensicEvent, EventPayload
│ │ ├── Protocols/ # CollectionService protocol
│ │ ├── Services/ # ProcessTreeService, MemoryLogger,
│ │ │ # NetworkMonitorService, FileSystemService,
│ │ │ # CollectionOrchestrator
│ │ ├── Reporting/ # ForensicReporter (JSON, Markdown)
│ │ └── Errors/ # ForensicError
│ ├── ForensicKitCLI/ # CLI executable (swift-argument-parser)
│ ├── ForensicKitDesktop/ # Desktop app executable (SwiftUI)
│ └── ForensicKitDesktopCore/ # Shared library (AppState, Panel, helpers)
├── Tests/
│ ├── ForensicKitTests/ # Core library tests (79)
│ └── ForensicKitDesktopTests/ # Desktop app tests (17)
├── specs/ # Phase specifications
│ └── tools/spec-verify.sh # Spec validator
├── build-app.sh # .app bundling script
├── CHANGELOG.md
└── README.md
```
## CLI 用法
```
# 帮助
swift run forensic-kit --help
# 收集所有服务,输出 JSON
swift run forensic-kit --services all --output-format json
# 仅收集进程和网络,生成 Markdown 报告
swift run forensic-kit --services process,network --output-format markdown --output-path report.md
# 带自定义选项的文件系统快照
swift run forensic-kit --services filesystem --fs-target /tmp/snapshot --no-fs-recursive
# 带自定义限制的内存监控
swift run forensic-kit --services memory --memory-limit 2048 --memory-interval 100 --memory-duration 30
```
## 桌面应用
SwiftUI 桌面应用 (`forensic-kit-desktop`) 提供:
- **采集视图** — 带有独立开关的服务卡片、带有实时进度的运行按钮、实时错误/警告横幅,以及系统健康状态诊断
- **数据视图** — 针对进程(以彩色代码签名验证徽章为特色)、网络、内存和文件系统(以符号链接目标箭头为特色)的可排序表格,带有行数统计和搜索功能
- **实时图表** — 带有可配置阈值的实时内存使用 LineMark 图表
- **配置预设** — 3 个内置预设(快速扫描、全面调查、仅内存);支持保存/删除自定义预设
- **检查器** — 针对每行元数据的表单,带有复制按钮和嵌套的原始字典视图
- **导出** — 通过 `.fileExporter()` 为每个数据视图提供 CSV 导出,以及纯文本 / JSON 报告格式化
全局使用 `@Observable` (iOS 17+ / macOS 14+)、`NavigationSplitView`、`Swift Charts` 和 `os_log`。
## 测试
```
# 运行所有测试
swift test
# 运行特定 test suite
swift test --filter "ProcessTreeServiceTests"
swift test --filter "PresetTests"
# 在 CI 环境中使用 xcodebuild 运行
xcodebuild test -scheme forensic-kit -destination 'platform=macOS'
```
所有测试均使用 Swift Testing(不使用 XCTest)。通过 `MockCollectionService` 和 `MockMemoryProvider` 提供 Mock,以实现确定性的服务测试。
## License
MIT