標籤:blog http io ar 使用 sp 檔案 資料 on
對於DLL,Eazfuscator.NET預設不會混淆化任何公用成員,因為類庫的公用成員很有可能被外界調用,而對於EXE的程式集,所有類型都可能被混淆化。注意上面這句話有一個“可能”,因為Eazfuscator.NET會智能得判定一個成員是否該被混淆化。比如某些可序列化類別型的名稱是不被混淆化的,還有WPF程式用到的資料繫結可能會影響某些類型屬性名稱的混淆化。
當然Eazfuscator.NET會讀取.NET中已經定義的一些特性來供開發人員自訂一些選項,比如上述的公用成員的混淆化可以通過System.Reflection命名空間中的ObfuscateAssemblyAttribute特性來設定,這個特性在.NET 2.0就有了。建構函式有一個參數:assemblyIsPrivate,為True的話所有成員都(可能)會被混淆化。為False的話公用成員不會被混淆化。
所以如果不想讓Eazfuscator.NET混淆化EXE程式集中的公用成員,那麼需加入下方代碼:
using System.Reflection; [assembly: ObfuscateAssemblyAttribute(false)]
其次,即便是程式集的公用成員會被混淆化,還可以對部分類型進行更細緻的混淆化設定。使用System.Reflection命名空間中的ObfuscationAttribute特性。
比如禁止對所有公用枚舉實值型別和其成員進行混淆化:
using System.Reflection; [assembly: Obfuscation(Feature ="Apply to type * when public and enum: renaming", Exclude =true, ApplyToMembers =true)]
甚至還可以針對某一個類型,比如不對程式集當中的Mgen.MyClass類型進行任何混淆化:
using System.Reflection; [assembly: Obfuscation(Feature ="Apply to type Mgen.MyClass: renaming", Exclude =true, ApplyToMembers =true)]
在實際運用中還有一些需要說明的,尤其是WPF/Silverlight/WinRT這種用到XAML資料繫結或其他依靠反射來定義屬性值的方式(如Markup Extension)。此時則需要注意RESX資源類型不應該被混淆化,Visual Studio中建立的RESX資源類型預設都是internal修飾符的,這樣Eazfuscator.NET會混淆化RESX資源類型產生的屬性名稱。你可以聲明[assembly: ObfuscateAssemblyAttribute(false)],然後把RESX的修飾符改成Public:
或者使用Obfuscation特性來排除RESX類型的混淆化,當然第一種方法最方便。
另外有些環境可以沒有ObfuscateAssemblyAttribute和ObfuscationAttribute類型的定義,那麼可以複製Eazfuscator.NET安裝目錄下的Code Snippets檔案夾內相應類型的定義(提供C#和VB.NET版本)。當然使用者也完全可以自己定義,只要名稱和.NET中的一致便可以。
另外還曾寫過一些關於Easfuscator.NET的文章,可以參考:
Eazfuscator.NET 3.3中屬性的特性問題
Eazfuscator.NET 3.3中枚舉的處理
Eazfuscator.NET 3.3:對WPF ViewModel類型定義的處理
最後更多詳細的資訊,建議參考Eazfuscator.NET的協助文檔,講的很詳細的!
【轉】Eazfuscator.NET 3.3中混淆化需要注意的一些問題