Удивляем людей в чатах. Реверс-Инженеринг

Как получить превосходство в онлайн чате? Как отвечать Быстрее чем собеседник вам успеет написать? Как набирать текст быстрее чем оппонент успеет моргнуть глазом?
Все это, вы узнаете из нашей статьи. Разбирать мы будем код: https://chatvdvoem.ru/. Этот сайт является одним из самых популярных онлайн чатов в РФ.



Предисловие

Сейчас, я объясню на пальцах, как работают такие чаты.
Вы и Ваш друг, стоите возле трубы, ваш друг на одном ее конце, вы — на другом, ваш друг что то сказал в трубу, и вы, спустя какое то время, это услышали, и начали общаться, вы говорите в трубу, он говорит в трубу, и так далее. Это все на «пальцах», на самом деле, чаты используют веб-соккеты, или туннели, это тоже, своеобразные трубы. Чтобы вы сделали, если вам уже надоело просто что-то говорить в трубу? Конечно, кинули бы туда камень, да такой, чтобы сразу остаться без друга. Это снова на «пальцах», в чате это будет выглядеть так: в ЧатВдвоем, есть замечательная функция, звука приходящего сообщения, она замечательная, но только в случае, если по ту сторону экрана не окажетесь вы 🙂 Представьте что будет чувствовать ваш собеседник, когда ему будет приходить по 100 сообщений в секунду, а у него включен звук.

Цели на сегодня

  1.  Узнаем, с чего сидит собеседник (IOS, Android, PC)
  2.  Узнаем имя пользователя в системе (анонимной)
  3.  Отправляем пользователю приветственное сообщение — автоматически
  4.  Шлем на три веселые тех — кто ищут там девушку
  5.  Злим обитателей ЧатаВдвоем

Итак, приступим

Переходим на сайт (https://chatvdvoem.ru/), жмем F12 в браузере, находим, по видимому «главный» файл chat.js далее, жмем на него, и смотрим что у него внутри, чуть чуть пролистав, перед нашими глазами предстает такая картина

По видимому, это функция отправки сообщений

Итак, теперь мы знаем, что chat.sendMessage(«123»); отправит в чат текст 123.


Теперь, осталось найти функцию, которая вызывается при установлении соединения с соккетом(трубой). Снова чуть чуть полистав, натыкаемся на это

Блок, который выполняется когда чат начинается(мы подошли к трубе, но не начали туда говорить).

Что с этим делать? Т.К мы имеем код функции которая отправляет сообщение в чат, давайте же ее вставим туда. Теперь, когда мы подключаемся к чату, мы моментально здороваемся с нашим собеседником. 3-ий пункт нашего плана — выполнен!

Продолжаем дальше, давайте пожалуй, узнаем, с чего сидит пользователь.

При подключении, в переменной GUID мелькает кое-что в начале токена…

droid — в начале токена, если человек с Android смартфона
ios — в начале токена, если человек с IOS устройства
Ничего — если человек с PC

Тут нам помогут регулярные выражения, вставим их в код блока, который вызывается при создании трубы(его код выше)

При подключении к чату, т.е создания трубы, сверху чата будет выводится, с чего сидит пользователь, а ему будет выводится сообщение: Привет, <ИМЯ ПОЛЬЗОВАТЕЛЯ>

1-ый и 2-ой пункты выполнены! Продолжаем

4-ый пункт, ищем функцию принятия сообщения, ее я уже нашел, это 1411строчка в chat.js

Вставляем нашу проверку в этот блок, все это должно выглядеть как-то так:

Тут, мы проверяем, какое сообщение мы только что приняли, и если это одно из неприятных, шлем оппонента на три веселых.

4-ый пункт выполнен!

4-ый, и самый интересный пункт — кидаем камень в трубу. Уже в знакомую нам функцию вставляем код, который будет отправлять 100 сообщений при подключении к пользователю, моментально

5-ый пункт выполнен

Ну, и немного реакции пользователей, на 100 приветственных сообщений

Сегодня мы реализовали все что задумали!

Понравилось? Поделись! Еще больше статей по разработке и безопасности на нашем Дзен канале: HellBytes