Как я могу избежать чит-движка, чтобы увидеть мои строки во время выполнения
Я играл с CheatEngine и увидел, что он может просматривать всю мою строку в клиентском приложении. Интересно, что мне делать, чтобы чит-движок не видел мою строку во время выполнения. Я испробовал все известные мне подходы, но всякий раз, когда у меня есть строка, CheatEngine может ее просмотреть. Я хотел бы предотвратить это, или, по крайней мере, CheatEngine визуализирует вместо этого зашифрованные строки.
2 ответа
То, что вы просите, очень трудно выполнить, правильно.
Многие отметят, что SecureString
Класс может быть использован для хранения строк, которые в безопасности в памяти. Есть много предостережений при использовании безопасной строки.
- Вы должны создать это безопасно. Если у вас уже есть
string
Вы можете просто скопировать его в SecureString, зацикливая каждый символ. Это ничего не делает, хотя, потому что оригинальная строка все еще там. Это может привести к сборке мусора позже, но сборка мусора не означает, что память строки обнуляется. Вы можете использовать небезопасный код или вызов платформы для обнуления строки в CLR. Однако, если ваша строка интернирована, вы можете в конечном итоге нарушить вашу программу. - Допустим, вы смогли создать
SecureString
надежно, и убедитесь, что источник защищенной строки обнуляется. Вы не можете сделать многое сSecureString
, Не многие API могут с ними что-то делать. В какой-то момент вам нужно преобразовать их обратно в простую старую строку, использовать строку и обнулить ее. Если базовый API делает что-то небезопасное, например, делает его копию, вы не сможете узнать, где находится копия. И в течение этого короткого промежутка времени, когда в памяти существует простая старая строка, механизм, который постоянно следит за памятью вашего процесса, может захватить ее.
Здесь я действительно стремлюсь к тому, чтобы защитить память процесса от кого-то, кто имеет права администратора на коробке, более или менее невозможно, и.NET Framework усложняет этот вопрос. CLR предназначен для управления памятью, что может противоречить вашим потребностям в явном управлении памятью.
Попробуйте использовать класс SecureString!
Представляет текст, который должен быть конфиденциальным. Текст зашифрован для конфиденциальности при использовании и удален из памяти компьютера, когда он больше не нужен. Этот класс не может быть унаследован.