一. 安装obfuscar
obfuscar可以通过Nuget工具方便的安装
二.新建obfuscar配置文件
<?xml version="1.0" encoding="utf-8" ?>
<Obfuscator>
<!--输入路径-->
<Var name="InPath" value="." />
<!--输出路径:加密混淆过的路径-->
<Var name="OutPath" value=".\Output" />
<!--混淆代码的参数https://docs.obfuscar.com/getting-started/configuration.html-->
<Var name="ReuseNames" value="false" />
<Var name="HideStrings" value="true" />
<Var name="KeepPublicApi" value="false" />
<Var name="HidePrivateApi" value="true" />
<!--要混淆的模块-->
<Module file="$(InPath)\ConsolePKG.exe">
</Module>
</Obfuscator>
说明:
1.混淆的参数有很多,可以参考https://docs.obfuscar.com/getting-started/configuration.html#settings 进行添加或删减
2.需要混淆模块可以是exe 也可以是dll ,可以一个也可以多个。实际使用时,需要改成自己的exe名字或dll名字
三.配置后期生成事件命令行
右击项目选择属性,在生成事件里填入如下内容,
CD $(TargetDir)
"$(Obfuscar)" obfuscar.xml
xcopy $(TargetDir)*.dll $(TargetDir)Output\ /y
说明:
1. if “%str%”==”Release” 这句是限制了只release版本进行混淆。如果都有混淆,删掉即可。
2. CD $(TargetDir) “$(Obfuscar)” obfuscar.xml 这个两句是cd到生成目录。执行xml 进行配置好的混淆
3. xcopy Obfuscator_Output\*.dll /y /e /i /q xcopy是将混淆后的文件复制到生成目录 覆盖掉原来的问题。注意如果在子项目中运行这两句话,会导致主项目找不到dll 而生成失败。
4 xcopy $(TargetDir)*.dll $(TargetDir)Output\ /y 将debug的dll 复制到 output中
四.直接点击运行即可
如果运行成功,在生成的输出框里可以看到如下类似的内容
五.工作原理和注意点
Obfuscar混淆功能实现的核心 方法是 “$(Obfuscar)” obfuscar.xml 这句话。调用命令行,运行 Obfuscar.Console.exe 这个程序,使用 obfuscar.xml配置文件。运行这个程序后, Obfuscar 会修改exe 和 dll中的函数名和变量名修改为没有意义的字符,达到简单混淆的目的。
但是由于修改了函数名,因此如果是给第三方用的dll,第三方就不能使用了。除非设置 <Var name=”KeepPublicApi” value=”true” />
另外,如果自己的项目里一个子项目被多个项目引用,混淆只能统一运行一次,即将所有需要混淆的exe 和 dll 放在一个xml里运行。不然会导致自己的项目找不到dll函数入口。