NGHỊCH TINDER


Số blog này mình viết trong giai đoạn đang chán đời. Được bạn bè giới thiệu một nền tảng trò chuyện rất nổi tiếng nên mình cũng muốn thử xem sao. Mục đích của mình ở đây là học hỏi và tìm tòi các phương pháp, trau dồi kiến thức về… mà thôi, nói m* là muốn ngắm gái luôn đi cho nó nhanh :))

LƯU Ý: Bài viết chỉ mang tính chất tham khảo. Mình sẽ KHÔNG CHIA SẺ CODE trong bài.

Nghịch ngợm lần 1

Do đang sống ở Pháp mà ko muốn mua tinder gold, nên mình đành phải fake location về Việt Nam. Để làm được điều này, mình sử dụng một extension tên là Location Guard trên Chrome.

Mình không fake location trên điện thoại, lý do vì app trên android sử dụng location service của google nữa, muốn fake khá phực tạp lằng nhằng. Vả lại, cài trên đt thì cả ngày lại dán mắt vào cái đt mất :))

OK, vậy là xong, giờ thì quẹt… nhưng mà quẹt không thì chán quá, học hỏi được gì đâu nhỉ

Thế là mình vừa quẹt vừa ngó qua Devtool > Network xem API của tinder thiết kế ra sao


Như vậy, subdomain cho API là api.gotinder.com, có các endpoint chính như sau:
  • matches: chứa các tin nhắn cá nhân
  • generate: không rõ lắm, nó tạo 1 uuid mới, có vẻ là uuid cho session
  • profile: thông tin cá nhân
  • core: cái này quan trọng nhất, nó gửi về khoảng 10 cái profile để quẹt dần
  • update: gửi/nhận các cập nhật về trạng thái
  • teaser: chứa các thông tin “mồi”, ví dụ ảnh mờ mờ để “lôi kéo” user update lên gói cao hơn như gold, plus,…
  • like/{user_id}: gọi khi quẹt phải 1 profile bất kỳ

Nghịch ngợm lần 2

Dựa vào mấy cái endpoint trên, mình nghĩ ra một trò nghịch ngợm thế này: do mệt mỏi mới việc phải quẹt bấm bấm mới hiện ra ảnh, tại sao không làm cho nó hiện ra tất cả các profile, tất cả ảnh, để mình chỉ cần cuộn xuống và xem?

  • Đầu tiền, phải bắt dữ liệu trả về từ endpoint /core. Do tinder dùng API fetch nên có thể sử dụng code tại: https://stackoverflow.com/questions/45425169/intercept-fetch-api-requests-and-responses-in-javascript
  • Gửi data về lưu trên background.js
  • Tạo một page options.html, page này sẽ lấy data lưu trên background.js, render tất cả thông tin ra màn hình
Data structure trả về từ endpoint core
Sau khi trình bày ra HTML:
Đã che mặt cho an toàn

Nghịch ngợm lần 3

Mình còn tiến xa thêm 1 bước. Thế này nhé, logic mà nói, nếu người ta đã quẹt phải thì thể nào tinder chả suggest cho mình quẹt profile của họ.

Như vậy, sau vài lần F5, nếu thấy profile nào hiện lên nhiều lần thì có thể assume rằng họ đã quẹt phải mình. Mình viết thêm vài dòng code để đếm số lượng các profile được hiện lặp lại:

Giờ câu hỏi cuối cùng đặt ra là, mình có thể quẹt phải một profile bất kỳ trong số đó hay không?

Câu trả lời là CÓ. Nếu như nhìn vào endpoint /like/{user_id} ở trên, có thể thấy rằng nó cần 2 params: user_id và s_number (có vẻ là session hay signature number gì đó để tránh CSRF). 2 params này và headers có thể lấy từ endpoint /core ở phần trên

Great, vậy là xong