Защита flash приложений
Посвящается всем промо-приложениям в соц. сетях.
С год назад я начал заниматься созданием приложений для соц. сетей на популярной платформе Flash + PHP и сразу же возник вопрос: как защитить свое приложение от недобросовестных пользователей? После долгого курения интернета выяснилось, что на 100% защитить не получится никогда, поскольку любая игра, подразумевающая клиент (Flash, Java или HTML+JS), может быть изменена или изменены данные, которые она пересылает серверу.Никогда не доверяйте данным пришедшим от клиента!
Инструменты которые используют для взлома онлайн игр.
- Про Artmoney я думаю все слышали, очень удобный инструмент чтобы что-нибудь подкрутить в игрушке, деньги там или жизнь не важно. Защиты фактически никакой, единственная рекомендация не хранить чистых значений в переменных, видоизменять их какими-нибудь арифметическими операциями. Особенно опасен для платформеров и подобных игр.
- Рядом CheatEngine, вообщем-то те же возможности и такая же защита. Одна особенность умеет ускорять Flash приложения в Opera, т.е. все таймеры игры могут быть ускорены в 100 раз.
- Charles очень удобный проксирующий перехватчик пакетов, можно отследить все запросы от клиента к серверу, видоизменять и запросы и ответы, можно слать измененные запросы пачками от 1 до 100500 с выставленным интервалом. Защита шифровать все, и запросы и ответы. Как минимум надо приклеивать к запросу хеш из всех параметров запроса с солью, чтобы было сложнее его подделать.
- SWF Decompile позволяет разобрать все игру по винтику и часто даже собрать с изменениями. Последствия самые разные от генерации правильны хешей для подделанных запросов, до полного изменения поведения игры (например не убиваемый персонаж с неограниченным количеством жизней). Защита обфускация кода различными инструментами.
Что надо делать обязательно!
- Проверять все запросы пришедшие от клиента на корректность (т.е. если проиходит продажа предмета, проверить есть ли он у игрока)
- Выдавать каждому клиенту при каждой авторизации уникальный код сессии
- Если игра платформер или подобная, то сделать скриншот по окончанию уровня и отослать его на сервер
- Если есть возможность, отослать на сервер все нажатия клавиш на клиенте один пакетом по окончанию уровня
- Пишите статистику по все запросам от клиента, ну хотя бы по тем запросам которые кажутся сомнительными, так проще отследить недобросовестных
Примеров пренебрежения этим базовыми правилами защиты множество, в основном это промо-приложения, например:
- Последняя акция hoegaarden.ru «Узнай секрет Hoegaarden» прошедная на facebook и vkontakte. Абсолютно не защищенное приложение, позволяло накрутить количество промокодов до неограниченного количества простым повтором запроса к серверу «я отгадал». На эти промокоды можно заказать гарантированные призы.
- Текущая акция Mennen в vkontakte, очень слабо защищено (позволяет отравлять на сервер результаты с любым количеством очков и любым временем прохождения уровня), что привело к панике среди организатора акции и недовольство участников. Дошло до того что организаторы просят прислать скринкаст прохождения некоторых уровней от участников, при том что большинство не знает как его записать, не говоря о том что теперь каждое прохождение уровня записывать требуют от участников, для подтверждения результата. Плюс к этому можно накрутить результаты для любого участника акции тем же запросом изменив только id пользователя. Между прочим разыгрывается 4 «тех самых планшетников — 2».
Абсолютной защиты не существует, но минимальные требования безопасности проще выполнить, чем потом разгребать.
0 комментариев