Const/readonly против программ, таких как Cheat Engine

74
7

У меня есть программа, и в этой программе есть несколько переменных (имя пользователя и "уровень привилегий" ), которые изменяются только при входе пользователя в систему. Есть ли способ "защитить" эти переменные от редактирования и т.д. Во время работы программы, но программа все еще может их изменить, если пользователь входит в систему с другим именем пользователя.


Я думал, что это будет работать (не проверено), чтобы использовать либо const, либо readonly, но все же можно изменить их, когда пользователь перегружает?


Кроме того, возможно ли использовать хеш/шифровать строки, используемые в программе, чтобы пользователь не смог их найти, выполнив поиск в памяти (т.е. используя Cheat Engine)?

спросил(а) 2021-01-28T00:07:10+03:00 1 месяц назад
1
Решение
115

Если учетные данные программного обеспечения и пользователя запущены на компьютере пользователя, невозможно, чтобы пользователь не мог изменять значения.


Если учетные данные и доступ хранятся на удаленном сервере, вы можете использовать этот сервер и хранить только хэшированный токен, который истекает через произвольный период времени. Используйте этот токен в качестве поиска, чтобы получить информацию о профиле пользователя с сервера.

Вы все равно столкнетесь с проблемами, потому что все, что делается на стороне клиента, можно манипулировать/взломать. Если вы сохраните всю свою логику на центральном сервере, вы можете быть более уверенным в том, что все не будет взломано, однако производительность вашей системы будет страдать.


Вам нужно взвесить плюсы и минусы центрального сервера для обеспечения безопасности и производительности и выбрать баланс, который наилучшим образом подходит для вас.

ответил(а) 2021-01-28T00:07:10+03:00 1 месяц назад
76

Вы не можете изменить переменную const (ever) или readonly (после инициализации), чтобы она не работала.


Лучшим вариантом, вероятно, будет объединение логики, которая создает/инициализирует/устанавливает эти переменные в чистый метод и/или свойство, заданное во время процесса входа в систему. Это будет изолировать этот код, поэтому, по крайней мере, легко следовать.

Что касается шифрования строк, вы можете использовать SecureString для обработки этой цели во время выполнения. Во время компиляции вы можете запутать свой код (многие обфускаторы поддерживают строковое шифрование).

ответил(а) 2021-01-28T00:07:10+03:00 1 месяц назад
43

Там нет надежного способа, которым вы могли бы. Зашифровав материал, вы можете просто сделать его более трудным, но никогда невозможным. В худшем случае пользователь может подключить отладчик и напрямую изменить память.

ответил(а) 2021-01-28T00:07:10+03:00 1 месяц назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема