Почему при взломе константной переменной я не получаю ошибку?

Рейтинг: 1Ответов: 1Опубликовано: 31.05.2023

Если я создам переменную const int i = 0;, а затем изменить ее через i=1;, то я получу ошибку. Однако если я скомпилирую программу в exe, и изменю это константное значение через cheat engine или другой отладчик, то я не получу никакой ошибки. Почему так?

Ответы

▲ 2Принят

Из learn.microsoft.com:

Ключевое constслово указывает, что значение переменной является константой, и указывает компилятору запретить программисту изменить его.

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

В результате работы для данной переменной выдается место в памяти. Если всю память приложения просканировать, затем отыскать данную переменную, а затем изменить значение по адресу в этой памяти, то переменная измениться (что собственно и делает Cheat Engine).

Стоит вопрос, а как можно защитить переменные от переписывания?

  1. Можно создать методы проверки целостности данных, проверяя те же константы от других констант
  2. Обфускация кода, чтобы затрдунить поиск переменных в памяти в рантайме
  3. Мониторинг внешних программ - выявляйте процесс Cheat engine и блокируйте работу программы (самый плохой метод, так как каждый может написать собственный софт для изменения переменных в памяти подобное Cheat engine)

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