眾所周知,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官網要關了,挺難過的。