我在玩 CheatEngine,发现它可以在客户端应用程序中查看我的所有字符串。我想知道我应该怎么做才能让作弊引擎在运行时看不到我的字符串。我尝试了所有我知道的方法,但只要我有一个字符串,CheatEngine 就可以查看它。我想防止这种情况发生,或者至少 CheatEngine 将加密字符串可视化。
问问题
1599 次
2 回答
4
你所要求的很难正确地完成。
许多人会指出,SecureString
该类可用于保持内存安全的字符串。使用安全字符串有很多注意事项。
- 您需要安全地创建它。如果您已经有一个
string
,您可以通过遍历每个字符将其复制到 SecureString 中。但这并没有完成任何事情,因为原始字符串仍然存在。它可能稍后会被垃圾收集,但垃圾收集并不意味着字符串的内存被清零。您可以使用不安全代码或平台调用将 CLR 中的字符串归零。但是,如果您的字符串被实习,您最终可能会破坏您的程序。 - 假设您能够
SecureString
安全地创建一个,并确保安全字符串的来源为零。你真的不能用SecureString
. 没有多少 API 可以用它们做任何事情。在某些时候,您需要将它们转换回普通的旧字符串,使用该字符串并将其归零。如果底层 API 做了任何不安全的事情,比如复制它,那么您将无法知道副本在哪里。在内存中存在普通旧字符串的那段短暂时间内,不断监视进程内存的引擎可以抓取它。
我在这里真正要强调的是,保护进程的内存不受对机器具有管理权限的人的影响或多或少是不可能的,而 .NET Framework 使这件事变得复杂。CLR 旨在为您管理内存,这可能与您对显式内存管理的需求背道而驰。
于 2014-12-18T14:06:42.300 回答
2
尝试使用SecureString类!
表示应保密的文本。文本在使用时被加密以保护隐私,并在不再需要时从计算机内存中删除。这个类不能被继承。
于 2014-12-18T13:47:13.543 回答