2013-02-19 59 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