Не думаю, что вы должны что-то делать, чтобы перестать обманывать однопользовательские игры. Ваши пользователи купили игру, они должны иметь возможность обманывать, если хотят, если они не играют против других.
Вот несколько вещей, которые я сделал. В основном это было сделано для античит-систем в турнирных играх, где на карту поставлены деньги, и определенные уровни вторжения в систему пользователя считаются приемлемыми. Я буду осторожен с некоторыми из этих вещей в казуальных играх, так как, если ваша игра нестабильна, возможно возникновение проблем с их системой.
1) Где возможно, «Никогда не доверяй клиенту» - это твой самый безопасный принцип. Выполните все действия на сервере и предоставьте клиенту столько знаний, сколько необходимо для визуализации того, что он должен видеть на экране в любой момент времени. то есть, если клиент не знает позицию игрока, который спрятан за стеной, взлом стены не принесет пользы пользователю. Для высокоскоростных игр в жанре экшн это может быть чрезвычайно сложно, особенно сейчас, когда тени в реальном времени и так далее являются нормой, когда пользователю может понадобиться видеть тень, даже если тело игрока видно - но это всегда должно в верхней части ваших вариантов. Также очень сложно сделать в одноранговых играх, но есть способы ограничить знания между пирами. Следующие пункты должны учитываться только в тех случаях, когда это становится препятствием для выполнения или выходит за рамки вашего бюджета времени / денег.
2) Откройте все другие процессы и подключите их функции WriteProcessMemory, чтобы они не могли записывать в память процесс вашей игры. Если все сделано правильно, этот шаг заблокирует 90% всех читов и чит-движков.
3) Сделайте то же самое, подключив различные функции эмуляции мыши и клавиатуры. Это предотвратит множество прицельных роботов и других типов автоматических ботов.
4) Подключитесь к функциям VirtualProtectEx / VirtualAllocEx / etc в собственном процессе вашей игры и отслеживайте, какие модули меняют уровни защиты или выделяют новые фрагменты памяти. Вы должны быть осторожны с этим, чтобы не допустить чрезмерной загрузки процессора, когда ваша игра выделяет много ресурсов, но это можно сделать.
5) Подключитесь к функциям LoadLibrary и следите за динамически загружаемыми библиотеками DLL, чтобы предотвратить внедрение DLL.
6) Используйте легкую полиморфную кодировку в игровых соединениях.
7) Используйте некоторые методы защиты от отладки, чтобы предотвратить присоединение отладчиков к вашим процессам. Google отладки, и вы сможете найти много вещей.
8) Используйте специальный запатентованный PE-упаковщик, чтобы избежать разборки вашей игры.
9) Подключитесь к своим функциям и методам OpenGL или Direct3D, которые работают с прозрачностью и альфа-смешиванием.
10) При использовании шейдеров проверяйте их шейдеры и значения констант шейдера.
11) Используйте дополнительные приемы окклюзии на персонажах игроков, чтобы вообще не отображать их, когда линия обзора к ним заблокирована другой геометрией. Это может или не может помочь с вашей работой также, но это предотвратит многие взломы стен.