.net 混淆工具
obfuscation tools
.net 社區有很多混淆工具, 比如這個清單: https://github.com/NotPrab/.NET-Obfuscator
比較有名的商業工具有 .NET REACTOR https://www.eziriz.com/,
開源軟件中, 最受歡迎的有:
- obfuscar https://github.com/obfuscar/obfuscar
- 老版 ConfuserEx https://github.com/yck1509/ConfuserEx
- (推薦)新版 ConfuserEx2 https://github.com/mkaring/ConfuserEx
obfuscar 驗證 (棄用)
obfuscar 使用很簡單, 但 github 上沒有預編譯的版本, 需要通過源碼編譯 Obfuscar.Console.exe 程序.
參考官方文檔定制我們的混淆設置, 比如下面就是一個簡單的示例.
Obfuscar.xml 文件
<?xml version="1.0" encoding="utf-8" ?>
<Obfuscator>
<!--輸入路徑-->
<Var name="InPath" value="." />
<!--輸出路徑:加密混淆過的路徑-->
<Var name="OutPath" value=".\Obfuscator_Output" />
<!--混淆代碼的參數-->
<Var name="ReuseNames" value="false" />
<Var name="HideStrings" value="false" />
<Var name="KeepPublicApi" value="false" />
<Var name="HidePrivateApi" value="true" />
<!--要混淆的模塊-->
<Module file="$(InPath)\test.exe">
<!--SkipType跳過指定的類 Program是Main所在的類名-->
<SkipType name="Program" />
<!--SkipMethod 跳過指定的方法-->
<SkipMethod type="Program" name="Main" />
</Module>
</Obfuscator>
混淆使用命令:
net48\Obfuscar.Console.exe Obfuscar.xml
測試效果, 我的項目大量使用 dapper ORM, 經過 obfuscar 混淆后, 總是 crash.

ConfuserEx2 驗證(推薦)
首先說明的是, 我的程序是Winform 程序, 用的是 .net framework 4.8, 經過驗證 ConfuserEx 和 ConfuserEx2 效果都很好, 這里僅介紹 ConfuserEx2 的使用.
保護手段:
- ConfuserEx2 支持壓縮 pack, 可以提高反編譯的難度, 但經常被殺毒軟件誤報, 所以不建議使用.
- ConfuserEx1 也支持壓縮 pack, 在我的電腦不會被殺毒軟件報警, 但不確定其他殺毒軟件是否會報警, 所以不建議使用.
- 不得不說混淆很有可能會引起程序異常, 尤其是對于匿名類的支持, 所以我僅僅選擇了
必要的保護措施, 經過實驗和參考該項目的wiki , 分別是 ctrl flow, anti debug, anti ildasm, harden, 另外去除了 ConfuserEx 的 watermark , 這里最關鍵的是 ctrl flow. - anti debug 保護是通過啟動監控debug的線程實現的, 所以文檔中建議不要對所有的assembly 進行 anti debug 保護, 僅僅對 main assembly保護, 已避免性能損失.
項目文件
ConfuserEx2 提供GUI和CLI兩種工具, 可以將混淆任務保存為項目文件, 下面就是我使用的項目文件.
<project outputDir="D:\my_workspace\test\src\bin\Debug\Confused" baseDir="D:\my_workspace\test\src\bin\Debug" xmlns="http://confuser.codeplex.com">
<rule pattern="true" inherit="false">
<protection id="ctrl flow" />
<protection id="anti debug" />
<protection id="anti ildasm" />
<protection id="harden" />
<protection id="watermark" action="remove" />
</rule>
<module path="test.exe" />
</project>
GUI設置截圖如下:



浙公網安備 33010602011771號