Litmatch · Đu Quay

Hướng dẫn lấy session & API game Đu quay

Tài liệu nội bộ: cách lấy sid (session) của app Litmatch từ máy ảo Android và từ iPhone, kèm danh sách API của game Đu quay đã nghiên cứu được. Dùng cho mục đích tìm hiểu cơ chế và thu thập dữ liệu trên tài khoản của chính mình.

1. Lấy session bằng tool ANDROID / LDPLAYER

Không cần mitmproxy, không cần mở game. Script get_session.py đọc thẳng dữ liệu app trong máy ảo đã root qua adb, rồi gọi 1 request thật để xác minh sid còn sống.

Yêu cầu

Các bước

  1. Kết nối adb tới máy ảo.

    adb server đôi khi bật trước khi máy ảo boot xong nên không tự thấy device. Chạy lệnh connect (cổng mặc định của LDPlayer là 5555):

    "C:\LDPlayer\LDPlayer9\adb.exe" connect 127.0.0.1:5555
    "C:\LDPlayer\LDPlayer9\adb.exe" devices

    Thấy một dòng kết thúc bằng device là được. Nếu là offline hoặc trống, khởi động lại máy ảo rồi connect lại.

  2. Chạy script lấy session.

    Trong thư mục dự án:

    python get_session.py

    Script sẽ: đọc sid + uuid + thông tin thiết bị → thử sid từ mới đến cũ, gọi API get_round_info để kiểm tra → ghi session.json.

  3. Đọc kết quả.

    Output mẫu:

    device : 127.0.0.1:5555
    package: com.litatom.app
    sid    : session.v2.XXXXXXXXXX
    uuid   : XXXXXXXXXXXXXXXX
    thiết bị: GFE4J / Android SDK 28 / app 7.75.2
    vòng hiện tại: 1353
    → đã ghi session.json

    Dòng “vòng hiện tại” chứng tỏ sid hợp lệ. File session.json được các script khác (collect_history.py, daily_worker.py) tự đọc.

Các cờ hữu ích

CờTác dụng
--printChỉ in ra màn hình, không ghi file.
--no-verifyBỏ qua bước gọi API kiểm tra (ghi luôn sid mới nhất).
--device <serial>Chỉ định device khi có nhiều máy ảo.
--package <pkg>Ép package (mặc định thử com.litatom.lite rồi com.litatom.app).
--adb <path>Đường dẫn adb thủ công (hoặc đặt biến môi trường LD_ADB).
--out <file>Đổi file output (mặc định session.json).

Xử lý lỗi thường gặp

“Không thấy device nào” adb chưa kết nối. Chạy lại lệnh ở bước 1: adb connect 127.0.0.1:5555.
sid hết hạn / “login time out” (result -10) Mở lại game Đu quay trong máy ảo để app nạp session mới, rồi chạy lại script.
Server rate-limit (result -22) Gọi dồn quá nhanh. Chờ ~30s chạy lại, hoặc dùng --no-verify để ghi file mà không kiểm tra.

2. Lấy session trên iPhone MITMPROXY

iOS không cho đọc thẳng dữ liệu app nếu không jailbreak. Cách khả thi nhất là bắt traffic: dựng mitmproxy trên PC làm proxy, iPhone đi qua proxy đó, rồi đọc sid trong query của request game. Game Đu quay chạy trong WebView nên không có SSL pinning → bắt sạch.

Cần chuẩn bị PC và iPhone cùng một mạng Wi-Fi (không dùng mạng khách/guest). PC đã cài mitmproxy (pip install mitmproxy). Biết IP LAN của PC — ví dụ tài liệu này dùng 192.168.1.16, bạn thay bằng IP máy mình (ipconfig → dòng IPv4).
  1. Mở cổng 8080 trên tường lửa Windows (làm 1 lần).

    Mở PowerShell bằng Run as Administrator:

    New-NetFirewallRule -DisplayName "mitmproxy 8080" -Direction Inbound `
      -Protocol TCP -LocalPort 8080 -Action Allow -RemoteAddress LocalSubnet

    LocalSubnet chỉ cho phép máy trong mạng nhà kết nối, an toàn hơn mở toàn bộ.

  2. Chạy mitmweb trên PC.

    Mở terminal (thư mục nào cũng được) và chạy:

    mitmweb --listen-host 0.0.0.0 -p 8080

    Trình duyệt tự mở giao diện tại http://127.0.0.1:8081. Để nguyên terminal này chạy, đừng tắt. --listen-host 0.0.0.0 để iPhone ngoài máy kết nối vào được.

  3. Trỏ proxy trên iPhone.

    Cài đặt → Wi-Fi → bấm (i) cạnh mạng đang dùng → kéo xuống Định cấu hình proxy → Thủ công:

    • Máy chủ: 192.168.1.16 (IP PC của bạn)
    • Cổng: 8080
    • Xác thực: tắt → Lưu
  4. Cài chứng chỉ CA của mitmproxy.

    Mở Safari (bắt buộc Safari), vào http://mitm.it.

    • Thấy trang có nút tải cho iOS → proxy đã chạy đúng. Nếu báo “traffic is not passing through mitmproxy” → xem lại bước 1 và 3.
    • Bấm iOS → Get mitmproxy-ca-cert.pem → Cho phép.
    • Cài đặt → dòng “Đã tải về hồ sơ” trên cùng → Cài đặt → nhập mật mã → Cài đặt.
  5. Bật tin cậy chứng chỉ (bước hay bị quên nhất).

    Cài đặt → Cài đặt chung → Giới thiệu → Cài đặt tin cậy chứng nhận → bật công tắc mitmproxy. Thiếu bước này thì HTTPS sẽ lỗi, không bắt được gì.

  6. Mở game và lấy sid.

    Mở Litmatch → vào Đu quay. Trong giao diện mitmweb, gõ multiplayer_box vào ô Search để lọc. Bấm một request, mở tab Request — phần query chứa các giá trị cần lấy:

    sid       = session.v2.XXXXXXXXXX
    uuid      = XXXXXXXXXXXXXXXX
    platform  = ios          ← chú ý: KHÁC android
    version   = 7.xx.x
    model     = iPhone...
    os        = (phiên bản iOS)
  7. Dọn dẹp (quan trọng về bảo mật).
    • iPhone: tắt proxy (Định cấu hình proxy → Tắt); tắt tin cậy chứng chỉ ở bước 5; xoá profile trong Cài đặt chung → Quản lý VPN & thiết bị.
    • PC: Ctrl+C tắt mitmweb; gỡ rule tường lửa:
    Remove-NetFirewallRule -DisplayName "mitmproxy 8080"
Cảnh báo an toàn Khi CA mitmproxy còn được tin cậy, PC đọc được toàn bộ HTTPS của iPhone (ngân hàng, email…). Chỉ bật khi đang lấy dữ liệu, lấy xong tắt tin cậy và xoá profile ngay.
Lưu ý khi dùng sid của iPhone với tool get_session.py hiện ghi cứng platform=android, User-Agent Android và header X-Requested-With theo package Android. Nếu dùng sid lấy từ iPhone, nên dùng đúng các tham số (platform, model, os) bắt được từ iPhone — có thể cần sửa build_query để đọc platform từ session.json. Ngoài ra, chưa rõ Litmatch có cho một tài khoản chạy 2 session song song không; đăng nhập máy này có thể làm sid máy kia hết hạn.

Thay thế: bắt trực tiếp trên iPhone

Không muốn dùng PC thì cài app bắt traffic ngay trên iPhone: Proxyman, Stream hoặc HTTP Catcher. Vẫn phải cài + tin cậy chứng chỉ CA của app đó (tương tự bước 4–5) rồi lọc host litatom.com.

3. API đã biết của Litmatch GAME ĐU QUAY

Kết quả mỗi vòng 100% do server quyết. Game là H5 (WebView) chỉ poll API rồi vẽ; đây là vòng chung nhiều người (round_times là bộ đếm toàn server). Base URL:

https://www.litatom.com/api/sns/v1/lit/multiplayer_box/

Danh sách endpoint

EndpointVai trò / trả về
get_resultKết quả 1 vòng: result_id (1–8 = cửa thắng) + fileid + top_three (3 người thắng lớn).
get_round_infoTrạng thái vòng hiện tại: round_times, mốc start/end/end_bet/now, status, số vòng mỗi cửa chưa ra.
get_result_recordLịch sử: mảng 10 fileid cửa thắng gần nhất (xếp mới → cũ, không phân trang).
get_box_resourceBảng cửa: goods_id → tên → odds → probability.
last_bet_recordFeed cược realtime của người khác (avatar “bets on”).
top_bet_goodsCác cửa đang được đặt nhiều nhất.

Xác thực & query params

Auth = sid đặt trong query string (không có Bearer/Cookie). Bộ query dùng chung cho mọi endpoint:

ParamVí dụGhi chú
sidsession.v2.<digits>Token xác thực, từ máy ảo/capture.
uuid<device uuid>Khác với android_id.
platformandroid / iosTheo thiết bị lấy sid.
model23078RKD5CModel thiết bị.
os28SDK Android / phiên bản iOS.
version7.70.2Version app.
game_version1.0.5Version game H5.
loc / langEN / enNgôn ngữ.
base_urlhttps://www.litatom.com/Cố định.
loctype0Cố định.

Headers

User-Agent:       Mozilla/5.0 (Linux; Android 9; ...; wv) AppleWebKit/537.36
Origin:           https://activity.static.litatom.com
Referer:          https://activity.static.litatom.com/
X-Requested-With: com.litatom.lite

Mẫu request đầy đủ (lịch sử)

GET https://www.litatom.com/api/sns/v1/lit/multiplayer_box/get_result_record
    ?sid=session.v2.<SESSION_ID>
    &loc=EN&uuid=<DEVICE_UUID>&version=7.70.2&lang=en
    &base_url=https%3A%2F%2Fwww.litatom.com%2F
    &platform=android&model=23078RKD5C&os=28&loctype=0&game_version=1.0.5

Lấy dữ liệu khác thì đổi get_result_record thành endpoint tương ứng, giữ nguyên bộ query. Với get_result thêm ?round_times=N (N từ 1 đến vòng hiện tại của hôm nay).

Mã kết quả (field result)

MãÝ nghĩa
successCó data hợp lệ.
-1Vòng chưa xảy ra (round_times tương lai / ngoài phạm vi ngày).
-10login time out — sid hết hạn. Mở lại game để nạp sid mới.
-22Rate-limit (“Vui lòng thử lại sau”). Giãn ~2s/request + retry backoff.

Bảng xác suất (get_box_resource)

Bằng chứng “server quyết”: phân phối categorical hoàn chỉnh (tổng xác suất = 1). Mọi cửa có kỳ vọng bằng nhau = 0.972 → RTP ≈ 97.2%, house edge ≈ 2.8% cố định.

IDCửaOddsProbabilityEV (odds×prob)
1Kem Cây50.194380.972
2Phao Bơi50.194380.972
3Bong Bóng50.194380.972
4Nắm Đấm50.194380.972
5Gấu Bông100.097200.972
6Nàng Tiên150.064800.972
7Máy Ảnh250.038880.972
8Vương Miện450.021600.972

Cơ chế round_times — reset mỗi ngày

Quyền riêng tư get_result.top_three và last_bet_record trả về profile đầy đủ của người chơi khác (tên, tuổi, bio, quốc gia, ngày sinh, avatar…). Cân nhắc khi lưu/chia sẻ.
Chưa bắt được Endpoint đặt cược (POST bet/place_bet) chưa xuất hiện trong phiên capture (chỉ quan sát, không cược thật). Không ảnh hưởng kết luận nguồn kết quả — kết quả nằm ở get_result, độc lập với việc có cược hay không.