众所周知,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官网要关了,挺难过的。