2020/02/03, ASP.NET Core 3.1, VS2019, Obfuscar 2.2.25
摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构【15-扩展之使用Obfuscar混淆加密保护代码】
使用Obfuscar混淆加密保护代码,防止他人使用ILSpy等工具反编译查看到源码
本章节介绍了使用Obfuscar混淆加密保护代码,防止他人使用ILSpy等工具反编译查看到源码,可以一定程度上防护自己的代码
Obfuscar是开源免费的混淆加密工具,支持.NET Framework和.NET Core应用程序,官方网站、github项目地址、官方文档
使用
添加包引用
向MS.WebApi
应用程序添加包引用:
<ItemGroup> <PackageReference Include="Obfuscar" Version="2.2.25"> </ItemGroup>
添加混淆配置文件
向MS.WebApi
应用程序添加xml配置文件,取名为obfuscar.xml:
右击该xml文件属性,选择始终复制
到输出目录:
编辑obfuscar.xml配置文件:
<?xml version='1.0'?> <Obfuscator> <Var name="InPath" value="." /> <Var name="OutPath" value=".\Obfuscator_Output" /> <Var name="UseUnicodeNames" value="true" /> <Module file="$(InPath)\MS.Services.dll" /> <Module file="$(InPath)\MS.Component.Jwt.dll" /> <Module file="$(InPath)\MS.Component.Aop.dll" /> </Obfuscator>
- 配置的变量值在官方文档-配置中都有写,可以去查阅下
- 解释下以上我的配置含义:
- InPath即输入路径,"."表示从当前路径开始找,项目编译完,我会使用
CD $(TargetDir)
命令跳到当前输出目标目录 - OutPath即输出路径,输出到当前路径下的Obfuscator_Output文件夹
- UseUnicodeNames即使用Unicode编码混淆名称,值是true,就是开启该功能
- var开头的节点都是混淆配置,obfuscar还有好多配置,但是有些配置开启后会影响代码功能,需要自己混淆后再测试一遍功能,以上我的配置不影响代码功能,已经自行测试过了
Module file="$(InPath)\MS.Services.dll"
这行意思就是,将编译完成后输出目录下的MS.Services.dll进行混淆(混淆后会生成在Obfuscator_Output文件夹中)
- InPath即输入路径,"."表示从当前路径开始找,项目编译完,我会使用
添加生成事件
在MS.WebApi
应用程序中右击-属性-生成事件,在“生成后事件命令行”中填写命令:
CD $(TargetDir) "$(Obfuscar)" obfuscar.xml
- 编译成功后,VS便执行上面写的两行命令
CD $(TargetDir)
这条命令很重要,决定了obfuscar.xml配置文件中InPath的值"."的相对路径的位置,InPath的值如果不对,会找不到要混淆的dll"$(Obfuscar)" obfuscar.xml
便是核心,使用obfuscar.xml配置混淆代码
至此,所有的配置都已完成,下面编译项目,验证是否混淆
验证是否混淆
右击MS.WebApi
应用程序,选择发布,根据上一章节的配置重新发布编译一次网站项目:
可以看到publish中即最终发布的项目文件,Obfuscator_Output就是根据配置文件混淆过后的dll
打开Obfuscator_Output:
可以看到里面有三个dll,即我们在obfuscar.xml中写的三个需要混淆的dll
下载并打开ILSpy,打开
Release\netcoreapp3.1\publish\MS.Services.dll(混淆前)和Release\netcoreapp3.1\Obfuscator_Output\MS.Services.dll(混淆后)进行对比
- 可以看到代码已成功混淆(绿色框出来的地方)
- 可以看到代码部分成员变量已经变成了unicode编码
将Obfuscator_Output中的三个dll复制并粘贴覆盖到publish中,然后将publish中的网站项目文件全部拷贝至IIS部署目录website中(具体请参考上一章节),重启IIS,调用接口,网站可以使用混淆后的代码正常运行(这边就不再截图了)
来源:https://www.cnblogs.com/kasnti/p/12284757.html