Как пользователи TJ взломали игру, выпущенную к 11-летию ВКонтакте

TJournal

И нарисовали большой логотип.

Поделиться

В избранное

В избранном

Вчера на TJ была опубликована заметка о взломе игры Pixel Battle пользователями TJournal.

Мне, как участнику событий, хотелось бы внести ясности и подробно расписать, как все было на самом деле.

Впрочем, начать надо с описания того, как вообще устроены игры подобного типа.

Первый раз подобное организовал Reddit. Берется полотно некоторого размера, каждому из участников игры разрешается изменить на нем цвет одного пикселя один раз за некоторое время. Пользователи, соответственно, объединяются в группы для совместного рисования логотипов, картинок, создания надписей и пр.

Началось все в чате Telegram, созданном Александром Фастом для координации действий по рисованию логотипа TJ на полотне игры. Кроме честных игроков в чате нашлись также те, кому хотелось обмануть игру.

Было обнаружено, что игра ведет себя не совсем правильно: после установки пикселя включается таймер, по истечению которого можно ставить пиксель еще раз, однако при обновлении страницы таймер исчезает до его истечения. Сначала мы подумали, что баг чисто визуальный, и поставленные до истечения таймера пиксели не сохранятся. Но, как оказалось, это действительно позволяло ставить пиксели, не выжидая предусмотренного логикой игры промежутка времени.

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

В итоге у нас получилось рисовать лого быстрее.

Однако этого нам казалось мало, поэтому @quazzart начал разработку бота, который мог бы ставить точки в автоматическом режиме с большой скоростью.

Тем временем Александр Фаст, создатель чата и по совместительству редактор TJ, решил порезонансить и написать о нашем взломе статью.

После чего к нам в чат пришли сразу три разработчика игры. Тогда же мы узнали, что разработкой занимались не работники Вконтакте, а подрядчик — Happy Santa. Ребята поначалу тихо следили за ходом событий, потом начали отвечать нам, чтобы мы не тратили время на разработку, и что на самом деле защита на стороне сервера есть. Примерно тоже самое утверждала и пресс-служба ВКонтакте в комментарии редакции TJ. Я и другие участники чата, конечно же, спорили с этими утверждениями. Поскольку лично я, например, видел, как поставленные мною подряд пиксели сохранялись в системе даже после обновления страницы.

К слову, окончательной развязки этой истории ждать оставалось совсем недолго. Где-то в районе полдвенадцатого @quazzart наконец закончил работу над ботом и запустил его. В итоге бот за несколько секунд нарисовал большой логотип TJ на полотне. Процесс рисования можно посмотреть на этом видео.

Автор @maleg

После этого, разработчикам, конечно же, пришлось уверовать в существование бага и исправить его. Поэтому @quazzart успел сделать совсем немного.

Однако, логотип TJ остался в память об этом баге ;)

Разработчики оказались весьма приятными ребятами и подарили нам с @quazzart толстовки "хуяк-хуяк, и в продакшн" за найденную уязвимость.

TJ как главные читеры

Несложно заметить, что у TJ сейчас один из самых больших по площади логотипов (если не брать в расчет тот же Лентач, Country Balls и другие площадки, основную часть аудитории именно во ВКонтакте). Однако над логотипом работает сравнительно небольшое количество человек и честно нам вряд ли удалось бы занять даже в разы меньшую площадь. TJ даже не входит в топ сообществ, размещенный справа от полотна, но при этом по занимаемой площади мы примерно одинаковы, например, с Двачем, занимающий в топе третье место.

Удерживать позиции нам удается благодаря смекалочке.

Во-первых, мы первые отключили таймер, из-за чего смогли довольно быстро нарисовать логотип в самом начале игры. Потом мы первые разработали бота, который нарисовал нам новый, большой логотип. В-третьих, сейчас мы защищаем лого при помощи ботов с нескольких аккаунтов, параллельно занимаясь поиском новых уязвимостей и оптимизаций кода существующих скриптов.

Некоторые площадки предлагали нам сотрудничество вида "скрипт в обмен на аудиторию" (совместное рисование двух логотипов), что нам также очень помогло.

Если будут какие-то вопросы, отвечу в комментариях. @quazzart ответить не может по причине того, что он не смог купить подписку ¯\_(ツ)_/¯

UPD: @quazzart подарили подписку.

Пользуясь случаем, сообщаю, что нам нужна помощь в защите логотипа TJ. Поэтому, если вам не сложно, вступите в наш чат и скачайте там актуальную версию бота. Больше людей — больше шансов остаться под конец игры. А это, кстати, произойдет уже через сутки.