Почему при взломе константной переменной я не получаю ошибку?
Если я создам переменную const int i = 0;, а затем изменить ее через i=1;, то я получу ошибку. Однако если я скомпилирую программу в exe, и изменю это константное значение через cheat engine или другой отладчик, то я не получу никакой ошибки. Почему так?
Ответы (1 шт):
Ключевое
constслово указывает, что значение переменной является константой, и указывает компилятору запретить программисту изменить его.
Т.е. другими словами, использование переменной с ключевым словом const запрещает изменять данную переменную на уровне компиляции программы.
В результате работы для данной переменной выдается место в памяти. Если всю память приложения просканировать, затем отыскать данную переменную, а затем изменить значение по адресу в этой памяти, то переменная измениться (что собственно и делает Cheat Engine).
Стоит вопрос, а как можно защитить переменные от переписывания?
- Можно создать методы проверки целостности данных, проверяя те же константы от других констант
- Обфускация кода, чтобы затрдунить поиск переменных в памяти в рантайме
- Мониторинг внешних программ - выявляйте процесс
Cheat engineи блокируйте работу программы (самый плохой метод, так как каждый может написать собственный софт для изменения переменных в памяти подобноеCheat engine)
Это малая часть того, что Я могу предложить. На самом деле методов защиты памяти существует много, это достаточно глубокая тема и совершенно другой вопрос, надеюсь это даст вам наводку на следующие действия...