C#代码混淆加密工具从NetFramework到Net8
简介
现在主要用 c#和 WPF 开发桌面应用,开发效率确实很高,但是 C#开发的程序有个缺点,就是源代码可以从编译好的程序文件中直接看得到,如果不进行代码混淆,那你的所有源代码就是完全暴露出去了。
对于 Framwork 项目的代码,混淆工具有很多,但是对 NET5 以上的项目,混淆工具就太少了,虽然有 AOT,但 AOT 不支持 WPF、winForm,只支持控制台这种类型的项目,于是就折腾找找有没有什么免费好用的,可以混淆 NET5 项目以上的混淆工具。
obfuscar
obfuscar 混淆支持 Framwork 到最新的 Net8,我自己开发的项目就是用这个混淆的,虽然没有不能防止反调试,但是简单的混淆一下代码,还是不错的。
- obfuscar 项目地址: https://docs.lextudio.com/obfuscar/
- 下载
可以使用 nuget.exe 工具下载
nuget install Obfuscar
用 Obfuscar 混淆,需要一个先写一个配置文件,是 xml 格式的,其内容大致如下:
<?xml version='1.0'?>
<Obfuscator>
<Var name="InPath" value="." />
<Var name="OutPath" value=".\Obfuscar" />
<Var name="KeepPublicApi" value="true" />
<Var name="HidePrivateApi" value="true" />
<Var name="HideStrings" value="true" />
<Var name="UseKoreanNames" value="true" />
<Var name="ReuseNames" value="true" />
<Var name="RenameFields" value="true" />
<Var name="RenameProperties" value="true" />
<Var name="RenameEvents" value="true" />
<Module file="dll文件路径" />
<AssemblySearchPath path="路径" />
</Obfuscator>
配置主要是修改 InPath、OutPath、AssemblySearchPath,其它的参数,参考官方文档的配置文件说明
配置文件参考:https://docs.lextudio.com/obfuscar/getting-started/configuration
- InPath:填写 dll 所在的路径
- OutPath:填写混淆后,要保存到哪个目录
- AssemblySearchPath: 要加密的 dll 文件路径。这个路径可以写绝对路径,也可以写相对路径。
填写好之后,然后执行命令
Obfuscar.Console.exe 配置文件xml的路径
这样就可以对 dll 文件进行混淆了。
混淆效果:
说实话,混淆效果并不是很好,还能看到代码的结构,貌似这个直接复制粘贴到 vs,是可以直接运行?这个没试过,反正混淆差也比不混淆好, 主要是就这个支持 Net8 的混淆。
对了混淆的时候,我把 KeepPublicApi 这个设置为 false 之后,程序直接运行不起来了。。。
ConfuserEx
这个只支持 Framework 项目,这个混淆之后,用 ILSpy、dnspy 反编译,连代码都看不到,混淆的效果挺好的,但可能就是混淆程度太高,搞得有时候混淆完之后,启动会出现各种莫名奇妙的错误。
官网: https://mkaring.github.io/ConfuserEx/ github: https://github.com/mkaring/ConfuserEx
这个有图形界面,可以在图形界面拖拽要加密的文件上去,然后就会生成项目文件。
后面就可以用控制台的程序来编译这个项目文件,从而实现自动化混淆
Confuser.CLI.exe 项目文件
混淆效果如下:
混淆之后,直接都看不到代码了,这个效果确实不错,不过,也会有各种问题,就是混淆之后,可能也会导致程序运行不起来。。。
但这个混淆的效果确实好了很多,是免费混淆工具中比较好、用起来也很简单的一个工具了。
收费的混淆工具
其它收费的混淆工具如:DotNET Reactor、VmProtect
要说对 Framework 项目混淆比较好,又不过多影响性能的,那应该是 DotNET Reactor 了,这个混淆之后,代码都是空的,不是简单的用 Unicode 替换代码而已。是把代码都隐藏了,而且还防止反调试。
当然目前最强的还是 VmProtect 混淆,这个是混淆+加壳,但这个混淆加壳之后,如果是 exe 程序,会导致启动速度很慢,如果能忍受,那这个无疑是最强大的混淆加壳工具了。