混淆要求
1、把exe所用到的依赖dll都合并到exe中
2、使用反编译工具无法得到源代码
混淆方式
1、.net Reactor
优点:可以dll到exe中,也能防止反编译,但是要注意Quick Settings尽量勾选完毕
缺点:争对WPF程序无法使用Native EXE File,但是Winform可以
2、Confuser
优点:可以防止反编译,也能防止反编译工具查看程序集名称
缺点:无法把依赖的dll合并到exe中
3、Costura.Fody
优点:可以合并dll到exe中,也能防止反编译,和.net reactor类似,但是可以使用nuget包安装到exe项目中,只需要重新生成一下,就能把其他依赖的dll放到exe中
缺点:反编译不够彻底,反编译工具能看到exe项目的代码,但是不能看到依赖的dll的代码,这个也不错了
总结
推荐使用Costura.Fody+.net Reactor或者Confuser,先合并后混淆exe
部署
主要目的是为了部署,去除多余的.pdb .config .xml文件
1、在sln同级目录下创建Directory.Build.targets文本文件
2、内容如下
csharp
<Project>
<PropertyGroup Condition="'$(Configuration)'=='Release'">
<DebugType>None</DebugType>
<DebugSymbols>false</DebugSymbols>
<GenerateDocumentationFile>false</GenerateDocumentationFile>
<DocumentationFile></DocumentationFile>
</PropertyGroup>
<Target Name="StripDllConfig" AfterTargets="Build" Condition="'$(Configuration)'=='Release'">
<ItemGroup>
<_CfgToDel Include="$(OutDir)**\*.dll.config" />
</ItemGroup>
<Delete Files="@(_CfgToDel)" />
</Target>
<Target Name="StripSymDoc" AfterTargets="Build" Condition="'$(Configuration)'=='Release'">
<ItemGroup>
<_SymToDel Include="$(OutDir)**\*.pdb" />
<_XmlToDel Include="$(OutDir)**\*.xml" />
</ItemGroup>
<Delete Files="@(_SymToDel)" />
<Delete Files="@(_XmlToDel)" />
</Target>
</Project>
3、重新生成
4、注意,一定是Release,debug包需要这些调试文件
5、在使用Inno SetUp软件打包成安装包给客户就好了(百度一下)
6、这样一来,从混淆到部署,应该可以了,如果有软件加密,则采用非对称加密方式,私钥在自己手里面,程序安全性就得到了保障
6、一定不要大意,总有小人搞破坏