Щоб запобігти основним хакерським системам Cheat Engine, які маніпулюють значеннями змінних, вам доведеться приховувати ці значення. Зазвичай Cheat Engine використовується для визначення місця в пам'яті цікавих змінних (скажімо, кількості золота чи життя чи рівня модернізації здатності), здійснюючи пошук відомого значення вказаної змінної, граючи більше в гру та спричиняючи значення для зміни, тоді Cheat Engine здійснить новий пошук за результатами попереднього пошуку нового значення. Це дозволяє шахраю збільшити масштаб місця в пам'яті значення, тепер вони можуть змінити значення цього місця в пам'яті за допомогою Cheat Engine.
Наприклад, у мене 245 GOLD ... за допомогою Cheat Engine я шукаю 245 і знаходжу багато місць пам'яті. Потім я граю ще трохи і підношу золото до 314, потім шукаю попередній результат пошуку для значення 314 і легко знаходжу місце пам'яті, де зберігається GOLD.
Спосіб запобігти цьому - ніколи не зберігати реальне значення в пам'яті. Наприклад, я зберігаю значення в об'єкті, який повинен обчислити реальне значення за потребою, коли воно вимагається. Тож скажемо, що у гравця 245 ЗОЛОТИ. Якщо вони роблять пошук місця пам'яті зі значенням 245, вони можуть знайти багато, але жодне з них не буде місцем пам'яті, де фактично зберігається значення золота, тобто тому, що ви не зберігаєте значення 245 для золота. Коли грі потрібно знати, скільки золота, вона запитає предмет, який утримує для неї значення, який обчислить її на вимогу.
Отже, питання тепер: як саме ви зберігаєте значення таким чином, щоб не розкривати його? Це стає трохи хитро і потворно, і я впевнений, що існує багато способів, як це можна зробити. Що я люблю робити - це зберігати булівський масив (або байтовий масив). Довжина масиву може бути будь-якою, але скажімо, вона дорівнює 13. Тоді у вас є лічильник, який представляє, скільки разів 13 переходить у це фактичне значення. Отже, якщо ми хочемо представити 245, то лічильник мав би значення 18. Тепер у масиві буде всі булеві значення встановлені на істинне для решти 245/13 ... в основному модуль. У цьому випадку це 11, тому перші 11 булевих масивів у масиві будуть встановлені на true, а решта - на false. Щоб отримати значення, все, що вам потрібно зробити, - помножити лічильник на довжину масиву, а потім додати 1 для кожного булевого набору на true (зупиняючись на першому false). Тепер число 245 ніде не зберігатиметься, і важко буде знайти місце пам'яті, яке потрібно маніпулювати, щоб змінити кількість золота. Ви можете встановити довжину масиву на різні розміри (можливо, випадковим чином обрати число між деяким розумним діапазоном), коли цей об’єкт створений.
EDIT: Це корисно для багатокористувацьких та одиночних гравців. Існує обман, який також можна зробити в мультиплеєрі, де значення в пакетах можуть бути змінені. Для цього потрібні різні методи запобігання, як-от підписання кожного пакету.