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, 数字取证, 数据清理, 无后门, 自动化脚本, 逆向工具