Чтобы предотвратить взломы Cheat Engine, которые манипулируют значениями ваших переменных, вы должны скрыть эти значения. Обычно Cheat Engine используется для определения места в памяти интересных переменных (скажем, количества золота или уровня жизни или уровня улучшения способности), выполняя поиск известного значения упомянутой переменной, играя в большую часть игры и заставляя значение изменить, то Cheat Engine будет делать новый поиск из результатов предыдущего поиска нового значения. Это позволяет мошеннику увеличивать область памяти значения, теперь они могут изменять значение этой области памяти с помощью Cheat Engine.
Например, у меня 245 GOLD ... с Cheat Engine я делаю поиск 245 и нахожу много мест в памяти. Затем я играю еще немного и довожу свое золото до 314, затем я ищу в предыдущем результате поиска значение 314 и легко нахожу в памяти место, где хранится GOLD.
Способ предотвратить это - никогда не хранить реальное значение в ячейке памяти. Например, я храню значение в объекте, который должен вычислять реальное значение по требованию, когда это требуется. Итак, допустим, что у игрока 245 ЗОЛОТО. Если они выполняют поиск ячейки памяти со значением 245, они могут найти много, но ни одна из них не будет той ячейкой памяти, где на самом деле хранится значение золота, потому что вы не сохраняете значение 245 для золота. Когда игре нужно узнать, сколько золота, она спросит у объекта, который его оценивает, и рассчитает его по требованию.
Теперь возникает вопрос: как именно вы храните значение таким образом, чтобы оно не раскрывалось? Это становится немного сложнее и уродливее, и я уверен, что есть много способов сделать это. Что мне нравится делать - это хранить логический массив (или байтовый массив). Длина массива может быть любой, но допустим, что это 13. Тогда у вас есть счетчик, который представляет, сколько раз 13 входит в это фактическое значение. Таким образом, если мы хотим представить 245, тогда счетчик будет иметь значение 18. Теперь массив будет иметь все логические значения, установленные в true для оставшейся части 245/13 ... в основном, модуль. В данном случае это 11, поэтому первые 11 логических значений в массиве будут установлены в true, а остальные в false. Чтобы получить значение, все, что вам нужно сделать, это умножить счетчик на длину массива, а затем добавить 1 для каждого логического значения, установленного в true (останавливаясь на первом значении false). Теперь число 245 никогда не будет сохранено где-либо, и будет трудно найти место в памяти, которым нужно будет манипулировать, чтобы изменить количество золота. Возможно, вы захотите установить длину массива на разные размеры (возможно, случайным образом выбрать число в некотором разумном диапазоне) при создании этого объекта.
РЕДАКТИРОВАТЬ: Это полезно для многопользовательской и одиночной игры. Есть мошенничество, которое также может быть сделано в мультиплеере, где значения в пакетах могут быть изменены. Это потребует различных методов предотвращения, таких как подписывание каждого пакета.