Как защитить игру от читеров

Сообщение Как защитить игру от читеров
» 02 мар 2020, 11:51

Наверное, каждый разработчик, у которого уже есть опубликованные игры, рано или поздно сталкивается с проблемой взлома игры (накрутка ресурсов, изменение переменных и т.д.). Сегодня вы узнаете способ (а вместе с ним плагин + исходник), который поможет защититься от 99.9% потенциальных "хацкеров".

Как происходит процесс взлома :diablo:

Например, у вас в игре есть переменная, отвечающая за количество монет. Эта переменная хранится в открытом виде. А значит, что если изменить её значение (не игровым способом) — то изменится и количество монет в игре. Нужно только знать, какая именно переменная отвечает за монеты. И есть одна проблема — таких переменных в игре десятки, а то и сотни тысяч (координаты объектов и прочие - прочие параметры).

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

Хэш - функция. В чём суть :scratch_one-s_head:

Говоря простыми словами, используя хэш-функцию вы можете пересчитать любое число или текст и получить строку из символов установленной длинны. Для пересчёта используется специальный ключ. Далее, вы сохраняете результат (тот самый хэш). Позже, используя этот же ключ, можно пересчитать данные снова и если результат будет разным — значит данные были изменены.

Хэш функция не защищает данные, а только проводит проверку на предмет их изменения. Для защиты данных используется шифрование.

Шифрование. В чём суть :scratch_one-s_head:

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

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

Скачать плагин viewtopic.php?f=18&t=7446

Как применить хэширование в Construct 2 :help:

Сперва вам нужно установить специальный плагин, который производит хеширование (ниже в прикреплённых файлах). В исходнике (который вы также можете скачать ниже) показан готовый пример реализации хеширования, мы лишь остановимся на паре моментов.

 Показать события
Изображение

    1. У нас есть три переменных: монет, ключа и самого хэша.

    2. Сперва вам необходимо задать значение ключа. Эту переменную можно дополнительно спрятать (разбить на несколько переменных и т.д.), чтобы защититься от того самого 0.01% хацкеров, которые будут копаться в исходном коде вашей игры.

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

    4. Далее, можно будет проводить анти-чит проверку (напр., при изменении количества монет или раз в N-секунд), где вы сравниваете значение хэша из переменной (которое меняется только в случае, когда игрок получает монеты игровым путём) и текущее значение хэша (т.е. снова преобразуете в хэш комбинацию ключа и количества монет). И если данные не совпадают (они могут не совпадать только в том случае, если изменения количества монет произошло неигровым путём) — значит игрок является читером. Всё гениальное просто!

    5. Дополнительная защита. Отсеяв 99.9% потенциальных хацкеров, вы можете значительно усложнить жизнь тем 0.01%, которые более сложными методами будут копаться в коде вашей игры (кстати, нечитаемый исходный код — это одна из причин, почему эти самые хацкеры ненавидят Construct 2).

Вот несколько рекомендаций:

    1. Не используйте "говорящие" названия переменных, например: "coin", "secretKey", "hash" и т.д. Вместо этого лучше или дать этим переменным нечитаемые или ложные имена (чтобы ввести взломщика в заблуждение). Например, вместо "coin" использовать "enemy_start_position" — насколько вам только хватит фантазии.

    2. Можно использовать ключ, состоящий из нескольких переменных (которые связывать уже на этапе проверки ключа).

    3. Можно пойти ещё дальше и хранить части ключа в неожиданных (для взломщика) местах. Например, часть ключа запрятать в массиве, который отвечает за стоимость улучшения построек (или что у вас там в игре будет), другая часть пусть будет храниться в координате колодца, который стоит у вас в центре карты (ух, сколько секретов таят в себе некоторые с виду неочевидные вещи), третья часть ключа пусть находится в переменной "do_not_cheat_me" (и путь взломщик потом чешет репу, что это всё значит).

Выводы :hii:

В общем, понятно, что единственный 100% способ защитить игру — это проводить все вычисления на сервере (хотя хакеры тоже разные бывают, везде уязвимости найдут). Но используя метод шифрования вы можете защитить свою игру от 99.9% потенциальных взломщиков и очень сильно усложнить жизнь тем самым 0.01% (а то и меньше), которые готовы идти до конца.

 Дисклеймер
Я не являюсь ни автором плагина, ни автором исходника. Всё что я сделал — это перевёл все комментарии исходника на русский язык и написал обучающую статью (ту самую, которую вы сейчас читаете).
cbhash_release_r70_1.0.zip
(13.6 КБ) Скачиваний: 27
Плагин для хэширования
anti_cheat.capx
(173.56 КБ) Скачиваний: 18
Исходник анти-чит проверки (хеширование SHA-1).
Последний раз редактировалось ViGaCi 09 мар 2020, 08:42, всего редактировалось 4 раз(а).
Аватара пользователя

Редактор
Сообщений: 147
Я тут с 01 авг 2017
Репутация 39 [ ? ]

Сообщение Как защитить игру от читеров
» 02 мар 2020, 12:28

Я правильно понимаю, это плагин для шифрования данных? Чем он отличается от плагина SecureData, который позволяет хранить зашифрованные данные не создавая дополнительных переменных?

Было бы здорово если вы подробно научили нас работать с этим плагином. Спасибо.
Аватара пользователя

Reficul
Сообщений: 620
Я тут с 02 ноя 2017
Репутация 241 [ ? ]

Сообщение Как защитить игру от читеров
» 02 мар 2020, 14:52

Reficul писал(а):Я правильно понимаю, это плагин для шифрования данных? Чем он отличается от плагина SecureData, который позволяет хранить зашифрованные данные не создавая дополнительных переменных?

Было бы здорово если вы подробно научили нас работать с этим плагином. Спасибо.


Нет, этот плагин позволяет только проводить проверку данных на предмет внесения изменений.
Последний раз редактировалось ViGaCi 02 мар 2020, 17:50, всего редактировалось 2 раз(а).
Аватара пользователя

Редактор
Сообщений: 147
Я тут с 01 авг 2017
Репутация 39 [ ? ]

Сообщение Как защитить игру от читеров
» 02 мар 2020, 15:28

ViGaCi, Годная статья, спасибо. Но пока для непросвещённого довольно запутанно... И страшновато использовать, как бы не слетело всё к чертям в готовой игре с тысячной аудиторией )
ViGaCi писал(а):Можно, например, дополнительно защитить массив или словарь

Эм... Вот просто бы один массив защитить от чтения и изменения возможно ?
А в игре просто хранить количество монет/жизней в массиве и при +(плюсе) к значению сверять, что значение в ячейке + прибавляемое число - верно
Изображение Изображение
Аватара пользователя

Игродел
Сообщений: 2489
Я тут с 26 сен 2013
Откуда: Екб
Двиг: C2
VK: indiewolf_game
Репутация 310 [ ? ]

Сообщение Как защитить игру от читеров
» 02 мар 2020, 15:57

А я могу давать плохие советы, чтобы статья стала хуже и мои шансы на победу чуть-чуть возрасли? :scratch_one-s_head: :mocking:
Аватара пользователя

Модератор
Сообщений: 4033
Я тут с 18 сен 2015
Откуда: Екатеринбург
Двиг: Construct 2
Лицензия: Personal
VK: id21590703
Репутация 598 [ ? ]

Сообщение Как защитить игру от читеров
» 02 мар 2020, 16:18

ReviveR200 писал(а):А я могу давать плохие советы, чтобы статья стала хуже и мои шансы на победу чуть-чуть возрасли? :scratch_one-s_head: :mocking:

Если ты про формулировки, то я не знаю как это правильно упростить. Например, данные не преобразуются в хэш-сумму, это не так работает. Но как это по-проще объяснить, надо ещё подумать. Статья пока редактируется, могу себе позволить ошибаться :biggrin:
Аватара пользователя

Редактор
Сообщений: 147
Я тут с 01 авг 2017
Репутация 39 [ ? ]

Сообщение Как защитить игру от читеров
» 02 мар 2020, 16:48

AferisT писал(а):ViGaCi, Годная статья, спасибо. Но пока для непросвещённого довольно запутанно... И страшновато использовать, как бы не слетело всё к чертям в готовой игре с тысячной аудиторией )
ViGaCi писал(а):Можно, например, дополнительно защитить массив или словарь

Эм... Вот просто бы один массив защитить от чтения и изменения возможно ?
А в игре просто хранить количество монет/жизней в массиве и при +(плюсе) к значению сверять, что значение в ячейке + прибавляемое число - верно

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

Редактор
Сообщений: 147
Я тут с 01 авг 2017
Репутация 39 [ ? ]

Сообщение Как защитить игру от читеров
» 02 мар 2020, 17:14

ViGaCi, например "Переименование переменных ничего не даст. Лучше писать их кирилицей, сто пудов верняк." или "Слишком много текста, нужно в каждой строке минимум 1 смайлик, а лучше минимум картинка. Но 100% нужно 2-3 картинки природы, по середине. Чтобы глаза отдохнули, чесслово, по-дружески подсказываю" :mocking:
Аватара пользователя

Модератор
Сообщений: 4033
Я тут с 18 сен 2015
Откуда: Екатеринбург
Двиг: Construct 2
Лицензия: Personal
VK: id21590703
Репутация 598 [ ? ]

Сообщение Как защитить игру от читеров
» 02 мар 2020, 17:29

ReviveR200 писал(а):ViGaCi, например "Переименование переменных ничего не даст. Лучше писать их кирилицей, сто пудов верняк." или "Слишком много текста, нужно в каждой строке минимум 1 смайлик, а лучше минимум картинка. Но 100% нужно 2-3 картинки природы, по середине. Чтобы глаза отдохнули, чесслово, по-дружески подсказываю" :mocking:


Ок, оформление буду править. Но про кириллицу немного не понял, если честно.. Я такого не писал.
Аватара пользователя

Редактор
Сообщений: 147
Я тут с 01 авг 2017
Репутация 39 [ ? ]

Сообщение Как защитить игру от читеров
» 02 мар 2020, 17:34

народ вопрос не по теме но я его удалю
Screenshot_1.png
что значит редактор ?
если помог пожалуйста поставь +
Аватара пользователя

Участник
Сообщений: 386
Я тут с 30 дек 2018
Двиг: construct 2
Лицензия: Bussines
Репутация 40 [ ? ]



Вернуться в Уроки на конкурс Reficul Jam

Сейчас эту тему просматривают

Зарегистрированные пользователи: нет зарегистрированных пользователей

Наверх