我有一个程序,在那个程序中有一些变量(用户名和“特权级别”)只有在用户登录时才会改变。有没有办法在程序运行时从内存编辑等中“保护”这些变量,但是如果用户使用其他用户名登录,程序仍然能够更改它们。
我认为使用 const 或 readonly 会起作用(尚未测试),但是当用户重新登录时仍然可以更改它们吗?
此外,是否可以对程序中使用的字符串进行散列/加密,以便用户无法通过搜索内存(即使用作弊引擎)找到它们?
如果软件和用户凭证正在用户的机器上运行,则不可能阻止用户更改值。
如果凭据和访问权限存储在远程服务器上,您可以使用该服务器并让用户仅存储在任意时间段后过期的散列令牌。使用该令牌作为查找从服务器检索用户的配置文件信息。
You'll still run into issues because anything that is done client-side can be manipulated/hacked. If you keep all of your logic on a central server, you can be more confident that things won't be cracked, however your system's performance will suffer.
You need to weigh the pros and cons of a central server for security and performance and choose a balance that fits best for you.
您不能修改 const (ever) 或 readonly (在初始化之后) 变量,因此这将不起作用。
最好的选择可能是将创建/初始化/设置这些变量的逻辑包装到在登录过程中设置的干净方法和/或属性中。这将隔离该代码,因此至少易于遵循。
至于加密字符串 - 您可以在运行时使用SecureString来处理该目的。在编译时,您可以混淆您的代码(许多混淆器支持字符串加密)。
没有可靠的方法可以做到这一点。通过加密这些东西,你可以让它变得更难,但绝不是不可能的。最坏的情况是,用户可以附加调试器并直接更改内存。