SecurityRonin/whatsapp-desktop-forensic

GitHub: SecurityRonin/whatsapp-desktop-forensic

用于解析 WhatsApp 桌面客户端 IndexedDB 存储的 Rust 取证库,可恢复聊天记录、联系人和已删除消息,且对加密消息体如实报告而不伪造明文。

Stars: 0 | Forks: 0

# whatsapp-desktop-forensic [![Crates.io core](https://img.shields.io/crates/v/whatsapp-desktop-core.svg?label=whatsapp-desktop-core)](https://crates.io/crates/whatsapp-desktop-core) [![Crates.io forensic](https://img.shields.io/crates/v/whatsapp-desktop-forensic.svg?label=whatsapp-desktop-forensic)](https://crates.io/crates/whatsapp-desktop-forensic) [![Docs.rs](https://img.shields.io/docsrs/whatsapp-desktop-core?label=docs.rs)](https://docs.rs/whatsapp-desktop-core) [![Rust 1.88+](https://img.shields.io/badge/rust-1.88%2B-blue.svg)](https://www.rust-lang.org) [![License: Apache-2.0](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](LICENSE) [![Sponsor](https://img.shields.io/badge/sponsor-h4x0r-ea4aaa.svg)](https://github.com/sponsors/h4x0r) [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/SecurityRonin/whatsapp-desktop-forensic/actions/workflows/ci.yml) [![unsafe forbidden](https://img.shields.io/badge/unsafe-forbidden-success.svg)](https://github.com/rust-secure-code/safety-dance/) [![fuzzed](https://img.shields.io/badge/fuzzed-cargo--fuzz-success.svg)](fuzz/) [![Security advisories clean](https://img.shields.io/badge/advisories-clean-success.svg)](deny.toml) **读取 WhatsApp Desktop (Electron) 在 Chromium IndexedDB 存储中的聊天记录 — 包括带有类型的消息、聊天、联系人、媒体和时间线 — 并展示加密的消息体, 绝不伪造。** WhatsApp 的 Electron/PWA 桌面客户端将其聊天数据保存在 Chromium 的基于 LevelDB 的 IndexedDB 数据库(`model-storage`)中,其值是 Blink/V8 的 structured-clone blob。这个 crate 将该存储解析为带类型的取证记录,并对其进行审计。 ## 核心摘要 ``` use whatsapp_desktop_forensic::audit_path; // Point at the app's `…model-storage` IndexedDB LevelDB directory. let findings = audit_path("Default/IndexedDB/…indexeddb.leveldb".as_ref())?; for f in &findings { println!("[{:?}] {} — {}", f.severity, f.code, f.note); } // [Some(Medium)] WA-MSG-DELETED-RECOVERED — Deleted message … recovered from a tombstone … // [Some(Info)] WA-MSG-ENCRYPTED-BODY — Message … has an AES-CBC-encrypted body … # Ok::<(), whatsapp_desktop_forensic::WaError>(()) ``` 只需要记录,不需要分析结果?使用 reader: ``` use whatsapp_desktop_core::open; let store = open("…indexeddb.leveldb".as_ref())?; println!("{} messages, {} chats, {} contacts", store.messages.len(), store.chats.len(), store.contacts.len()); for e in &store.timeline { println!("{} {} {}", e.rfc3339, if e.deleted { "[deleted]" } else { "" }, e.message_id); } # Ok::<(), whatsapp_desktop_core::WaError>(()) ``` ## 两个 crate | Crate | 角色 | |---|---| | `whatsapp-desktop-core` | **Reader** — 带类型的 `Message`/`Chat`/`Contact`/`MediaMeta` + 时间线,以及经过审计的 AES-CBC 消息体解密原语。不产生分析结果。 | | `whatsapp-desktop-forensic` | **Analyzer** — 通过 `impl Observation` 生成标准化的 `forensicnomicon::report::Finding`。 | 它建立在fleet的 Chromium 存储 reader(`chromium-storage-indexeddb` → `blob-decoder`)之上,并复用了 forensicnomicon 的 IndexedDB key-coding;它绝不会 重新实现 LevelDB 或 V8 解码。 ## 它所展示的内容 | 代码 | 严重程度 | 含义 | |---|---|---| | `WA-MSG-DELETED-RECOVERED` | 中 | 从 LevelDB 墓碑记录中恢复的已删除消息(符合 `T1070`)。 | | `WA-MSG-ENCRYPTED-BODY` | 信息 | 消息体经过 AES-CBC 加密(`msgRowOpaqueData`);明文需要派生密钥。 | | `WA-MSG-MEDIA-REF` | 信息 | 引用非本地存储(CDN)blob 的媒体消息。 | ## 消息体是加密的 —— 且绝不伪造 WhatsApp Web 使用 AES-CBC 将文本消息体加密到 `msgRowOpaqueData:{_keyId, iv, _data}` 中。此 crate 原封不动地将该加密信封报告为 `MessageBody::Encrypted{ key_id, iv, ciphertext }`。`decrypt_body`(经过审计的 RustCrypto AES-CBC)**仅当您提供派生密钥时**才会对其解密;错误或缺失的密钥会返回带类型的 `Wa Error`,它绝不会凭空捏造明文。派生密钥本身超出了本文档的范围 —— 请参阅 [`docs/validation.md`](docs/validation.md)。 ## 信任,但要验证 - **模糊测试** — 本地对 `cargo-fuzz` 的 `parse_store`(64.6万次执行)和 `decrypt_body`(177万次执行)进行了测试,零崩溃;每周在 CI 中运行。 - **通过 lint 确保不发生 panic** — `#![forbid(unsafe_code)]`,生产代码中拒绝使用 `unwrap_used`/`expect_used`;对已解码的 V8 图进行全量访问器检查。 - **根据真实的 Chromium 输出进行验证** — 在真实的铸造 `model-storage` 存储上进行提取(tier-2),基于独立的 openssl KAT 向量进行 AES-CBC 解密(tier-1),针对 Python `datetime` 进行的 epoch 到 RFC 3339 的转换(tier-1)。 完整的证据及诚实的边界(目前还没有真实的消息语料库)详见 [`docs/validation.md`](docs/validation.md)。 [隐私政策](https://securityronin.github.io/whatsapp-desktop-forensic/privacy/) · [服务条款](https://securityronin.github.io/whatsapp-desktop-forensic/terms/) · © 2026 Security Ronin Ltd
标签:HTTP工具, IndexedDB, LevelDB, Rust, WhatsApp, 可视化界面, 数字取证, 数据解析, 网络流量审计, 自动化脚本, 通知系统