Gremlin92
@Gremlin92
Целеустремленный

Защита переменных?

Вот например есть ли отличие в исполняемом файле программы если написать
public int var; //или
private int var;//или 
protected int var;

С точки зрения декомпиляции и реверс инжиниринга исполняемого файла? То есть если я напишу protected, переменная станет защищенной или нет от таких программ как art money?
  • Вопрос задан
  • 248 просмотров
Решения вопроса 2
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Вот зачем стоит учить ассемблер.
В нем тормозов нет!
Пишу куда хочу, читаю все что хочу!
Такие вот дела.

Что же до art money, она банально сканирует память, потом снова сканирует, находит что изменилось. И играется с этим значением.
Ответ написан
Комментировать
includedlibrary
@includedlibrary
Не станет. Обозначения protected/private нужны только для того, чтобы компилятор не давал программмисту, использующему ваш класс, менять значения переменных
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@dima20155
you don't choose c++. It chooses you
На английском эти ключевые слова (public, private, protected) называются Access specifiers.
https://en.cppreference.com/w/cpp/language/access
Думаю, становится очевидным для чего они из названия.

Если вы хотите скрыть значения от программи по типу Art Money (которая просто сканирует RAM), то вам нужно, каким-либо образом их зашифровать воспрепятствовать простому способу чтения вашей переменной из памяти.

Например, вы можете хранить не сами значения, а их хеш или, например, хранить их с определенным смещением (скажем, денег у вас в игре 100, а в переменной у вас хранится на 5x + 7 денег больше, просто чтобы запутать тех, кто захочет вас взломать). Можете также преобразовать число в строку и как-то хитро изменить (например реверсировать). Все эти способы несколько усложнят прямое чтение переменной из памяти, основываясь лишь на значении в GUI. Но вот ничто не мешает реверс-инженеру пойти и посмотреть что у вас сейчас на вершине стека сейчас у вашего процесса и таким образом понять где искать саму переменную, которая хранит количество денег в игре. Это, конечно же, в разы сложнее и снизит количество людей, которые смогу "взломать" вашу программу с помощью ArtMoney.

Чтобы ещё сильнее усложнить жизнь взломщикам можно вовсе вынести значение переменной из памяти (то есть копия значения у вас в памяти все ещё есть, но вот увеличение/уменьшение значения переменной происходит через посредника, например, сервер, базу данных, файл, subprocess. Возможно, прожженные игроделы подскажут и более простые/интересные способы.
Ответ написан
Комментировать
mayton2019
@mayton2019
Bigdata Engineer
Эти магические слова такие как public/protected/private пришли из ООП а не из инфо-безопасности. Хотя наверное есть положительное влияние от их применения. Хотя-бы с точки зрения ролей и отвественностей в объектах класса. И действуют эти слова обычно в фазе компилляции для С++.

Рантайм - является более опасным даже без реверс-инжинеринга.
Ответ написан
Комментировать
Adamos
@Adamos
Боюсь, предыдущие ответы не развеивают магических фантазий, попробую это сделать.
Private означает инструкцию компилятору: при сборке проверить, что нигде в коде нет обращения к этому члену вне этого класса.
Protected - аналогичная инструкция, но ограничение расширяется на наследников этого класса.
Public - отсутствие таких проверок.

Ни к какой защите информации в рантайме эти вещи не имеют отношения от слова вообще, машинный код не меняется ни на байт.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы