Dotfuscator 簡介
作為一種高級語言,c# 類庫很容易被 .NET Reflector 這樣的工具反編譯。攻擊者很容易從代碼中找到數據庫連接方式,加解密方法等重要信息。使用 dnspy 這樣的工具甚至可以隨意修改類庫,下斷點進行調試。
所以我們需要用 Dotfuscator 等工具對代碼進行混淆。
Dotfuscator 使用方法:https://www.preemptive.com/dotfuscator/pro/userguide/en/index.html
Dotfuscator 使用流程
1 在 Input 中選擇需要輸入的類庫(這些類庫的依賴項必須在文件所在目錄)
2 在 Settings 中設置臨時目錄和輸出目錄。
3 合理設置混淆參數(見下文)。
4 保存工程文件,方便下次使用。
5 開始混淆,在輸出目錄獲取混淆后的類庫,在反編譯軟件中驗證混淆結果。
Dotfuscator 的保護措施
第一層保護:模糊轉換 ,在反編譯后增加閱讀難度。(包括:Renaming, Control Flow, String Encryption)
第二層保護:運行時檢測,防止他人篡改程序(包括:Tamper Check , Debug Check , Root Check , Shelf Life Check)(本文不作介紹)
其他保護:Removal , Watermarking(本文不作介紹)
Renaming
對命名空間,類,方法,字段進行重命名以增加閱讀難度。
對於賣控件的公司來說,需要勾選 Library 選項,以防止 public 的類被重命名。如果類被重命名了那么其他人將無法調用這個類庫。
對於賣軟件的公司來說,需要取消勾選 Library 選項,這樣所有的類都會被重命名。
類的屬性往往無法混淆,如果需要混淆的話,盡量使用方法代替屬性。
Dotfuscator 利用了 c# 的重載特效,將完全不同的方法重命名為同一個方法,被稱為 Overload Induction。
勾選 Use Enhanced Overload Induction 。
右側的 Renaming Scheme 建議選擇 Unprintable ,會將把類名重命名為一些不可打印的字符。這些字符無法再顯示器上顯示出來。
Overload Induction 這項技術不適用於 xaml 代碼,使用反射和指定入口點的配置文件的情況。(wpf 控件大量使用 xaml ,不能進行 overload induction)
如果勾選了 Use Enhanced Overload Induction 選項時,需要將不需要進行重命名的類庫在 Exclude 界面中勾選以排除重命名列表。
Control Flow
Control Flow 會打亂方法的執行順序,增加大量無用的分支,以增加閱讀難度。但有時會影響到性能。如果對性能有要求的話可以將類庫排除出列表。
String Encryption
場景:在軟件的某個位置彈窗:“您的軟件是盜版的!”。
對軟件反編譯后尋找這個字符串后可以很方便的定位到程序的關鍵位置,通過篡改程序可以很方便的繞過核心的授權機制。
如果對字符串進行加密,反編譯后將找不到這段話。
需要強調的是,對於 const string 常量,字符串加密功能將不起作用。所以建議在編寫代碼時將重要的常量改為 static string !!!!!!!!!!!!!!!!!!!!!
首先需要將 Disable String Encryption 改為 No (默認為 Yes)
然后將需要混淆字符串的類庫勾選
部分勾選
Dotfuscator 所有的勾選都可以精確到類,方法和字段。
可以使用篩選器篩選出符合要求的匹配對象。這樣在編寫代碼時可以對特定的類采用相似的命名規則以滿足篩選器。(篩選器支持正則表達式)
具體使用方法見官方文檔:https://www.preemptive.com/dotfuscator/pro/userguide/en/index.html
使用批處理進行混淆
https://www.cnblogs.com/aitong/p/10627930.html
故障處理
我在更換電腦時碰到過一個報錯:
Could not find a compatible version of ildasm to run on assembly D:\Dotfuscator\1.exe. This assembly was originally built with .NET Framework v4.0.30319. Build Error.
可以參考這篇文章:https://blog.csdn.net/winnyrain/article/details/17141331?utm_source=copy
在 Project Properties 中添加兩組配置:
ILASM_v4.0.30319
C:\Windows\Microsoft.NET\Framework\v4.0.30319\ilasm.exe
ILDASM_v4.0.30319
C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\ildasm.exe