在 Visual Studio 中使用 Dotfuscator 進行混淆
Dotfuscator 是 Visual Studio 自帶的混淆工具(Dotfuscator Community Edition,簡稱 CE)。它可以混淆 C# 類庫(DLL)或應用程序(EXE),防止代碼被反編譯。
📌 一、安裝 Dotfuscator
1. 檢查是否已安裝
- 在 Visual Studio 工具(Tools)→ 擴展和更新(Extensions and Updates) 中搜索
Dotfuscator
。 - 如果已安裝,跳過安裝步驟。
- 如果沒有,下載 Dotfuscator Community Edition:
- 官方安裝地址
- 或在 Visual Studio Installer 里搜索
Dotfuscator
進行安裝。
📌 二、在 Visual Studio 中啟用 Dotfuscator
方法 1:使用 Dotfuscator GUI 手動混淆
-
打開 Dotfuscator
- 在 VS 菜單欄 → 工具(Tools)→ PreEmptive Protection - Dotfuscator 里找到 Dotfuscator。
- 啟動后,點擊 New Project(新建項目)。
-
添加要混淆的 DLL
- 在 Dotfuscator GUI 界面,點擊 “Input” → “Add Assembly”,選擇
bin\Release\YourLibrary.dll
。
- 在 Dotfuscator GUI 界面,點擊 “Input” → “Add Assembly”,選擇
-
配置混淆規則
- 選中你的 DLL,在 “Renaming”(重命名) 選項里:
- 啟用
Obfuscate
(混淆變量、方法、類名)。 - 勾選
Control Flow
(控制流混淆)。 - 勾選
String Encryption
(字符串加密)。
- 啟用
- 選中你的 DLL,在 “Renaming”(重命名) 選項里:
-
運行混淆
- 點擊 “Build” → “Run” 進行混淆。
- 混淆后的 DLL 在
Dotfuscated
目錄下。
方法 2:在 Visual Studio Release 模式下自動混淆
可以讓 VS 在 Release 版本編譯后自動執行 Dotfuscator。
-
在項目文件夾創建 Dotfuscator 配置文件
- 在
bin\Release
目錄下新建dotfuscator.xml
:
說明:<dotfuscator><input assembly="YourLibrary.dll"/><rename enable="true"/><controlFlow enable="true"/><stringEncryption enable="true"/><antiDebug enable="true"/><antiTamper enable="true"/><output directory="Obfuscated"/> </dotfuscator>
rename="true"
→ 變量、類、方法名混淆controlFlow="true"
→ 代碼邏輯混淆stringEncryption="true"
→ 字符串加密antiDebug="true"
→ 防調試antiTamper="true"
→ 防篡改- 混淆后的 DLL 存在
bin\Release\Obfuscated
- 在
-
排除特定類/方法
- 在
dotfuscator.xml
中添加:
這樣<exclusions><type name="YourNamespace.YourClass"/><method name="YourMethod"/> </exclusions>
YourNamespace.YourClass
和YourMethod
不會被混淆。
- 在
-
在 Visual Studio 配置 Release 事件
- 右鍵 項目 → 屬性(Properties) → 生成(Build Events)。
- 在 生成后事件(Post-Build Event) 添加:
"C:\Program Files (x86)\PreEmptive\DotfuscatorCE\dotfuscatorCLI.exe" "bin\Release\dotfuscator.xml"
- 這樣,每次 Release 編譯 時,Dotfuscator 會自動混淆 DLL。
📌 三、測試混淆效果
-
嘗試反編譯 DLL
- 使用
ILSpy
或dnSpy
打開bin\Release\YourLibrary.dll
和bin\Release\Obfuscated\YourLibrary.dll
。 - 觀察 類名、方法名、字符串 是否被混淆。
- 使用
-
運行測試
- 如果應用程序需要調用混淆后的 DLL,確保
Obfuscated
目錄中的 DLL 被正確引用。
- 如果應用程序需要調用混淆后的 DLL,確保
📌 四、其他高級混淆
如果你需要更強的保護:
- 付費版 Dotfuscator 提供
Anti-Debug
、Anti-Tamper
保護。 - 可以嘗試 ConfuserEx 或 .NET Reactor。
📌 總結
方法 | 適用場景 | 是否自動化 | 難度 |
---|---|---|---|
手動 GUI | 一次性混淆 | ? 需要手動運行 | ?? |
Post-Build 事件 | 每次 Release 自動混淆 | ? 自動混淆 | ??? |