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

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

2 ответа

Решение

То, что вы просите, очень трудно выполнить, правильно.

Многие отметят, что SecureString Класс может быть использован для хранения строк, которые в безопасности в памяти. Есть много предостережений при использовании безопасной строки.

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

Здесь я действительно стремлюсь к тому, чтобы защитить память процесса от кого-то, кто имеет права администратора на коробке, более или менее невозможно, и.NET Framework усложняет этот вопрос. CLR предназначен для управления памятью, что может противоречить вашим потребностям в явном управлении памятью.

Попробуйте использовать класс SecureString!

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

Другие вопросы по тегам