ianwatts22/imessage-forensics
GitHub: ianwatts22/imessage-forensics
一款保守的 macOS 取证 CLI 工具,用于审查 iMessage chat.db 中的身份信息污染并安全执行经过逐行验证的精确清理。
Stars: 1 | Forks: 0
# iMessage 取证
一款用于调查 Messages 身份信息污染,并应用经过审查的逐行精确清理清单的严谨 macOS CLI 工具。
## 功能说明
- 检查本地平台、数据库访问权限以及预期的 schema,而不会读取消息内容。
- 报告身份标记和来源证据。
- 根据明确的行级身份值生成 CSV 清单。
- 对清单进行哈希处理,并拒绝已更改的文件。
- 拒绝实时数据库漂移,包括重用的消息或附件行。
- 拒绝空白身份,以及没有稳定非空 GUID 的行。
- 阻止数据库触发器扩大已审查的删除范围。
- 锁定数据库,创建经过完整性检查的 SQLite 备份,在一个事务中应用已审查的删除操作,并在提交前验证完整性。
- 保留共享的附件行,并且绝不删除物理附件文件。
- 将新建的输出和备份目录设置为仅所有者可访问(`0700`),将敏感产物设置为仅所有者可访问(`0600`)。
对于成功的命令,CLI 会在 stdout 输出 JSON。错误信息会输出到 stderr,并带有非零的退出码。
## 环境要求
- macOS
- Python 3.11 或更高版本
- 终端或读取 Messages 数据的代理进程需具备完全磁盘访问权限
- 推荐使用 `uv` 进行安装和开发工作流
在执行实时应用之前,请退出 Messages 以及任何其他有意读取或写入 `chat.db` 的进程。CLI 会获取 SQLite 写锁,但不会暂停 iCloud 同步,也无法阻止后续的同步影响。
## 安装
从克隆的代码库中安装:
```
uv tool install .
imessage-forensics --version
imessage-forensics doctor
```
使用以下命令更新或移除本地工具:
```
uv tool install --force .
uv tool uninstall imessage-forensics
```
对于无需安装的开发环境:
```
env PYTHONPATH=src python3 -m imessage_forensics.cli --help
```
## 安全工作流
1. 检查访问权限和 schema 兼容性。此操作不会读取消息内容:
imessage-forensics doctor --db ~/Library/Messages/chat.db
2. 检查身份标记:
imessage-forensics rollup \
--db ~/Library/Messages/chat.db \
--limit 100
3. 排除已知的归属者身份:
imessage-forensics non-owner-rollup \
--db ~/Library/Messages/chat.db \
--owner "+15555550111" \
--owner "owner@example.com"
4. 仅为明确审查过的身份生成清单:
imessage-forensics manifest \
--db ~/Library/Messages/chat.db \
--label reviewed-identity-cleanup \
--identity "+15555550123" \
--out-dir outputs
5. 演练(Dry-run)精确的摘要,并审查 `live_checks` 和 `delete_surface`:
imessage-forensics apply \
--summary outputs/reviewed-identity-cleanup_summary_YYYYMMDD-HHMMSS-ffffff.json
6. 只有在批准了该确切摘要后,才执行应用:
imessage-forensics apply \
--summary outputs/reviewed-identity-cleanup_summary_YYYYMMDD-HHMMSS-ffffff.json \
--backup-dir backups \
--apply
如果清单哈希值、稳定的行 GUID、行身份、候选数量、附件归属、数据库完整性或外键检查与审查时的状态不符,应用操作将会中止。如果任何数据库触发器尝试进行额外写入,它也会中止并回滚。
## 恢复
每次实时应用都会报告 `backup_path` 和 `backup_sha256`。在重新打开 Messages 之前,请妥善保存备份和应用结果的 JSON。
要执行恢复,请停止 Messages 和同步活动,保留当前的 `chat.db` 以及任何 `-wal` 和 `-shm` 文件,使用 SQLite 的 `PRAGMA integrity_check` 验证备份,并从报告的备份中恢复。不要在 Messages 运行时盲目覆盖实时数据库。如果自应用以来数据库已继续同步,恢复较早的完整数据库快照也可能导致无关的较新消息丢失;请首先评估此权衡的利弊。
## 范围与限制
- 候选选择被刻意缩小范围:
`message.destination_caller_id` 必须等于一个明确的身份。
- 会报告聊天级别的证据供人工审查,但不会静默将其提升为删除候选项。
- 物理媒体文件会被记录和检查,但绝不会删除。
- Apple 可能会更改私有的 Messages schema。在分析之前运行 `doctor`,如果 `schema_compatible` 为 false,请停止操作。
- 这是取证工具,而不是受支持的 Messages 管理 API。
## 开发
```
uv sync --extra dev
uv run --extra dev python -m unittest discover -s tests -v
uv run --extra dev python scripts/validate_skill.py
uv build
```
合成测试涵盖了成功清理、共享附件、清单篡改、实时候选项和附件漂移、缺少数据库路径、防冲突备份、相对输出路径、空白和缺失标识符、触发器限制、私有产物权限以及事务回滚等场景。
## 代理技能
该仓库在 `skills/imessage-forensics` 中包含一个配套技能。它依赖于已安装的 `imessage-forensics` 命令,并包含了代理应遵循的审查和批准序列。
标签:iMessage, Python, SQLite, 数字取证, 数据清理, 无后门, 自动化脚本, 逆向工具