Как я могу сделать (функциональную) контрольную сумму для проекта с открытым исходным кодом? - PullRequest
2 голосов
/ 18 января 2020

Мой друг работает над проектом в Godot, простой многопользовательской игре, в которой игроки соединяются друг с другом по IP. Недавно он решил сделать его git репо для него publi c, вместо того, чтобы держать его в тайне; по сути, делая его доступным для всего мира.

Однако вскоре он понял, что, опубликовав файлы проекта c, люди теперь смогут скомпилировать слегка измененную версию кода и по-прежнему подключаться к другим игрокам. Видя, как это может быть использовано для обмана (например, ход противника никогда не наступает), он попросил меня о помощи. Поскольку я также часто играю в стратегические игры, первое, что мне пришло в голову, - создать контрольную сумму для сравнения разных версий. Увы, большинство этих игр с закрытым исходным кодом, я понял это, когда он спросил, что произойдет, если кто-то сможет «жестко кодировать» или заставить контрольную сумму совпадать.

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

1 Ответ

3 голосов
/ 18 января 2020

Вы не сможете предотвратить мошенничество.

Для работы онлайн-игры на сервере есть для отправки информации клиентам, и эта информация может быть использована неправильно. Если сервер отправляет местоположения игроков клиентам, злонамеренный клиент может перехватывать эти сообщения и использовать его для построения карты всех своих противников или показа их местоположений через стены.

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

Речь идет не об открытом исходном коде

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

Используйте авторитетный сервер

Хотя обман не может быть предотвращен, вы можете ограничить его эффективность. Вы не можете контролировать клиентов, но вы можете контролировать сервер, поэтому сделайте его авторитетным . Каждое решение, относящееся к исходу игры, должно приниматься сервером, в то время как клиенты несут ответственность только за пересылку входных данных игрока на сервер. Это означает, что если игрок хочет «взломать» свою локальную копию, скажем, давая своему игроку 500% здоровья, это только испортит ситуацию на его стороне - сервер все равно будет действовать так, как если бы у его игрока было нормальное количество здоровье.

Ограничение отправляемой вами информации

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

Рассмотрите модель вашей угрозы

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...