quyanhfex/messenger-recall-tool

GitHub: quyanhfex/messenger-recall-tool

一款面向 Facebook Messenger 的 Chrome 扩展,通过内部 bridge API 实现历史消息加载、全文检索、加密媒体解密、统计分析与批量撤回等功能。

Stars: 0 | Forks: 0

# 💬 Messenger 撤回工具

Panel UI

## 🎥 演示 | 桌面端 | 移动端 | |---|---| | [▶ demopc.mp4](media/demopc.mp4) | [▶ demomobile.mp4](media/demomobile.mp4) | ## ⚠️ 免责声明 本项目为**独立研究**。它与 Meta Platforms, Inc.、Facebook、WhatsApp 或任何相关实体**没有关联、认可或赞助**。 - 请**自行承担风险**,且仅在您自己的账号上使用。 - 使用此工具可能违反 Facebook 的[服务条款](https://www.facebook.com/legal/terms)。您需对任何后果(速率限制、账号标记、封号)自行负责。 - 按**原样**提供,**无任何保证**。详见[许可证](LICENSE)。 - 作者不赞成使用此工具来骚扰、跟踪、欺骗或伤害任何人。**请勿作恶。** 如果您是 Meta 的员工并希望下架此项目,请先开启一个 issue —— 我们很乐意进行讨论。 ## ✨ 功能介绍 | 功能 | 描述 | |---|---| | 📥 **加载超出缓存的历史记录** | Messenger 本地仅保留约 100 条近期消息。此工具通过分页请求内部 bridge API,将数月/数年的历史记录加载到内存中。 | | 🔍 **搜索与过滤** | 对所有已加载的消息进行全文搜索。支持按日期范围、发送者、状态(已撤回、系统消息)、关键词进行过滤。 | | 🖼️ **图片预览与下载** | 检测嵌入的 JPEG/PNG 图片和 CDN 加密图片(`.enc`)。使用消息的 mediaKey 通过 HKDF-SHA256 + AES-256-CBC 解密 CDN 图片。 | | 📞 **通话事件检测** | 解析内联通话 protobuf —— 显示 `[cuộc gọi nhỡ 0:03]`、`[video call 1:23]` 等,包含类型和持续时间。 | | 📄 **导出为 PDF** | 将选定的消息渲染为 Messenger 风格的聊天页面(气泡、头像、日期分隔线),并在新标签页中打开 → 打印 → 另存为 PDF。 | | 📋 **导出为 JSON** | 结构化导出包含参与者、姓名、时间戳、消息类型的数据,便于后续处理。 | | 📊 **统计仪表板** | 消息总数、你与对方的百分比、按小时统计图表、按月统计图表、媒体数量、总通话时长。 | | 🗑️ **批量撤回** | 选择消息(或按住 Shift 点击选择范围) → 通过 E2EE 协议撤回。请求之间设置随机延迟(防速率限制)。 | | 💾 **持久化扩展数据** | 获取的额外数据会按线程保存到 `chrome.storage.local`(TTL 为 7 天)。 | ## 🚀 安装说明 1. `git clone https://github.com/quyanhfex/messenger-recall-tool.git` 2. 打开 `chrome://extensions/` → 启用右上角的 **开发者模式** 3. 点击 **加载已解压的扩展程序** → 选择克隆下来的文件夹 4. 固定该扩展;打开 Messenger;点击扩展图标以打开侧边面板 ## 🔧 工作原理(概述) ``` ┌─────────────────────────────────────────────────────────────┐ │ Chrome Side Panel ← RPC → Content Script ← RPC → │ │ (panel.html/js) (content_script.js) │ │ ↓ window.postMessage │ │ ↓ │ │ MAIN world injector (injector.js) │ │ ↓ │ │ window.require('MAWBridgeSendAndReceive') │ │ ↓ │ │ MAW Worker → Facebook backend → E2EE peers │ └─────────────────────────────────────────────────────────────┘ ``` - **Walker** 在没有 `.proto` 架构的情况下,解析来自每个 `mpsLoadMessages` 响应的顶层 protobuf 负载 —— 通过查看 wire-format 标签并启发式解码 UTF-8 叶子节点。 - **CDN 图片解密** 遵循 WhatsApp 的媒体密钥派生方式(`HKDF salt=zeros, info="WhatsApp Image Keys"`) → AES-256-CBC。 - **批量撤回** 直接调用 `MAWBridgeSendAndReceive.sendAndReceive('backend', 'sendRevokeMsg', { msgId: { author: '@me', chat, externalId }, ... })`,绕过了 React UI。 详细的说明请参见 [`injector.js`](messenger-recall/injector.js) 中的内联注释。 ## ⚖️ 许可证 [MIT](LICENSE) —— 随意使用,但上述免责声明依然有效。 ## 🙏 鸣谢 灵感来源于 [shoot-the-messenger](https://github.com/theahura/shoot-the-messenger)(基于 DOM 的方式)。本项目探索的是 bridge API 路由。 ## ❓ 常见问题 **问:我的账号会被封吗?** 答:我不知道。我没有被封号,但这仅仅是个例。请谨慎降低批量撤回的延迟时间。 **问:为什么有些消息显示 `[không decode được]`?** 答:可能是因为遇到了尚未处理的附件类型(贴纸、位置分享、回复引用等)。欢迎提交 PR。 **问:可以撤回未接来电 / 通话事件的消息吗?** 答:不可以。Facebook 会在服务器端静默拒绝撤回通话事件 —— 这已经过实际验证。本地数据库会将它们标记为 `isUnsent: true`,但对方永远不会收到该撤回指令。 **问:为什么界面中有那么多越南语?** 答:最初是为个人使用而构建的。欢迎提交 PR 以添加 i18n 支持。
标签:AES-256-CBC, CDN解密, DNS解析, Facebook, HKDF, JSON导出, Messenger, PDF导出, Protobuf, SHA256, URL抓取, 个人数据管理, 全文本检索, 内部API调用, 前端工具, 即时通讯, 历史记录, 图片解密, 开源项目, 搜索与过滤, 数据可视化, 数据导出, 数据抓取, 浏览器插件, 消息归档, 独立研究, 社交媒体监控, 聊天记录, 聊天记录取证, 自定义脚本, 解密算法, 通话记录