Защита от читерской самодеятельности

Темы, связанные с проектированием и программированием roguelike-игр

Модераторы: Sanja, Максим Кич

Аватара пользователя
Максим Кич
Администратор
Сообщения: 1642
Зарегистрирован: 03 дек 2006, 20:17
Откуда: Витебск, Беларусь
Контактная информация:

Защита от читерской самодеятельности

Сообщение Максим Кич » 03 фев 2007, 22:41

Две категории игроков я терпеть не приемлю: манчкинов и читеров. Особенно, когда некоторые совмещают в себе и то, и другое.

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

Вот и возникает вопрос, тут уже чисто с технической точки зрения: как наиболее эффективно защититься от исправления игровых данных при помощи разного рода ArtMoney и пр.?
Dump the screen? [y/n]

Аватара пользователя
BigBoots
Сообщения: 43
Зарегистрирован: 25 ноя 2006, 18:28
Контактная информация:

Re: Защита от читерской самодеятельности

Сообщение BigBoots » 03 фев 2007, 22:54

Максим Кич писал(а):Вот и возникает вопрос, тут уже чисто с технической точки зрения: как наиболее эффективно защититься от исправления игровых данных при помощи разного рода ArtMoney и пр.?
А в этом есть хоть какой-то смысл? на это можно потратить слишком много усилий. Не лучше оставить на совести игроков?
Конкретно от ArtMoney видимо несложно - там совсем простой принцип действия насколько я понимаю.
И возникает другой вопрос - ты не открываешь свои исходники?

Аватара пользователя
Cfyz
Сообщения: 776
Зарегистрирован: 30 ноя 2006, 10:03
Откуда: Санкт-Петербург
Контактная информация:

Сообщение Cfyz » 04 фев 2007, 00:44

Некоторые, так сказать, мыслишки...

Против спойлеристов:

1. Все идентифицирующие характеристики (цвет бутылок/книг, названия свитков, имена NPC и прочая) при их сюжетной или иной фиксированности сделать случайно генерируемыми для каждого, к примеру, компьютера. Так, чтоб у одного игрока синяя бутыль лечила, а у другого - память отшибала. Т.е. помимо внутриигровой случайностей вводить случайности "настроек" всей игры целиком - вплоть до перемешивания квестов. Спойлер-таблицы вида "иди туда, ударь того, забери это и будет тебе счастье" идут лесом.
2. Дать игроку ту же информацию, что и спойлеры. К примеру, книги а-ля Morrowind, лежащие в библиотеках, лавках, драконьих пещерах. И так, чтобы информацию было необходимо было добывать, но было хотя бы в общих чертах ясно, где и как. Разумеется, людей, думать не желающих ни в какую это только отпугнет, но ориентироваться на них не представляется разумным.

Против читеров:

Мое личное мнение, для проектов с открытым кодом единственный способ защиты от читерства - не давать сообществу абсолютно весь код. Зашифрованные данные и функция дешифрации, состоящая из одного лишь комментария вида "// ага, читер?" легко охладит пыл не в меру любопытного игрока. Исходный текст в этом случае, разумеется, приобретет чисто "академический" характер, исключающий возможность самостоятельного построения модификаций сторонними людьми.
Пытается раскуклиться

Аватара пользователя
Sanja
Администратор
Сообщения: 791
Зарегистрирован: 24 ноя 2006, 12:25
Откуда: Новосибирск
Контактная информация:

Сообщение Sanja » 04 фев 2007, 03:17

Видимо менять адрес переменной, которую будет искать игрок.

Аватара пользователя
Maelstrom
Мастер
Сообщения: 2062
Зарегистрирован: 26 ноя 2006, 14:19
Откуда: г. Усть-Кирдык
Контактная информация:

Сообщение Maelstrom » 04 фев 2007, 07:27

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

От сейвскамминга защититься сложнее, и может привести к проблемам даже у честных игроков.
Айв кнгенгах Йог-Сотот

Bioworm
Сообщения: 89
Зарегистрирован: 01 фев 2007, 03:33

Сообщение Bioworm » 04 фев 2007, 07:33

Можно хранить в переменной совсем не то значение, которое надеется найти читер, изменяя его, например, при помощи XOR. Наверняка в ArtMoney это предусмотрено, но там вряд ли могли сделать что-то умнее, чем проверка изменения участков памяти на некую фиксированную величину -- типа, сделали дамп памяти, отняли 3 HP, посмотрели, от каких байтиков отнялась троечка, отняли 2 HP, посмотрели... ну и так пока не найдётся. Но если значение будет уменьшаться не на тройку, а на, скажем, тридцать три, поксоренное на девяносто девять, то найти его будет слегка сложнее, обычным читерам не по зубам. Ещё можно создать сотню или тысячу фальшивых переменных, раскиданных по разным участкам памяти. Много чего можно, в общем.

Аватара пользователя
Maelstrom
Мастер
Сообщения: 2062
Зарегистрирован: 26 ноя 2006, 14:19
Откуда: г. Усть-Кирдык
Контактная информация:

Сообщение Maelstrom » 04 фев 2007, 07:38

Но если значение будет уменьшаться не на тройку, а на, скажем, тридцать три, поксоренное на девяносто девять, то найти его будет слегка сложнее, обычным читерам не по зубам.
Но можно. Я, про крайней мере бы, нашёл :)
Айв кнгенгах Йог-Сотот

Аватара пользователя
Максим Кич
Администратор
Сообщения: 1642
Зарегистрирован: 03 дек 2006, 20:17
Откуда: Витебск, Беларусь
Контактная информация:

Сообщение Максим Кич » 04 фев 2007, 10:50

Maelstrom писал(а):Нужно держать две переменные за каждый важный параметр. И в одной из переменных его кодировать. И потом каждый, например, уровень, сравнивать эти значения. Если разные, то вырубить игру, запороть винду, стереть всё со всех дисков и т.д.
Ну да... плюс искать хитрую контрольную сумму всех аттрибутов... В принципе, где-то там и должно быть.
Maelstrom писал(а):От сейвскамминга защититься сложнее, и может привести к проблемам даже у честных игроков.
А это уже проблема. Правда, можно извратиться и сохранения записывать в хвост exe-файлу. Но как на эту процедуру отреагируют антивирусы я не знаю. Опять же, будет работать, только если юзверь не знает, где сохранения — а что скамить ему без разницы.
Dump the screen? [y/n]

ADB

Сообщение ADB » 07 фев 2007, 00:15

Защита информации и выявление диверсий - это то, чем я занимаюсь на работе :)
Для сейвов, секрет кроется в записи контрольных сумм параметров и общей контрольной суммы. Если они нарушены, сейв сломан.

Аватара пользователя
Maelstrom
Мастер
Сообщения: 2062
Зарегистрирован: 26 ноя 2006, 14:19
Откуда: г. Усть-Кирдык
Контактная информация:

Сообщение Maelstrom » 10 фев 2007, 13:57

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

ADB

Сообщение ADB » 10 фев 2007, 15:24

Просто получаем сумму всех интересующих для защиты параметров, или суммы по отдельности для каждых категорий праметров (для усложнения взлома). Например сумм1 = здоровье + энергия + мана; сумм2 = сила + выносливость + ... + удача; ...
Потом еще делаем сумм_общ = сумм1 + сумм2 + ....
Записываем эти контрольные суммы (сумм1, сумм2, сумм_общ) в сейв и при загрузке просто проверим, получаются ли они при сложении соответствующих (загруженных) характеристиках. Если нет, то значит была совершена попытка взлома.
Такое же можно сделать и в памяти. Просто, эффективно и быстро. 8)

ADB

Сообщение ADB » 10 фев 2007, 15:27

...или скопировать этот самый сейв...
Кстати, я не очень понял, откуда и куда скопировать сейв? С какой целью?

Аватара пользователя
Maelstrom
Мастер
Сообщения: 2062
Зарегистрирован: 26 ноя 2006, 14:19
Откуда: г. Усть-Кирдык
Контактная информация:

Сообщение Maelstrom » 10 фев 2007, 16:11

Только не говори, что ты не знаешь, что такое сейвскамминг.
Айв кнгенгах Йог-Сотот

ADB

Сообщение ADB » 10 фев 2007, 16:28

Замечу лишь, что кто захочет взломать, тот взломает.
Не даром есть цитата: "Лучшая защита - это когда ее совсем нет"...

Bioworm
Сообщения: 89
Зарегистрирован: 01 фев 2007, 03:33

Сообщение Bioworm » 11 фев 2007, 01:33

ADB писал(а):Защита информации и выявление диверсий - это то, чем я занимаюсь на работе :)
Для сейвов, секрет кроется в записи контрольных сумм параметров и общей контрольной суммы. Если они нарушены, сейв сломан.
А если дебаггером в EXE-файле, где надо, вставить пару NOP'ов? :)

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

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 40 гостей