Предотвращение читов с помощью генерации кода

Будет ли эта анти-читерская техника работать для многопользовательской игры с использованием частных серверов (общеизвестный исполняемый файл):

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

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

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

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

Есть ли хорошие способы сделать это? Это работает вообще против автоматического взлома?

2 ответа

Решение

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

Люди могут обманывать двумя способами:

  1. Получение информации, которой другие не имеют (например, просматривая стены)
  2. Автоматизация игрового процесса, который другие должны делать вручную ("фермерство")

Есть ровно два способа, которыми вы можете удержать людей от этого:

  1. Прекратите давать эту информацию клиенту. Держите это на сервере.
  2. Прекратите иметь части своей игры, которые не являются забавой. Люди только автоматизируют скучные части, они не играют в скучную игру. Сделайте это забавным, и никто не будет тратить свое время на его автоматизацию. Если всплывет автоматизация вашей игры, подумайте, как вы можете улучшить свою игру вместо того, чтобы сражаться с ботами технологически.

Помните старую поговорку: "Клиент в руках врага".

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

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

  • Что вы подразумеваете под рандомизацией класса? Это далеко не тривиально.
  • Поддельные объекты в конечном итоге будут обнаружены (мертвый код)

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

Другие вопросы по тегам