«Особенности» Тиндера


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. Если кто-то, используя эти баги, найдет свою любовь, отпишитесь мне в личные сообщения — хоть порадуюсь за вас.

Ads
AdBlock has stolen the banner, but banners are not teeth — they will be back

More

Comments 29

    +37
    хакер_и_солонки.txt
        0
        Странно что никому в голову не пришло раздавать при получении заказа каждому индивидуальный пакетик с солью в пластиковом пакетике, которую собственно сейчас в любой забегаловке раздают.
      +2
      Спасибо за исследование, в любом случае было интересно узнать как это работает.
        0
        Замечали? Или я один такой?

        В точку. А еще замечаешь, что эту анкету ты видел уже несколько раз. И если лайкнуть, то почти 100% матч.
          +3
          Да ботов там куча, у всех имена на латинице, один и тот же «идеальный» возраст и фотки из инета.
            0
            если фотка спиной то 100% бот
          +1
          Я много общался на сайтах знакомств. Состав там конечно разный, но много знакомых лиц. И лица эти разные. В тиндере я нашел всего пару знакомых. Все отборные красотки. Впечатление что там 95% боты.
            0
            Промахнулся! Ответил тебе, но на коммент выше.
            0
            Хм. Я поменял в приложении расстояние на максимальное, лайкнул второй профиль и… мэтча не было.
            Попробовал не несколько раз изменять на близкое, посмотреть профили, а потом опять на максимальное расстояние, и опять второй профиль не мэтч.
            Пробовал на ios.
              0
              Пересоздай акк, набери лайки в определнной локации и попробуй заново.
              И для Update запросов нужно меня границу возраста.
                0
                С текущими реалиями привязок всего и вся к мобильным номерам не хочется заморачиваться с новыми акками.
                В остальном воспроизвести не получилось. Хоть сейчас и в 70км от основной своей локации в москве, но 160км расстояния покрывают и её и всю москву. И показывает, что у меня 27 лайков есть.
                  –1
                  Переезжал с одного конца Москвы на другой и уже не было эффекта не показывали мне мои лайки, в своем районе работает, черт его знает что у них там с расстоянием на серваке.
                  А по мобильным номерам, тебе и не надо, удаляешь старый акк и сразу же создаешь новый на этом же номере и на сутки где-то ты в топе поиска как «новый пользователь».
              +1
              1. Укажите минимальный радиус поиска.
              2. Любая анкета дальше 2 км от вас, которая отображается в поиске на 98% лайкнула вас.
                0
                Расстояние может быть скрыто, да и с расстоянием странные штуки, иногда вообще не показывает никого в таком случае, яб так не рисковал.
                  0

                  Я этим пользуюсь постоянно. Никаких проблем.))

                0
                жду расширение для хрома
                  0
                  Я не прогер, писать не хочу, пусть кто-то более компетентный напишет лучше)
                    0
                    ну тогда другой вопрос, как набрать лайков?)
                      +1
                      Здесь нужен консультант по имиджу)
                  0
                  Второй профиль не всегда является профилем, который лайкнул ваш.
                  По разделу с картинками — конечно забавная история. Там можно прямо в классе поменять значение blur до нуля и картинки тоже будут в оригинальном качестве)
                    0
                    Ну если лайков в текущем радиусе и подходящих под критерии, или же ты уже ранее ставил «дизлайк» всем оставшимся, то да) второй профиль будет пустой, т.к. некого туда ставить)
                      0
                      Иногда бывает так, что лайки смещаются со второй позиции на первую или какую-то рандомную.
                      Но в основном (примерно в 90% случаев), лайки действительно на второй позиции
                      +1

                      Уже нельзя, там теперь сильно уменьшенная версия

                        0
                        Если ты про уменьшенную версии фотки, то можно, ID у нее точно такой же, не смотря на изменение размера.
                      0
                      Да почти все крупные сервисы так или иначе занимаются хитростями по удержанию внимания, это их хлеб. Со временем развивается чутьё и иммунитет на этот «разводняк».
                        0
                        Подтверждаю, тоже это замечал. Думаю, это сделано специально, такой «бонус» для внимательных.

                        В Баду это так же работает.
                          0
                          Специально — факт. Чтобы порадовать внимательных — точно нет. Такие решения принимаются ради максимизации метрик, обычно на базе кучи накопленной аналитики + с тонной экспериментов.
                          0
                          Для тех, кто Burp видит первый раз в жизни. Можно какую-то краткую инструкцию как открыть Тиндер в нём и посмотреть все лайки?

                          Only users with full accounts can post comments. Log in, please.