眾所周知,C#編譯後的dll檔案可被反編譯,網上搜索”C# 反編譯”會出現一大堆資料。為了提高反編譯成本,我們必須對dll檔案進行混淆處理。
目前,C#混淆工具很多,我推薦obfuscar,它是一款免費開源的混淆工具,配置簡單,支援命令列。
一、 從Github上下載Obfuscar。
Obfuscar原始碼:https://github.com/obfuscar/obfuscar
二、 編譯生成GlobalTools。
我還是比較喜歡單檔案。
三、 編輯xml檔案
<?xml version='1.0'?>
<Obfuscator>
<Var name="InPath" value="F:\yourpath\bin\Release\net5.0" />
<Var name="OutPath" value="F:\yourpath\libs" />
<Var name="KeepPublicApi" value="false" />
<Var name="HidePrivateApi" value="true" />
<Module file="$(InPath)\ToolGood.TextFilter.App.dll">
<SkipField type="PetaPoco.Core.PocoData" attrib="public" name="_converters" /> <SkipType name="ToolGood.TextFilter.Application.HtmlFilterApplication" skipMethods="true" skipFields="false" skipProperties="false" skipEvents="false" />
<SkipType name="ToolGood.TextFilter.Application.JsonFilterApplication" skipMethods="true" skipFields="false" skipProperties="false" skipEvents="false" />
<SkipType name="ToolGood.TextFilter.Application.MarkdownFilterApplication" skipMethods="true" skipFields="false" skipProperties="false" skipEvents="false" />
<SkipType name="ToolGood.TextFilter.Application.TextFilterApplication" skipMethods="true" skipFields="false" skipProperties="false" skipEvents="false" />
……………………
</Module>
</Obfuscator>
Var標籤 InPath 為 輸入目錄。
Var標籤 InPath 為 輸出目錄。
Module標籤 為需要混淆的dll檔案路徑。
SkipType標籤,指定不需要混淆的類名,主要做為對介面。
SkipField標籤,指定不需要混淆的變數名,反射時需要。
詳情可參考Obfuscar文件:https://docs.obfuscar.com/
四、 編寫命令列
f:
cd F:\你的專案
F:\混淆工具\GlobalTools.exe 專案.xml
五、小彩蛋:js混淆工具
工具地址:https://github.com/toolgood/ug
Js程式碼如下:
1 setInterval(function() {
2
3 debugger
4
5 }, 100);
壓縮後:
!function(n){!function(n,t,r,u){n[r](function(){},100)}(this,0,n(0,1,2,3,4,2,1,5,6,7,8))}(function(n){return function(){for(var t=arguments,r="",u=0,f=t.length;u<f;u++)r+=n[t[u]];return r}}(["s","e","t","I","n","r","v","a","l"]));
注:js混淆工具不支援es6語法,如let。
後記:
最近忙於編寫SQL online軟體,一款主打資料安全的軟體,防登入資訊被記錄、傳輸加密、水印、IP黑名單、機器碼、SQL記錄、記錄update/delete 修改前資料等等。
SQL online:https://github.com/toolgood/ToolGood.SqlOnline
Layui官網要關了,挺難過的。