Extension xem lại tin nhắn bị gỡ trên Facebook – Sau vài đường quyền check google (gần chục tiếng), cuối cùng mình đã hiểu phần nào cách hoạt động của chức năng xem tin nhắn đã gỡ trên facebook rồi. Mà cái gì hay với lạ thì lạ muốn chia sẻ với mọi người.


Source code của extension KB2A Tool thì chắc chắn là mấy bạn dev trong team đó đã nén hết rồi, nên việc tìm hiểu code mới mất nhiều thời gian như vậy. Dưới đây mình sẽ nói tổng quan về cách hoạt động của extension và cách tìm hiểu, cách làm từng bước nhé.
P/s: Bài viết này mình viết dựa trên tinh thần chia sẻ kiến thức, chứ mình không quảng cáo hay chê bai gì extension KB2ATool nha. Nếu thích mọi người có thể tải về xài ủng hộ mấy bạn ấy nha, tool đó có nhiều chức năng lắm không chỉ mỗi xem tin nhắn đã gỡ đâu, và cũng có giao diện đẹp nữa.
Extension xem lại tin nhắn bị gỡ trên Facebook
1. LƯU HẾT TIN NHẮN
Mình sẽ tạo 1 script, chèn script nó vào trang facebook, script sẽ lắng nghe mọi sự kiện gừi/nhận tin nhắn, và lưu lại nội dung tin nhắn kèm theo id của tin nhắn đó.
2. KIỂM TRA TIN NHẮN CŨ
Kèm theo đó, mỗi khi có sự kiện tin nhắn mới, mình sẽ kiểm tra xem trong danh sách đã lưu có thằng nào giống id với sự kiện mới này không.
Nếu có thì (rất có thể) đây là sự kiện thu hồi tin nhắn.
=> XUẤT RA TIN NHẮN ĐƯỢC THU HỒI
Để hiểu chi tiết cách làm, mọi người đọc tiếp nhé
Cách hoạt động của tin nhắn trong facebook:
Để có thể gửi nhận tin nhắn trong thời gian thực, FB không dùng những loại request GET PUT bình thường như fetch, ajax, axios, … Mà nó dùng 1 cấu trúc khác, đó là (https://topdev.vn/blog/socket-la-gi-websocket-la-gi/), cung cấp khả năng giao tiếp thời gian thực giữa client và server, và có thể là giữa các client với nhau nữa..
Nếu mọi người vào devtool của trình duyệt, vào tab Network và lọc request theo WS (websocket) thì sẽ thấy được những kết nối websocket được dùng bởi FB.
FB có nhiều kết nối websocket, trong đó thằng dành cho tin nhắn có tên mở đầu là chat?region=….. Bấm vào ta sẽ thấy được mọi luồng dữ liệu tới và đi trong kết nối websocket ấy.
Phân tích dữ liệu tin nhắn
Có rất nhiều luồng dữ liệu tới và đi trong websocket chat này, nếu chúng ta thử gửi 1 tin cho người khác, nó sẽ tạo 1 luồng gửi đi, còn người khác gửi cho mình, sẽ có 1 luồng gửi về.
Dữ liệu trong mỗi luồng mặc định hiển thị dưới dạng base64, chúng là có thể chuyển về utf8 để dễ đọc hơn (thấy nó giống chuỗi json hơn thôi chứ vẫn khó đọc lắm ).
Nếu tìm kỹ chúng ta sẽ thấy được nội dung tin nhắn, và thật may là không bị mã hóa gì khác nữa cả . OKE tiếp theo để cho tiện thì ta tạo 1 regex giúp ta lấy được đoạn tin nhắn đó ra khỏi chuỗi dữ liệu, mình dùng web regexr.com để tạo regex cho lẹ.
**~ 2 thousand years later ….**
Phải đi học lại khóa regex mới được
**YAY** đã lấy được nội dung tin nhắn ra khỏi luồng dữ liệu rồi. Giờ để mọi thứ được tự động, hãy tạo extension.
Tạo extension
Mình tìm hiểu cách làm extension ở https://topdev.vn/blog/cach-build-chrome-extension/ kết hợp với ngẫm code của KB2A Tool.
Vấn đề chính bây giờ đó là làm sao để có thể lắng nghe websocket của fb. Mỗi biến websocket được tạo ra sẽ là 1 biến local riêng biệt, không phải biến toàn cục, không thể truy cập được từ bên ngoài.
Sau khi tu luyện bằng source code KB2A Tool, thì mình đã tìm ra chân lý. Mấy bạn ấy tạo 1 đoạn script, và cho nó chạy trước khi trang fb chạy (run at document_start). Đoạn script này sẽ tạo ra 1 biến window.WebSocket **GIẢ**, trong đó chèn code lắng nghe sự kiện.
Khi trang facebook bắt đầu chạy, nó sẽ dùng thằng **GIẢ** này để tạo biến websocket local cho riêng nó để dùng. Nhưng do đã bị **LÀM GIẢ** từ trước, nên trong biến local đó đã có sẵn code lắng nghe sự kiện của ta. BÙMMM
Vậy là mọi ý tưởng đã hoàn thành. Mình đã thực hiện và chia sẻ source code với mọi người tại github https://github.com/HoangTran0410/RevealDeletedFBMessages
Nếu thấy hay thì mọi người hãy star/folk project để nhận được thông báo cập nhật mới nhất nhé.
Hoang Tran
Đánh giá bài viết
[Total: 2 Average: 5]