ibash.org.ru - Новый цитатник Рунета

Форум: Open Source и читерство 1 > [RSS]

Форум: Вход Регистрация Участники Поиск RSS

Shock
09.03.2010 - 14:35

Как борятся с читерством в Open Source играх (например, Нексуиз) при игре по сети и сингплеере на рекорды, кроме как идеологическими методами?

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

Или, скажем, открытая игра Tower Defense, где можно к концу набрать количество очков, число которых отправляется на сервер. Но, так как известен формат данных, то можно отправить произвольное значение, реально большое, но при этом не достигнутое. Например, Топ-1 набрал 8986 очков. Тогда мы отправляем 9012 и вуаля - число вполне реальное, и мы уже топ-1. При этом, если бы игра была закрытая, то можно было бы встроить алгоритм шифрования результата

Asterozoa
#1 - 09.03.2010 - 15:12

Может с ним никто и не борется? Или включают дополнительные проверки

Shock
#2 - 09.03.2010 - 15:15

а как же троллинг рекордов игры?

Циник
#3 - 09.03.2010 - 16:38

Shock, а разве в Open Source нельзя использовать ассиметричное шифрование?

З.Ы. обеспечение безопасности за счёт "закрытости" формата это примерно как головй в песок.

Asterozoa
#4 - 09.03.2010 - 16:47

А реально ли смоделировать в домашних условиях механизм двустороннего шифрования?

Shock
#5 - 09.03.2010 - 17:08

Циник

Утрированный пример. допустим, у нас есть функция, которая получает и возвращает количество очков:
int Player.setPoints();
int Player.getPoints();

и функция, которая посылает зашифрованный результат и в которой реализовано ассиметричное шифрование. например:
Response.sendData(int points);

Но ведь можно вместо Response.sendData(Player.getPoints()); поставить Response.sendData(9001);

Более того, можно изменить исходник игры и вместо Player.setPoints(Player.getPoints() + 1); поставить Player.setPoints(9001); И таким образом еще не дошло дело до пересылки данных, где используется шифрование, а клиент уже твёрдо уверен, что у нас over 9000 очков, что и пошлётся на сервер.

VovanZ
#6 - 09.03.2010 - 17:26

А зачем с ним бороться? В синглплеерные игры каждый играет для удовольствия так как он хочет. Если хотите посоревноваться, то лучше собраться ИРЛ и посоревноваться на одном компе, на который оригинальная игра поставил "рефери".

naryl
#7 - 09.03.2010 - 17:46

> При этом, если бы игра была закрытая, то можно было бы встроить алгоритм шифрования результата

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

Циник
#8 - 09.03.2010 - 17:50

Asterozoa, да. В чём проблема то?

Shock, всё это же можно сделать и в закрытой игре. С той только разницей, что править придётся не красивый код, а асемблер. Насчёт примера с координатами игроков для CS есть такой чит. Борятся всякими дополнительными утилитками, которые проверяют контрольные суммы файлов, сканируют память или ещё чего.

Циник
#9 - 09.03.2010 - 17:55

>В самые короткие сроки ломается защита, полагающаяся на неизвестность алгоритма шифрования.
Skype;)
Хотя там может не в закрытости дело, а в действительно хорошем алгоритме. А так да, очень часто "закрытое" шифрование ломается быстро.

Shock
#10 - 09.03.2010 - 18:08

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

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

но, я так понял, единственное решение проблемы - максимально вынести логику на сервер и в остальном - доверять игрокам?

RoadRunnеr
#11 - 09.03.2010 - 18:15

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

Shock
#12 - 09.03.2010 - 18:23

ок. время, за которое клиент прошёл уровень игры, при условии, что он может ставить на паузы, во время которых время не тикает

unikoid
#13 - 09.03.2010 - 18:35

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

RoadRunnеr
#14 - 09.03.2010 - 20:13

Та же "пауза" - клиент шлет серверу запрос на паузу и получает положительный ответ, после чего и отображает соотв. надпись. Затем, при снятии паузы, отсылает соотв. запрос на сервер для продолжения игры. Так что, Шок, ты что-то не то говоришь...

Shock
#15 - 09.03.2010 - 20:33

> Так что, Шок, ты что-то не то говоришь...
меня интересуют именно честные методы борьбы с читерством на стороне клиента в оупенсорс играх. ньюанс с перенесением части логики на сервер я понимаю, но:
1. это труднее запрограммировать, чем просто втыкнуть простую защиту на клиенте
2. это требует постоянного и надёжного соединения "на каждый чих"
3. это производит нагрузку на сервер.

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

Задание: максимально затруднить выкладывание фальшивого результата при условии идеально-открытого кода клиента и сервера. (например, использование закрытого ключа при открытом алгоритме шифрования или т.п. - разрешается)

есть вариант все рассчёты производить или дублировать на сервере, но тогда всплывают те три недостатка, что были описаны выше. и что я тут не то говорю?

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

но кроме варианта послезащиты хочется еще вариант предварительной защиты от подобных нечестностей.

naryl
#16 - 10.03.2010 - 01:03

Любая защита легко обходится написанием бота ;)

Можно попробовать анализировать демку автоматически.

unikoid
#17 - 10.03.2010 - 07:36

>Любая защита легко обходится написанием бота ;)
Можно поподробней, чет я не вкуриваю.

naryl
#18 - 10.03.2010 - 18:56

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

unikoid
#19 - 10.03.2010 - 19:45

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

Asterozoa
#20 - 10.03.2010 - 19:50

А читерство по твоему онанизм:)

unikoid
#21 - 10.03.2010 - 20:02

Скорее наоборот, читерство - отстранение от процесса или сведение его к механическим операциям.

доброжелатель
#22 - 10.03.2010 - 22:03

Возможное пристанище Няшгъа: http://nowere.net/b/res/28298.html

к0s7ёr
#23 - 16.03.2010 - 18:48

няшг, ты правда был там??

Xenius
#24 - 19.09.2010 - 20:33

Если будет какая-то "защита" — делом чести будет её обойти.
По-моему, оптимально — полагаться на честность других игроков и самому не обманывать.
Что касается чисто SP игр (то есть даже без писькомерства), то никакой "защиты" тем более не требуется, а наоборот желательно, что бы в самой игре были соответствующие опции, чтоб не перекомпилировать, что делать лень.
К списку вопросовСтраницы: 1 >

Быстрый ответ
Имя:      Пароль:    
Текст сообщения:

«ibash.org.ru — Новый цитатник Рунета» Почта вебмастера: imail@ibash.org.ru