有时候需要对.NET Framework或者.NET开发的作品进行混淆,稍增加一点非常规使用者的“使用”难度,这时候我们需要对开发的exe或者dll进行代码的混淆。这里记录了一下使用Obfuscar进行混淆的步骤:
-
给特定的项目添加Obfuscar包:依次点击“Tools工具”、“NuGet包管理NuGet Package Manager”、“管理项目的NuGet包Manage NuGet Packages for Solution”,然后给需要进行代码混淆的项目添加Obfuscar包如下图:
在左边选中Obfuscar包,在右边勾选需要进行代码混淆的项目,再点“安装Install”按钮即可。
-
为安装了Obfuscar的项目添加Obfuscar.xml配置文件如下图中箭头1所示,注意这个文件的属性如箭头2所示,复制到输出目录Copy to Output Directory的值要为“更新则复制Copy if newer”,其内容为框3中所示:
<?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="UseUnicodeNames" value="true" />
<Var name="ReuseNames" value="true" />
<Var name="RenameFields" value="true" />
<Var name="RegenerateDebugInfo" value="true" />
<Module file="$(InPath)\xxxHelper.dll" />
</Obfuscator>
上面配置文件的值都很直白简单,按需要编辑即可,注意最后一行配置的<Module file>
的值 需要把上面示例中的xxxHelper.dll
改成项目的实际输出文件,比如myDll.dll
或者myApp.exe
等。要注意.NET FrameWork跟.NET项目的配置文件的内容小有不同,本文后面会提到。
- 让VS自动对编译后的输出进行混淆,在需要混淆的.NET FrameWork项目上点右键选属性Properties然后点开左边的节点“生成事件Build Events”,在“生成后事件Post-build event command line”里填入如下命令:
"$(Obfuscar)" Obfuscar.xml
如下图所示:
对于.NET的项目,在项目上点右键选择属性Properties然后在左边生成Build下的事件Events节点后在“生成后事件Post-build event”设置里填入上面提到的命令。
上面的部分.NET Framework跟.NET都是通用的,到了.NET的版本,Obfuscar.xml
的内容有小小不同,下面以.NET 6.0为例,显示配置文件的不同,主要不同在于InPath
、OutPath
与AssemblySearchPath
的不同:
<?xml version='1.0'?>
<Obfuscator>
<Var name="InPath" value=".\bin\Release\net6.0-windows" />
<Var name="OutPath" value=".\bin\Release\net6.0-windows\Obfuscar" />
<Var name="KeepPublicApi" value="true" />
<Var name="HidePrivateApi" value="true" />
<Var name="HideStrings" value="true" />
<Var name="UseUnicodeNames" value="true" />
<Var name="ReuseNames" value="true" />
<Var name="RenameFields" value="true" />
<Var name="RegenerateDebugInfo" value="true" />
<Module file="$(InPath)\xxxHelper.dll" />
<AssemblySearchPath path="C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App\6.0.21\" />
<AssemblySearchPath path="C:\Program Files\dotnet\shared\Microsoft.NETCore.App\6.0.21\" />
</Obfuscator>
一般情况下,我们Debug的一般不需要进行混淆,所以配置Release配置的生成后事件命令即可。