Chrome extension (side panel) to read, search, export and bulk-recall Facebook Messenger E2EE messages — including history beyond the 100-message client cache.
For your own account only. Personal research purposes.
Demo
| Desktop | Mobile |
|---|---|
| demopc.mp4 | demomobile.mp4 |
Disclaimer
Independent project, not affiliated with Meta / Facebook.
- Use on your own account. You are solely responsible for any consequences (rate limits, account flags, suspension).
- Do not use to harass, stalk, or harm anyone.
- Provided AS-IS. See LICENSE.
Features
| Tab | Description |
|---|---|
| Load | Paginates mpsLoadMessages bridge API to fetch history beyond the 100-message cache. Configurable start date, batch size, and delay. |
| View | Full-text search, filter by date / sender / status (unsent, system messages). Shift-click range selection. |
| Recall | Bulk-recall selected messages via E2EE protocol. Random delay between requests to avoid rate-limiting. |
| Export | Export as PDF (chat-style with avatars and images) or raw JSON. Statistics by hour, month, sender, call duration. |
| Chat | Send messages directly from the side panel via bridge API. |
| AI | Auto-reply: uses an OpenAI-compatible API to automatically reply to incoming messages. Configurable system prompt, model, delay, context size. |
Additional:
- Inline image viewer and download (JPEG/PNG/GIF/WebP) + CDN
.encimage decryption (HKDF-SHA256 + AES-256-CBC) - Call event detection from protobuf payload:
[missed call 0:03],[video call 1:23] - Per-thread extras cached in
chrome.storage.local(7-day TTL)
Install
git clone https://github.com/quyanhfex/messenger-recall-tool.git- Open
chrome://extensions/→ enable Developer mode (top right) - Load unpacked → select the cloned folder
- Pin the extension → open Messenger → click the icon to open the side panel
Not available on the Chrome Web Store.
How it works
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
hook_injector.jsruns atdocument_startto install a fake__REACT_DEVTOOLS_GLOBAL_HOOK__, capturing React Fiber roots before React initializes.injector.jswalks the Fiber tree to get the LSDatabase store; parses protobuf payloads without a.protoschema — decodes UTF-8 leaves heuristically.- CDN image decryption uses WhatsApp media-key derivation:
HKDF(salt=zeros, info="WhatsApp Image Keys")→ AES-256-CBC. - Bulk recall calls
sendRevokeMsgdirectly via the bridge, bypassing the React UI.
FAQ
Q: Will my account get banned? Haven't been banned, but sample size is 1. Set a higher recall delay to be safe.
Q: Why do some messages show [không decode được]?
Attachment type not yet handled (stickers, location, reply quotes...). PRs welcome.
Q: Can it recall call event messages?
No. Facebook silently rejects revoke for call events server-side — the local DB marks them isUnsent: true but the peer never receives the revoke.
Messenger Recall Tool (Tiếng Việt)
Chrome extension (side panel) để đọc, tìm kiếm, xuất và thu hồi hàng loạt tin nhắn Messenger E2EE — kể cả tin vượt giới hạn 100 tin của cache client.
Chỉ dùng cho tài khoản của chính bạn. Mục đích nghiên cứu cá nhân.
Disclaimer
Dự án độc lập, không liên kết với Meta / Facebook.
- Dùng trên tài khoản của bạn, tự chịu trách nhiệm nếu bị rate-limit hoặc khóa tài khoản.
- Không dùng để quấy rối, theo dõi, hay gây hại người khác.
- Provided AS-IS. See LICENSE.
Tính năng
| Tab | Mô tả |
|---|---|
| Tải | Phân trang qua bridge API (mpsLoadMessages) để tải lịch sử vượt cache 100 tin. Cấu hình ngày bắt đầu, kích thước batch, delay giữa các lượt. |
| Xem | Full-text search, lọc theo ngày / người gửi / trạng thái (đã thu hồi, tin hệ thống). Shift-click để chọn nhiều tin. |
| Thu hồi | Thu hồi hàng loạt tin đã chọn qua E2EE protocol. Delay ngẫu nhiên giữa các lần để tránh rate-limit. |
| Xuất | Xuất PDF (dạng chat có avatar, ảnh) hoặc JSON thô. Xem thống kê theo giờ, tháng, người gửi, thời lượng gọi. |
| Chat | Gửi tin nhắn trực tiếp từ side panel qua bridge API. |
| AI | Auto-reply: dùng AI (OpenAI-compatible API) tự động trả lời tin nhắn đến. Cấu hình system prompt, model, delay, context size. |
Tính năng thêm:
- Xem và tải ảnh inline (JPEG/PNG/GIF/WebP) + decrypt ảnh CDN
.enc(HKDF-SHA256 + AES-256-CBC) - Nhận diện cuộc gọi từ protobuf payload:
[cuộc g���i nhỡ 0:03],[video call 1:23] - Cache extras per-thread vào
chrome.storage.local(TTL 7 ngày)
Cài đặt
git clone https://github.com/quyanhfex/messenger-recall-tool.git- Mở
chrome://extensions/→ bật Developer mode (góc trên phải) - Load unpacked → chọn thư mục vừa clone
- Pin extension → mở Messenger → click icon để mở side panel
Không có trên Chrome Web Store.
Cách hoạt động
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
hook_injector.jschạy ởdocument_startđể cài fake__REACT_DEVTOOLS_GLOBAL_HOOK__, bắt React Fiber roots trước khi React khởi động.injector.jswalk Fiber tree để lấy LSDatabase store; parse protobuf payload không cần.protoschema — decode UTF-8 leaves heuristically.- CDN image decryption dùng WhatsApp media-key derivation:
HKDF(salt=zeros, info="WhatsApp Image Keys")→ AES-256-CBC. - Bulk recall gọi th���ng
sendRevokeMsgqua bridge, không qua React UI.
FAQ
Q: Có bị ban không? Chưa bị, nhưng sample size là 1. Đặt delay thu hồi cao một chút cho an toàn.
Q: Một số tin hiện [không decode được] là sao?
Attachment chưa được xử lý (sticker, location, reply quote...). PR welcome.
Q: Thu hồi được tin nhắn cuộc gọi không?
Không. Facebook từ chối revoke call events phía server — local DB sẽ mark isUnsent: true nhưng phía kia không nhận được revoke.
Comments