Защита от читерской самодеятельности
Модераторы: Sanja, Максим Кич
- Максим Кич
- Администратор
- Сообщения: 1642
- Зарегистрирован: 03 дек 2006, 20:17
- Откуда: Витебск, Беларусь
- Контактная информация:
Защита от читерской самодеятельности
Две категории игроков я терпеть не приемлю: манчкинов и читеров. Особенно, когда некоторые совмещают в себе и то, и другое.
Рогалики, в силу своей специфики, имеют мало поклонников с подобными грехами, но, всё же, уникумы встречаются и здесь.
Вот и возникает вопрос, тут уже чисто с технической точки зрения: как наиболее эффективно защититься от исправления игровых данных при помощи разного рода ArtMoney и пр.?
Рогалики, в силу своей специфики, имеют мало поклонников с подобными грехами, но, всё же, уникумы встречаются и здесь.
Вот и возникает вопрос, тут уже чисто с технической точки зрения: как наиболее эффективно защититься от исправления игровых данных при помощи разного рода ArtMoney и пр.?
Dump the screen? [y/n]
Re: Защита от читерской самодеятельности
А в этом есть хоть какой-то смысл? на это можно потратить слишком много усилий. Не лучше оставить на совести игроков?Максим Кич писал(а):Вот и возникает вопрос, тут уже чисто с технической точки зрения: как наиболее эффективно защититься от исправления игровых данных при помощи разного рода ArtMoney и пр.?
Конкретно от ArtMoney видимо несложно - там совсем простой принцип действия насколько я понимаю.
И возникает другой вопрос - ты не открываешь свои исходники?
- Cfyz
- Сообщения: 776
- Зарегистрирован: 30 ноя 2006, 10:03
- Откуда: Санкт-Петербург
- Контактная информация:
Некоторые, так сказать, мыслишки...
Против спойлеристов:
1. Все идентифицирующие характеристики (цвет бутылок/книг, названия свитков, имена NPC и прочая) при их сюжетной или иной фиксированности сделать случайно генерируемыми для каждого, к примеру, компьютера. Так, чтоб у одного игрока синяя бутыль лечила, а у другого - память отшибала. Т.е. помимо внутриигровой случайностей вводить случайности "настроек" всей игры целиком - вплоть до перемешивания квестов. Спойлер-таблицы вида "иди туда, ударь того, забери это и будет тебе счастье" идут лесом.
2. Дать игроку ту же информацию, что и спойлеры. К примеру, книги а-ля Morrowind, лежащие в библиотеках, лавках, драконьих пещерах. И так, чтобы информацию было необходимо было добывать, но было хотя бы в общих чертах ясно, где и как. Разумеется, людей, думать не желающих ни в какую это только отпугнет, но ориентироваться на них не представляется разумным.
Против читеров:
Мое личное мнение, для проектов с открытым кодом единственный способ защиты от читерства - не давать сообществу абсолютно весь код. Зашифрованные данные и функция дешифрации, состоящая из одного лишь комментария вида "// ага, читер?" легко охладит пыл не в меру любопытного игрока. Исходный текст в этом случае, разумеется, приобретет чисто "академический" характер, исключающий возможность самостоятельного построения модификаций сторонними людьми.
Против спойлеристов:
1. Все идентифицирующие характеристики (цвет бутылок/книг, названия свитков, имена NPC и прочая) при их сюжетной или иной фиксированности сделать случайно генерируемыми для каждого, к примеру, компьютера. Так, чтоб у одного игрока синяя бутыль лечила, а у другого - память отшибала. Т.е. помимо внутриигровой случайностей вводить случайности "настроек" всей игры целиком - вплоть до перемешивания квестов. Спойлер-таблицы вида "иди туда, ударь того, забери это и будет тебе счастье" идут лесом.
2. Дать игроку ту же информацию, что и спойлеры. К примеру, книги а-ля Morrowind, лежащие в библиотеках, лавках, драконьих пещерах. И так, чтобы информацию было необходимо было добывать, но было хотя бы в общих чертах ясно, где и как. Разумеется, людей, думать не желающих ни в какую это только отпугнет, но ориентироваться на них не представляется разумным.
Против читеров:
Мое личное мнение, для проектов с открытым кодом единственный способ защиты от читерства - не давать сообществу абсолютно весь код. Зашифрованные данные и функция дешифрации, состоящая из одного лишь комментария вида "// ага, читер?" легко охладит пыл не в меру любопытного игрока. Исходный текст в этом случае, разумеется, приобретет чисто "академический" характер, исключающий возможность самостоятельного построения модификаций сторонними людьми.
Пытается раскуклиться
- Maelstrom
- Мастер
- Сообщения: 2062
- Зарегистрирован: 26 ноя 2006, 14:19
- Откуда: г. Усть-Кирдык
- Контактная информация:
Нужно держать две переменные за каждый важный параметр. И в одной из переменных его кодировать. И потом каждый, например, уровень, сравнивать эти значения. Если разные, то вырубить игру, запороть винду, стереть всё со всех дисков и т.д.
От сейвскамминга защититься сложнее, и может привести к проблемам даже у честных игроков.
От сейвскамминга защититься сложнее, и может привести к проблемам даже у честных игроков.
Айв кнгенгах Йог-Сотот
Можно хранить в переменной совсем не то значение, которое надеется найти читер, изменяя его, например, при помощи XOR. Наверняка в ArtMoney это предусмотрено, но там вряд ли могли сделать что-то умнее, чем проверка изменения участков памяти на некую фиксированную величину -- типа, сделали дамп памяти, отняли 3 HP, посмотрели, от каких байтиков отнялась троечка, отняли 2 HP, посмотрели... ну и так пока не найдётся. Но если значение будет уменьшаться не на тройку, а на, скажем, тридцать три, поксоренное на девяносто девять, то найти его будет слегка сложнее, обычным читерам не по зубам. Ещё можно создать сотню или тысячу фальшивых переменных, раскиданных по разным участкам памяти. Много чего можно, в общем.
- Максим Кич
- Администратор
- Сообщения: 1642
- Зарегистрирован: 03 дек 2006, 20:17
- Откуда: Витебск, Беларусь
- Контактная информация:
Ну да... плюс искать хитрую контрольную сумму всех аттрибутов... В принципе, где-то там и должно быть.Maelstrom писал(а):Нужно держать две переменные за каждый важный параметр. И в одной из переменных его кодировать. И потом каждый, например, уровень, сравнивать эти значения. Если разные, то вырубить игру, запороть винду, стереть всё со всех дисков и т.д.
А это уже проблема. Правда, можно извратиться и сохранения записывать в хвост exe-файлу. Но как на эту процедуру отреагируют антивирусы я не знаю. Опять же, будет работать, только если юзверь не знает, где сохранения — а что скамить ему без разницы.Maelstrom писал(а):От сейвскамминга защититься сложнее, и может привести к проблемам даже у честных игроков.
Dump the screen? [y/n]
Просто получаем сумму всех интересующих для защиты параметров, или суммы по отдельности для каждых категорий праметров (для усложнения взлома). Например сумм1 = здоровье + энергия + мана; сумм2 = сила + выносливость + ... + удача; ...
Потом еще делаем сумм_общ = сумм1 + сумм2 + ....
Записываем эти контрольные суммы (сумм1, сумм2, сумм_общ) в сейв и при загрузке просто проверим, получаются ли они при сложении соответствующих (загруженных) характеристиках. Если нет, то значит была совершена попытка взлома.
Такое же можно сделать и в памяти. Просто, эффективно и быстро.
Потом еще делаем сумм_общ = сумм1 + сумм2 + ....
Записываем эти контрольные суммы (сумм1, сумм2, сумм_общ) в сейв и при загрузке просто проверим, получаются ли они при сложении соответствующих (загруженных) характеристиках. Если нет, то значит была совершена попытка взлома.
Такое же можно сделать и в памяти. Просто, эффективно и быстро.
А если дебаггером в EXE-файле, где надо, вставить пару NOP'ов?ADB писал(а):Защита информации и выявление диверсий - это то, чем я занимаюсь на работе
Для сейвов, секрет кроется в записи контрольных сумм параметров и общей контрольной суммы. Если они нарушены, сейв сломан.
Хм... Можно в сейве записывать не значения параметров игрока, а некие числа или число, по которому эти значения будут генерироваться. То же и в памяти. Тогда для взлома потребуется написать свой аналогичный генератор. Авторы генераторов ключей для шароварного софта в этом преуспели, насколько помню.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 40 гостей