Взлом флеш-игр, оценка 49700?? Как улучшить безопасность флеш-игр?

У меня есть 2 флеш-игры (написано в as3). И ценность рекорда взломана. Нормальный диапазон каждого игрового счета не более 5000 (обычные пользователи получат только 2000-3000 очков). Мой текущий метод борьбы с взломом:

После завершения игры флеш будет использовать параметры сообщения send: username = mike & score = 2000 & hash = md5 (secret. username. score). На php-странице я сделал чек, если hash!= Md5 (secret. Username. Score), он вернет ошибку и WONT вставляет данные в базу данных.

Я считаю, что этого метода недостаточно, или мои флеш-игры не будут взломаны. Есть ли что-нибудь, что я могу сделать, чтобы улучшить защиту флеш-игр/анти-хакинг?

Как взломают хакеры? Использование стороннего программного обеспечения, такого как Cheat Engine, данные Tamper (firefox ext), tamperIE и т.д.?

Можете ли вы перечислить все стандартные методы взлома? (зная методы/проблемы взлома, средства решили 50% проблем, по крайней мере, я знаю, где проблемы, и сделайте определенную предосторожность)

Ну, мой заголовок имеет "49700", потому что оба рекорда игры - 49700 (на самом деле это многозначное значение, введенное в мою базу данных, думали разные пользователи), поэтому я считаю, что они используют те же методы

Спасибо

Ответ 1

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

  • вы отправляете периодические обновления баллов на сервер, а на стороне сервера вы проверяете, что оценка не перескакивала "слишком много" (определяется в контексте вашей игры). Если он "подпрыгнул", вы можете спокойно предположить, что игрок взломал.

  • вы отправляете всю последовательность движения игры (вместе с любыми случайными нерестилами или любыми событиями ai) на сервер со счетом в конце и проверяете, что оценка действительно точна. Очевидно, что это не работает для каждой игры, но для некоторых игр она может работать. Вы не сказали ничего конкретного о своей игре, поэтому я оставлю это здесь.

Ответ 2

На сегодняшний день самым простым способом и самым трудным для победы во Flash является использование CheatEngine для простого поиска местоположения памяти, в котором хранится оценка, а затем измените значение на все, что вы хотите. Весь сервер-передача хэширования/соления/проверки в мире не будет исправлять это, потому что ваша игра считает его действительной, прежде чем она упаковывает ее в хороший хеш действительный для отправки.

Вы можете делать "проверки на работоспособность" на баллах, если они всегда будут попадать в предопределенные значения, но даже тогда определенный хакер может просто рассказать о том, какие максимальные допустимые значения и всегда представляют это значение.

Вы можете попытаться сфотографировать свои значения баллов в памяти, чтобы затруднить их поиск с помощью CheatEngine, например, хранить их как умноженное значение, а затем в ваших getters и seters для значения оценки включать умножение/деление значений чтобы получить/установить правильный балл для ваших просмотров и просмотреть виджеты представления. Даже это только тактика ларька.

Если фиктивные оценки не стоят вам денег, либо не беспокойтесь о том, чтобы тратить время на 0,01% людей, которые обманывают, или просто отмерить свои таблицы очков вручную.

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

Ответ 3

В конечном итоге вы пытаетесь отложить время, затрачиваемое на то, чтобы люди взломали вашу систему, или сделать это не стоит. Вы можете попробовать добавить соль в хэш для некоторой дополнительной сложности. Это может быть отправлено как значение для флеш-игры (добавьте ее как параметр для флэш-объекта в HTML) и включите это в код проверки хэша. Вы можете отправить какой-либо идентификатор сеанса или случайное число, чтобы оно всегда отличалось. Вы даже можете генерировать два хэша разными способами и проверить их оба.

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

Ответ 4

Если бы я хотел взломать вашу игру, я мог бы декомпилировать вашу игру и узнать "секрет" md5. Обратите внимание, что я помещал секрет в кавычки, поскольку тот факт, что он предоставлен в двоичном коде флеш-игры, означает, что это не секрет.

Вероятно, невозможно сделать ваши оценки недоступными, все, что вы можете надеяться сделать, это усложнить.

Ответ 5

Используемая криптографическая система очень похожа на HMAC, но ваша реализация менее безопасна. Алгоритм md5 является нарушенным, однако ваш MAC невосприимчив к атаке префиксов для генерации хеш-коллизий, поскольку начинается ваш секрет. Злоумышленник должен иметь возможность контролировать нищенство строки, чтобы создать хеш-коллизию.

TamperData - очень полезный инструмент взлома для изменения/захвата/воспроизведения трафика, который поступает из браузера. Таким образом, вы должны предотвращать атаки повтора, аутентифицируя текущую дату и время: hmac (secret, date_time.score.username).

Хакеры, вероятно, используют SWF Decompiler, чтобы найти значение вашего секрета в SWF файле. Чтобы противостоять этому, вы должны попытаться закопать секрет, используя обфускацию SWF, такую ​​как http://www.amayeta.com/.

Ничто из этого не является "серебряной пулей", это только усложняет работу хакера. Хакер всегда сможет изменить свой счет, потому что вы доверяете клиенту рассказать вам правильный счет. Даже если вы внесли рекомендуемые изменения, вы по-прежнему будете нарушать CWE-602.

Ответ 6

Не просто ли запустить игру на стороне сервера, чтобы предотвратить взломы? Если игра запускается как случайная игра, тогда вы отправляете случайные значения в браузер пользователя, в них не будет особого смысла пытаться обмануть, даже декомпилировать флеш файл не даст им преимущества.

Ответ 7

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

Обсуждая этот вопрос с другим разработчиком, он решил использовать компоненты Ajax. ИДК.

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

Кто-нибудь использовал случайные данные на основе количества отрицательной памяти? вместо поиска определенного места памяти с этими программными обеспечением.

Почему бы не отправить несколько фиктивных значений в память и получить результаты на основе открытых мест памяти?

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

Ответ 8

Вы можете добавить какое-то RSA (асимметричное) шифрование в свои Flash-приложения. Вы должны поместить открытый ключ в свое приложение Flash и использовать закрытый ключ на стороне сервера для расшифровки отправленного счёта.

Это не обязательно помешает хакеру взломать Flash-приложение, но это сделает его немного больнее в прикладе.

Вот библиотека AS3 для шифрования RSA.

С другой стороны, это будет зависеть от того, какую серверную технологию вы используете (PHP,.Net или что-то еще) относительно того, как вы реализуете RSA с другой стороны.

Следует также отметить, что этот вопрос уже ответил.

Ответ 9

Как вы сказали, в зависимости от того, что делается для взлома, есть разные отверстия для исправления. Когда вы отправляете фактическую информацию в свое сообщение, а "секрет" содержится в коде, она становится намного проще. Некоторые из вещей, которые вы могли бы сделать для повышения безопасности

  • Используйте другую хэш-функцию, MD5 имеет известные недостатки, можно создавать сообщения с одной и той же подписью, не зная содержимого, SHA1, SHA2 предлагают более высокую безопасность, это предотвратит атаку через слабость MD5

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

  • Хешируйте результат несколько раз, например. value = hash(hash(hash(...,salt),salt),salt) это не поможет, если люди декомпилируют вашу программу, но это поможет, если они просто пытаются воссоздать хеш сами по себе.

  • Найдите программное обеспечение для защиты SWF от декомпиляции, я не делаю много вспышки, поэтому у меня нет надежных ссылок для этого