Как отключить модифицированных клиентов в проекте клиент-сервер с открытым исходным кодом?

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

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

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

1

Решение

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

4

Другие решения

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

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

3