SecurityRonin/chat4n6
GitHub: SecurityRonin/chat4n6
一款专为 Android WhatsApp 设计的深度取证工具,通过八层恢复技术从 SQLite 各级残留中提取商业工具遗漏的已删除消息。
Stars: 1 | Forks: 0
# chat4n6
当嫌疑人删除一条 WhatsApp 消息时,数据很少会彻底消失。它会残留在 SQLite 自由列表、预写日志、回滚日志、应用内搜索索引、页内间隙以及未分配的磁盘空间中——如果你知道去哪里找,这些数据通常是完整且可恢复的。
`chat4n6` 是一款免费、开源的取证工具,能够从 Android 文件系统镜像中系统地恢复这些证据。它深入每个 WhatsApp 数据库的**八个层级**,用证据来源和置信度评分标记每条恢复的记录,并通过单个命令生成法庭可用的 HTML 报告。
**无需 SQLite C 库。无需 Python。无运行时依赖。单个二进制文件。**
## 适用人群
### 事件响应团队
你正处于内部威胁调查的头 72 小时内。一个设备镜像摆在了你的桌上。你需要快速获取聊天记录,以便在证据消失前了解范围并识别其他受损方。
```
chat4n6 run --input ./acquired-image/ --output ./triage-report --no-unalloc
```
第 1-7 层可在几秒钟内完成。打开 `triage-report/index.html`,你就能看到实时消息、从 WAL/自由列表/日志/FTS 恢复的已删除消息,且所有消息都标记了证据来源。第 8 层(未分配空间挖掘)是可选的,以耗时为代价换取彻底性。
### 数字取证从业者
你需要超越商业工具深度的、经得起推敲且可复现的证据恢复。`chat4n6` 提供:
- **八个恢复层级**,具有完整溯源——每条记录都标记为 `[LIVE]`、`[WAL-PENDING]`、`[FREELIST]`、`[FTS-ONLY]`、`[CARVED-UNALLOC 94%]` 等。
- **置信度评分**——针对挖掘记录,基于与实时记录的 Schema 签名频率分析得出。
- **SHA-256 去重**——跨所有层级,无重复计数,无虚高统计。
- **验证命令**——对于每条挖掘发现,报告包含 `sqlite3` 和 `xxd` Shell 命令,以便在报告的偏移量处独立验证原始十六进制数据。
- **WAL 增量分析**——WAL 与主数据库状态之间的行级比较(Added / Deleted / Modified)。
### 律师事务所与清算人
你不需要成为取证检查员。你需要快速了解现存证据,以便就资源分配、法律策略以及是否聘请专家做出明智决策。
`chat4n6` 为你提供证据全景的初筛视图:
- **有多少条消息?** 实时计数与已删除计数对比,按聊天细分。
- **删除了什么?** 恢复的消息与实时消息并排显示,清晰标记。
- **可能还有多少?** 带有置信度评分的挖掘记录告诉你,更深入的分析是否可能产生额外证据。
- **规模与严重性**——HTML 报告是自包含的,可在任何浏览器中阅读,并可立即与法律顾问共享。
**重要提示:** 挖掘和恢复的记录带有固有的不确定性。误报和漏报皆有可能。初筛报告可帮助你评估案件是否需要全面的取证分析——它不能替代在诉讼中出示证据时的专家鉴定。
## 恢复深度
大多数取证工具只读取 SQLite 公开提供的数据。`chat4n6` 实施了八个恢复层级,借鉴了经同行评审的技术(bring2lite、FQLite、Sanderson 等人):
| 层级 | 来源 | 发现内容 | 商业工具支持情况 |
|-------|--------|---------------|-----------------|
| 1 | Live B-tree | 活动消息、通话、联系人 | 所有工具 |
| 2 | WAL replay | 未提交事务、待写入 | 部分工具 |
| 3 | WAL delta | 行级 Added/Deleted/Modified 分析 | 极少 |
| 4 | Freelist | 可重用页面上的已删除行 | 极少 |
| 5 | FTS index | 被搜索后删除的消息 | 几乎没有 |
| 6 | Intra-page gaps | 页面内未分配空间中的记录 | 几乎没有 |
| 7 | Rollback journal | 修改前的页面快照 | 几乎没有 |
| 8 | Unallocated carving | 带置信度评分的 Schema 感知启发式挖掘 | 有时(无评分) |
每条记录都带有证据来源标签。挖掘记录包含置信度百分比:一条 94% 的记录意味着它与该表中 94% 的实时记录的序列类型模式相匹配。
## 快速开始
```
# 安装(需要 Rust 1.75+)
cargo install chat4n6
# 对提取的 Android 文件系统运行完整分析
chat4n6 run --input /path/to/android/root --output ./report
# 带时区和案件元数据
chat4n6 run \
--input /path/to/android/root \
--output ./case-2026-001 \
--case-name "Case 2026-001" \
--timezone "Asia/Manila"
# 快速甄别 — 跳过未分配空间雕刻(仅限 1-7 层)
chat4n6 run --input ./image/ --output ./triage --no-unalloc
# 来自 Passware Kit Mobile 的 DAR 归档
chat4n6 run --input ./userdata.1.dar --output ./report
# iOS 备份(iTunes 风格,带 Manifest.db)
chat4n6 run --input ./ios-backup-dir/ --output ./report
# 加密的 WhatsApp 数据库
chat4n6 run --input ./image/ --output ./report --key-file ./key
```
## 输入格式
`chat4n6` 自动检测输入格式:
| 格式 | 来源 | 获取方式 |
|--------|--------|----------------|
| **Plaintext directory** | 提取的 Android 文件系统树 | 任何保留目录结构的提取工具 |
| **DAR archive** (`.dar`) | Passware Kit Mobile,其他取证工具 | 直接从取证软件获取 |
| **iOS backup** | 带有 `Manifest.db` 的 iTunes 风格备份 | `libimobiledevice`、iTunes、Finder 备份 |
WhatsApp 数据库预期位于:
```
/data/data/com.whatsapp/databases/
```
如果 WhatsApp 数据库已加密(`.crypt14`、`.crypt15`),请提供设备上 `/data/data/com.whatsapp/files/key` 的密钥文件。
## 输出
```
report/
├── index.html ← Case dashboard: chat list, counts, evidence summary
├── chat__.html ← Paginated conversations (500 messages/page)
├── calls.html ← Full call log (audio + video)
├── deleted.html ← All non-LIVE records across every chat
├── gallery.html ← Media references and thumbnails
├── carve-results.json ← Machine-readable output for scripting / ingestion
└── manifest.json ← Report metadata and generation parameters
```
报告为静态 HTML——无 JavaScript 依赖,无外部资源。可离线打开、归档、打印或附在法律文件中。
## 证据标签
每条消息和通话记录都带有溯源标签:
| 标签 | 层级 | 含义 |
|-----|-------|---------|
| `[LIVE]` | 1 | 存在于活动 B-tree 中 |
| `[WAL-PENDING]` | 2 | 在 WAL 中,尚未检查点写入主数据库 |
| `[WAL-DELETED]` | 3 | 存在于主数据库但被 WAL 事务移除 |
| `[WAL-HISTORIC]` | 3 | 在 WAL 中但已被后续帧取代 |
| `[FREELIST]` | 4 | 在自由列表页面上——已删除但空间尚未被重用 |
| `[FTS-ONLY]` | 5 | 在 WhatsApp 的搜索索引中,但消息表中不存在 |
| `[CARVED-INTRA-PAGE 87%]` | 6 | 在页内间隙中发现,置信度为 87% |
| `[JOURNAL]` | 7 | 从回滚日志的修改前快照中恢复 |
| `[CARVED-UNALLOC 94%]` | 8 | 从未分配空间挖掘,置信度为 94% |
| `[CARVED-DB]` | 8 | 来自从未分配空间重建的数据库 |
## 局限性
- **Android 为主。** iOS 备份支持已可用,但不如 Android 成熟。
- **仅限 WhatsApp。** Signal 和 Telegram 插件已搭建框架,但尚未实现。
- **加密数据库**需要原始密钥文件。`chat4n6` 不执行密钥恢复。
- **恢复取决于时机。** 在获取前已被覆盖的记录无法被任何工具恢复。
- **挖掘记录是概率性的。** 置信度分数反映 Schema 模式匹配质量,而非语义正确性。误报是可能的,尤其是在低于 80% 置信度时。初筛发现应在作为证据出示前由合格检查员进行验证。
## 从源码构建
```
git clone https://github.com/SecurityRonin/chat4n6.git
cd chat4n6
cargo build --release
./target/release/chat4n6 --help
```
无系统依赖。纯 Rust——无 SQLite C 库,无 Python,无 JVM。
需要 Rust 1.75 或更高版本。
适用于 Windows 的**预构建二进制文件**可从 [GitHub Actions artifacts](https://github.com/SecurityRonin/chat4n6/actions)(最新的 `build-windows` 运行)获取。
## 测试覆盖率
工作区共有 573 个测试。SQLite 取证引擎(`chat4n6-sqlite-forensics`)在 22 个源模块中拥有 98.77% 的行覆盖率和 99.51% 的函数覆盖率。其余未覆盖行经证明为不可达的防御性保护代码。
```
cargo test # Run all tests
cargo llvm-cov test # Run with coverage report (requires cargo-llvm-cov)
```
## 贡献
欢迎提交 Issue 和 Pull Request。请参阅 `docs/` 以了解设计规范和实施计划。
## 许可证
MIT——请参阅 [LICENSE](LICENSE)。
标签:Golang, Incident Response, SQLite Forensics, SQLite恢复, WAL日志分析, WhatsApp取证, 反取证对抗, 可视化界面, 司法鉴定, 域渗透, 安全编程, 安卓取证, 库, 应急响应, 开源取证工具, 数字取证, 数据恢复, 数据雕刻, 无依赖工具, 电子数据取证, 痕迹提取, 目录枚举, 移动安全, 聊天记录恢复, 自动化脚本, 通知系统