[Из песочницы] «Особенности» Тиндера

boiao8g995zte7_dt3th1o9czyo.png

Informative

Бывают такие баги, которые, вроде как и угрозу безопасности не несут, но вред все-таки могут причинить. Интереснее всего, когда их и править никто не хочет, но и открыто о них нам не говорят. Часто в таких случаях разработчики утверждают, что это не баг, а фича. Именно о двух таких фичах в Тиндере и пойдет речь в посте.

Внимание! Перед тем, как рассказать аудитории Хабра об этих проблемах, мной были предприняты попытки сообщить о них разработчикам через платформу HackerOne. Разработчики посчитали это все «не багами», а репорты были закрыты в статусе «informative», дважды!

Случайности не случайны

Если пользоваться Тиндером так, как раньше пользовался я — не регулярно, то можно заметить следующую штуку: если вы давненько не открывали Тиндер, а потом открыли и поставили несколько лайков, вам обязательно прилетит »MATCH! ».

Замечали? Или я один такой? Может это совпадение и всего лишь очередной когнитивный баг моего мозга, а не приложения? Давайте проверим!

Открыв веб-версию сервиса в Burp, посмотрев запросы и несколько раз их повторив, закономерность была найдена. Допустим у вас есть профиль, которому уже поставили сколько-нибудь лайков люди вокруг вас. Когда вы запускаете приложение заново (не из фона), или когда вы меняете настройки вашего поиска (границы возраста или расстояния) приложение выполняет update запрос — GET /v2/recs/core? locale=ru.

Этот запрос возвращает нам список из 30 барышень/молодых людей (на ваш вкус). В этом списке их имена, возраст, описание профиля и конечно же фотки. Именно эти профили и будут нам далее показаны по очереди приложением, но нам интересен лишь один из этих 30 профилей. Профиль №2! Нет, нет, не из-за фотки. Я ее даже еще не открывал. Тут дело в том, что именно человек со второго профиля вас лайкнул.

Алгоритм Тиндера ВСЕГДА ставит человека который вас лайкнул на второе место в ответе на update запрос, если такой человек в ответе сервера есть.
Получается, чтобы получить максимум »MATCH! » на все лайки, нам всего-то нужно:


  1. Сделать Update запрос GET /v2/recs/core? locale=ru
  2. Лайкнуть профиль №2 в списке POST /like/{ SECOND_USER _ID}? locale=ru с параметрами {«s_number»:{ID}, «liked_content_id»:»{SECOND_USER_PHOTO_ID}», «liked_content_type»: «photo»}
  3. MATCH!
  4. Повторить пункты 1–3 до истощения лайков
  5. PROFIT!

Вы великолепны, у вас куча пар. Когда получите еще лайки, не забудьте повторить.

Возможное решение — генерировать случайную позицию, например от 1 до 7.


Не алгоритм, так фото

Когда вас лайкнули, вам показывают крайне размытое фото профиля этого человека. Мой товарищ VVarlock заметил, что размываются фотки лишь на клиенте, а сервер отдает их в исходном виде, что само по себе уже не хорошо. Фотки можно выводить для сравнения глазами или нейросетью. Я решил копнуть глубже, и сразу стало ясно, что все гораздо проще.

Вот пример ссылки на фото из раздела лайков, я вам его немного замаскировал URL, чтоб не смущать девушку:

А вот пример ее же фото из ответа на Update запрос, о котором мы говорили ранее:

ID фотографии неизменен, по нему строковым поиском и можем мы найти профиль вне зависимости от того на каком месте он стоит.

Использование этой «фичи» также легко автоматизируется:


  1. Запрос с обновлением раздела лайков.
  2. Собираем ID всех фоток профилей.
  3. Update запрос.
  4. Поиск наших ID по списку.
  5. Если нашли, то лайкаем.
  6. Повторяем пункты 3–5, пока не найдем всех девушек.
  7. PROFIT!

Это приносит нам точно такой же профит, как и предыдущий баг.

Возможное решение — генерировать отдельные идентификаторы для фоток «превью» и накладывать «размытие» на сервере.


Резюме

Почему эти фичи плохи для Тиндера? Тиндер живет тем, что мы много лайкаем, гораздо больше, чем лайкают нас. Чтобы видеть свои лайки и отвечать взаимностью только им, нужно покупать Тиндер Голд по подписке 600р в месяц. А с этими фичами он не нужен, что и несет прямой ущерб прибыли компании. Жаль что в самом Тиндере так не посчитали, когда я попытался до них это донести. Может после этого поста хоть закроют?

Для желающих попользоваться — это очень легко автоматизируется, проверено мной на Питоне. Хотя я бы рекомендовал использовать Javascript, чтоб не получать лишних токенов.
Если захотите повторить на Питоне, то обязательно ставьте заголовок «persistent-device-id:» без него сервер не захочет принимать ваши запросы, сгенерировать его можете сами или изменить уже выданный ID сервисом.

Для эксплуатации багов желательно выставить максимальное расстояние и широкие границы по возрасту. Ведь вам показывают лишь тех, кто подходит под ваши параметры. Если вы набрали лайков на Бали, а пытаетесь их превратить в пары в Москве, у вас не получится, ведь этих девушек сервис вам уже не покажет в любом случае. Для подобных экспериментов я советую вам пересоздать профиль с нуля и не менять локацию в пределах 100 км. Баги проверены были в мае, тогда же и отправлены в Тиндер.

P.S. Если кто-то, используя эти баги, найдет свою любовь, отпишитесь мне в личные сообщения — хоть порадуюсь за вас.

© Habrahabr.ru