2013-02-19 58 views
1

是否有可能阻止某人使用Reflection来获取内部类变量的值?防止反射访问.NET中的内部字段

我有一个内部(VB中的朋友)类级变量,只有当调用者知道密码时才应该可以访问它。有一个方法公开了这个接受密码的变量,但可以直接使用Reflection来访问变量。我可以防止这种情况发生吗?

进一步的细节,可能是黑客这个变量的代码作为插件加载到主应用程序。

+1

请记住,无论您的保护是什么,有一种方法可以绕过它。 – 2013-02-19 21:18:44

回答

3

你可以通过obfuscating的源代码使反射更难(但并非不可能)。这大多会将代码中使用的名称更改为难以猜测的难以辨认的名称。但是,它没有提供任何保证,任何确定的程序员都可以找到这些名称并反映他/她想要的全部内容。

或者,您可以通过在非.NET语言(如非托管C++)中实现代码的一部分(整个类)来进行反射。例如,在mscorlibInternalGetHashCode方法是not implemented in managed code,所以无法反映它的工作原理。

您可以使用PInvoke从托管代码调用您的非托管功能。

+0

我正在考虑将该特定类放入第二个程序集并对其进行混淆,但是我意识到它不会完全防止反射提示。 – 2013-02-19 21:20:04