我想混淆我的彙編文件(* .dll,* .exe)Dotfuscator。我的問題是如果我這樣做,我仍然可以使用它們的原始名稱(我是指混淆之前的名稱)在這些程序集中的類和類型,並使用System.Reflection
方法來處理它們嗎?混淆彙編和反射
如果您需要更詳細,請告訴我
我想混淆我的彙編文件(* .dll,* .exe)Dotfuscator。我的問題是如果我這樣做,我仍然可以使用它們的原始名稱(我是指混淆之前的名稱)在這些程序集中的類和類型,並使用System.Reflection
方法來處理它們嗎?混淆彙編和反射
如果您需要更詳細,請告訴我
混淆是反射會導致你一些問題。即使您採取建議以使用選項不混淆公共方法,一些反映的代碼可能會調用私有方法。問題在於混淆會改變您可能需要保持不變的某些代碼的名稱。
如果你知道或能找到易於與反射使用的地區可以使用
[global::System.Reflection.Obfuscation(Exclude=true, Feature="renaming")]
這將告訴混淆保持名稱。
與反思運行混淆需要更多的測試,這是肯定的,但仍然有可能...
您可以在混淆集中使用System.Reflection
,但由於一些模糊的點是在裝配一切重命名爲隨機的,毫無意義的事情,你不能在非混淆的程序集中對相同的名稱和標識符進行反射。如果你想對混淆程序集進行反射,你需要以不依賴於什麼類型和成員命名的方式來進行反射。
例如在此閱讀http://msdn.microsoft.com/en-us/library/ms227298(v=vs.80).aspx有一個「庫模式」可禁用公共成員的模糊處理。另外,你可能無法訪問這些方法。有一個屬性來控制類型級別的混淆:http://msdn.microsoft.com/en-us/library/ms227281(v=vs.80).aspx
您可以創建自己的私人地圖,擺脫舊的新名稱。 映射器必須寫一種磁盤/分貝與以下結構的表: 模塊(可執行程序),索引,OriginalType,ObfuscatedType
創建基於參數兩種模式操作「映射器」控制檯應用程序: 應用將獲得作爲參數的可執行文件路徑
現在你需要一個函數來從原始名稱getObfuscatedName,你就完成了。
注意,該解決方案將不會修剪爲類型的數量會發生變化,指標不再匹配
之間OriginalAssembly.GetTypes()
和
ObfuscatedAssembly.GetTypes()
通常公衆成員不會混淆工作(或至少有一個選項不會模糊公衆成員) – xanatos
@asbjornu - 是否有任何方法反思和避免使用成員名稱? – amirhosseinab
解決方案(或不)會創建一個靜態類,它具有一個System.Type字典,然後當您需要使用反射時,從此字典中獲取該類型。所以不管你在obsfucator之後的方法/類是哪個名字,你仍然有這個參考。當然,如果你的程序集中有不可數的類型,那麼最終會出現一個沒有任何設計模式靜態類的巨人,這可能會導致應用程序中的性能問題以及未處理的異常。 –