C# const/readonly与作弊引擎之类的程序

C# const/readonly与作弊引擎之类的程序,c#,memory,constants,readonly,C#,Memory,Constants,Readonly,我有一个程序,在该程序中有一些变量(用户名和“特权级别”),只有在用户登录时才会更改。有没有办法在程序运行时从内存编辑等方面“保护”这些变量,但如果用户使用其他用户名登录,程序仍然可以更改它们 我认为使用const或readonly是可行的(尚未测试),但是当用户重新登录时,是否仍然可以更改它们 此外,是否可以对程序中使用的字符串进行散列/加密,以便用户无法通过搜索内存(即使用作弊引擎)找到它们?没有可靠的方法可以做到这一点。通过加密这些东西,你可以让它变得更难,但绝不是不可能的。最糟糕的情况是

我有一个程序,在该程序中有一些变量(用户名和“特权级别”),只有在用户登录时才会更改。有没有办法在程序运行时从内存编辑等方面“保护”这些变量,但如果用户使用其他用户名登录,程序仍然可以更改它们

我认为使用const或readonly是可行的(尚未测试),但是当用户重新登录时,是否仍然可以更改它们


此外,是否可以对程序中使用的字符串进行散列/加密,以便用户无法通过搜索内存(即使用作弊引擎)找到它们?

没有可靠的方法可以做到这一点。通过加密这些东西,你可以让它变得更难,但绝不是不可能的。最糟糕的情况是,用户可以附加调试器并直接更改内存。

您不能修改常量(ever)或只读(初始化后)变量,因此这将无法工作

最好的选择可能是将创建/初始化/设置这些变量的逻辑包装到登录过程中设置的干净方法和/或属性中。这将隔离代码,因此至少易于理解


至于加密字符串,您可以在运行时使用。在编译时,您可以对代码进行模糊处理(许多模糊处理程序支持字符串加密)。

如果软件和用户凭据正在用户的计算机上运行,则无法阻止用户更改值

如果凭据和访问权限存储在远程服务器上,则可以使用该服务器,并让用户仅存储在任意时间段后过期的哈希令牌。使用该令牌作为查找,从服务器检索用户的配置文件信息

您仍然会遇到问题,因为客户端完成的任何操作都可能被操纵/黑客攻击。如果您将所有逻辑都放在一个中央服务器上,那么您就可以更自信地认为不会出现问题,但是系统的性能会受到影响

您需要权衡中央服务器在安全性和性能方面的利弊,并选择最适合您的平衡。

请记住,程序是代表用户运行的。一个程序所能做的一切都是运行它的用户所不能做的。如果你可以编写并运行一个程序来改变一个变量,那么用户显然可以改变这个变量;您的程序只能执行运行它的用户可以执行的操作。