Защита flash приложений

Посвящается всем промо-приложениям в соц. сетях.

С год назад я начал заниматься созданием приложений для соц. сетей на популярной платформе Flash + PHP и сразу же возник вопрос: как защитить свое приложение от недобросовестных пользователей? После долгого курения интернета выяснилось, что на 100% защитить не получится никогда, поскольку любая игра, подразумевающая клиент (Flash, Java или HTML+JS), может быть изменена или изменены данные, которые она пересылает серверу.

Никогда не доверяйте данным пришедшим от клиента!
Инструменты которые используют для взлома онлайн игр.
  1. Про Artmoney я думаю все слышали, очень удобный инструмент чтобы что-нибудь подкрутить в игрушке, деньги там или жизнь не важно. Защиты фактически никакой, единственная рекомендация не хранить чистых значений в переменных, видоизменять их какими-нибудь арифметическими операциями. Особенно опасен для платформеров и подобных игр.
  2. Рядом CheatEngine, вообщем-то те же возможности и такая же защита. Одна особенность умеет ускорять Flash приложения в Opera, т.е. все таймеры игры могут быть ускорены в 100 раз.
  3. Charles очень удобный проксирующий перехватчик пакетов, можно отследить все запросы от клиента к серверу, видоизменять и запросы и ответы, можно слать измененные запросы пачками от 1 до 100500 с выставленным интервалом. Защита шифровать все, и запросы и ответы. Как минимум надо приклеивать к запросу хеш из всех параметров запроса с солью, чтобы было сложнее его подделать.
  4. SWF Decompile позволяет разобрать все игру по винтику и часто даже собрать с изменениями. Последствия самые разные от генерации правильны хешей для подделанных запросов, до полного изменения поведения игры (например не убиваемый персонаж с неограниченным количеством жизней). Защита обфускация кода различными инструментами.

Что надо делать обязательно!
  1. Проверять все запросы пришедшие от клиента на корректность (т.е. если проиходит продажа предмета, проверить есть ли он у игрока)
  2. Выдавать каждому клиенту при каждой авторизации уникальный код сессии
  3. Если игра платформер или подобная, то сделать скриншот по окончанию уровня и отослать его на сервер
  4. Если есть возможность, отослать на сервер все нажатия клавиш на клиенте один пакетом по окончанию уровня
  5. Пишите статистику по все запросам от клиента, ну хотя бы по тем запросам которые кажутся сомнительными, так проще отследить недобросовестных

Примеров пренебрежения этим базовыми правилами защиты множество, в основном это промо-приложения, например:
  1. Последняя акция hoegaarden.ru «Узнай секрет Hoegaarden» прошедная на facebook и vkontakte. Абсолютно не защищенное приложение, позволяло накрутить количество промокодов до неограниченного количества простым повтором запроса к серверу «я отгадал». На эти промокоды можно заказать гарантированные призы.
  2. Текущая акция Mennen в vkontakte, очень слабо защищено (позволяет отравлять на сервер результаты с любым количеством очков и любым временем прохождения уровня), что привело к панике среди организатора акции и недовольство участников. Дошло до того что организаторы просят прислать скринкаст прохождения некоторых уровней от участников, при том что большинство не знает как его записать, не говоря о том что теперь каждое прохождение уровня записывать требуют от участников, для подтверждения результата. Плюс к этому можно накрутить результаты для любого участника акции тем же запросом изменив только id пользователя. Между прочим разыгрывается 4 «тех самых планшетников — 2».

Абсолютной защиты не существует, но минимальные требования безопасности проще выполнить, чем потом разгребать.


0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.