翻譯|使用教程|編輯:李顯亮|2019-06-05 11:06:29.640|閱讀 504 次
概述:Dotfuscator提供了一種應用程序保護的多層方法。這些層中的每一層都提供了一個重要的整體保護策略。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
Dotfuscator是一個.NET的Obfuscator。它提供企業級的應用程序保護,大大降低了盜版、知識產權盜竊和篡改的風險。Dotfuscator的分層混淆、加密、水印、自動失效、防調試、防篡改、報警和防御技術,為世界各地成千上萬的應用程序提供保護。
Dotfuscator提供了一種應用程序保護的多層方法。這些層中的每一層都提供了一個重要的整體保護策略。如果一層受到損害,其他層繼續提供有效保護,使攻擊者更難以實現其目標。并且不僅有多個層,而且每個層都具有比其他混淆產品使用的簡單技術更強大的高級功能。
從本文開始我們一起了解Dotfuscator如何對應用程序進行多層保護,層層遞進,大致可分為:
Dotfuscator能夠將所有類、方法和字段重命名為短名稱。這使得反編譯輸出更加難以理解,并且使得生成的可執行文件的大小更小。
大多數商業混淆器使用一種重命名技術,該技術應用的普通標識符可以短至單個字符。當obfuscator處理代碼時,它選擇下一個可用的平凡標識符進行替換。這個看似簡單的重命名方案有一個關鍵屬性:它是不可逆轉的。在保留程序邏輯的同時,這些名稱變得毫無意義,阻礙了所有理解代碼的嘗試。
Dotfuscator使用了一種更深層次的混淆技術,它是為Dotfuscator開發的,并通過先發制人的解決方案獲得了專利,稱為過載感應?。重載歸納不是為每個舊名稱替換一個新名稱,而是將盡可能多的方法重命名為相同的名稱。下面的簡單例子說明了過載感應技術的威力:
混淆之前的原始源代碼:
private void CalcPayroll(SpecialList employeeGroup) { while (employeeGroup.HasMore()) { employee = employeeGroup.GetNext(true); employee.UpdateSalary(); DistributeCheck(employee); } }
重載感應混淆后的反向工程源代碼:
private void a(a b) { while (b.a()) { a = b.a(true); a.a(); a(a); } }
實例表明,代碼被混淆和壓縮,這是重命名的一個積極的副作用。通過保存字符串堆條目,重命名還可以節省空間。這種方法有著明顯的優點在于:
Overload-Induction的專利算法確定所有可能的重命名沖突,只有在安全的情況下才會引發方法重載。這個過程可以證明是不可逆的。換句話說,重構原始方法名稱關系是不可能的(即使再次運行重載誘導)。
Dotfuscator還通過允許將方法的返回類型或字段的類型用作確定方法或字段唯一性的標準,從而增強了超載誘導?。該特性允許在方法和字段重命名中最多增加15%的冗余。此外,由于在源語言(包括c#和Visual Basic)中通常不允許重載方法返回類型或字段類型,這進一步阻礙了反編譯器。
通常不會對包含任何XAML代碼的程序集執行過載誘導,因為運行時確定XAML和代碼如何鏈接的方式不同。因此,Use Enhanced Overload Induction選項不會更改此類程序集的任何內容。當使用任何類型的反射(包括XAML)、指定入口點的配置文件、其他應用程序調用的庫等時,重命名可能會出現問題。在重命名后對應用程序進行全面測試,以確保不存在此類問題,這一點非常重要。
假定庫模式已關閉,Dotfuscator將嘗試重命名它所能重命名的所有內容。反射的某些使用可能導致Dotfuscator在重命名時不更新對特定實體的所有引用。在下面的例子中,我們排除了四個類及其字段:
我們的應用程序通過反射查找這些類型和成員的名稱來引用它們。如果要重命名它們,應用程序將無法在運行時找到它們。因此,我們將它們排除在通過這些復選框重命名之外。
有時候,您可能需要為特定的編碼約定做出許多特定的排除。即使這樣,當開發人員添加更多遵循該約定的代碼時,他們也必須記住對新代碼進行另一個特定的排除。
對此的解決方案是自定義排除規則。使用前面的示例,假設我們計算出所有名稱以“Dungeon”結尾的類型,以及這些類型中的特定字段類型,都需要排除在重命名之外。與其創建一堆特定的排除,我們可以制定一個自定義規則:
我們使用Add Type按鈕添加了規則的根節點,并將其命名為.*Dungeon,并將正則表達式(regex)選項設置為true,以指示應該將該名稱視為正則表達式。因此,節點將匹配名稱以“Dungeon”結尾的類型。因為我們將Exclude類型(excludetype)設置為true,所以任何匹配此名稱的類型都將被排除在重命名之外。如果我們將該選項設置為false,那么匹配的類型將不會被排除在重命名之外——只包含由其子節點指定的成員。
然后,通過右鍵單擊根節點并選擇Add字段,我們添加了一個子節點。我們將這個節點命名為.*,并再次指出應該將其視為正則表達式。我們將規則限制為只覆蓋具有公共訪問修飾符的字段(通過設置+public),以及簽名為string[]的字段,因為在我們的場景中這兩個字段都是必需的。
配置好規則后,您可以選擇一個節點并單擊Preview按鈕,Dotfuscator將在左側的樹視圖中突出顯示與定制規則匹配的條目。在我們的示例中,我們預覽子節點,因此突出顯示匹配條件的字段。
內置規則是自定義的排除規則,非常普遍有用;我們默認包含它們,這樣用戶就不必重新實現它們。
例如,System.Web方法。服務屬性轉換為以下自定義規則:
Exclude all methods that are decorated with attributes from the System.Web.services namespace.
options選項卡上有許多重命名選項,包括應該使用什么重命名方案、是否引入顯式覆蓋以及其他許多選項。
— 持續更新中 —
如果你有任何問題或意見,可在下方評論區留言,點擊資源列表查看更多教程資源~
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn