Visual Studio(VS)发布自动使用Net Reactor给生成的DLL加壳


1. 安装 NET Reactor

 

2. 添加NET Reactor 环境变量

3. 测试加密命令

D盘下dll Reactor目录中有一个测试dll, 

在D:\dll Reactor目录下执行cmd命令 

dotNET_Reactor -file ".\test.dll" -targetfile ".\SecureBin\test.dll" 

执行过程中会有一个弹窗: 

不久后显示加密成功 

用 .net Reflector尝试反编译两个dll 

混淆成功 

 

4. NET Reactor命令行参数 

混淆的时候习惯性的勾选 

查看.net reactor安装目录下的帮助文件 

最终对应命令行如下: 

dotNET_Reactor -file ".\test.dll" -necrobit 1 -control_flow_obfuscation 1 -targetfile ".\SecureBin\test.dll" 

5. 集成到VS2017 

VS项目属性中有生成事件,可写脚本 

这里不适用了,因为在调试状态下是不希望对代码进行加密的,只有在发布后才对dll进行加密 

6. 写批处理脚本,以我手上的项目为例 

web项目,发布在PublishOutput目录中 

在发布目录[PublishOutput]中新建一个文本文档 ,并改名为Reactor.bat 

ECHO OFF 
set rootSource=.\bin 
set rootSecure=.\binSecure 
echo 删除 %rootSource%\*.pdb 
del %rootSource%\*.pdb 
echo 已经删除 %rootSource%\*.pdb 
echo 加密dll %rootSource%\vueAdminAPI.dll %rootSource%\vueAdminCore.dll %rootSource%\vueAdminLog.dll %rootSource%\vueAdminReports.dll %rootSource%\QYWX.dll 
dotNET_Reactor -file "%rootSource%\vueAdminAPI.dll" -satellite_assemblies "%rootSource%\vueAdminCore.dll/%rootSource%\vueAdminLog.dll/%rootSource%\vueAdminReports.dll/%rootSource%\QYWX.dll" -necrobit 1 -control_flow_obfuscation 1 -targetfile "%rootSecure%\vueAdminAPI.dll" 
echo ====================================== 
echo 加密完成 移动 %rootSecure%\*.dll 到 %rootSource%\*.dll 
move /y %rootSecure%\*.dll .\bin\ 
echo 移动完成 
echo 删除 %rootSecure% 
rd /s /q %rootSecure% 
pause 

复制以后注意空格,cmd命令 结尾 处最好 不要有空格,不然会发生异常

如图,第三行结尾处就多了个空格,造成下面Del语句的时候报错

异常信息:

这里应该不提示确认的,而且删除命令执行的有异常,

去除第三行的空格后,执行就正常了

 

当项目重新发布后,执行一下这个脚本,会混淆四个dll,并且替换 

脚本步骤分为: 

1. 删除dll编译带的.pdb文件 

2. 混淆.\bin中指定dll 到.\binSecure目录下 

3. 移动.\binSecure下的dll到.\bin中 

4. 删除.\binSecure目录 

问题处理, 

当再次发布以后,运行reactor.bat,却给出如下报错 

经过分析,得出引起这个报错原因是,尝试加密已经加密过的dll引起的, 

项目发布的时候,如果没有更新的dll不会替换,如图,只修改了vueAdminAPI项目,另外几个dll还是上次加密后的,所以发布后再次加密,只有vueAdminAPI一个是成功的 

解决办法有两种, 

第一种:发布前删除现有文件[不推荐] 

配置发布选项 

这样每次发布的时候会删除发布目录下的所有文件,不推荐理由是很不幸,我的reactor.bat是写在这个目录下,所以每次都被删掉,当然是可以放到目录意外的,不过感觉怪怪的 

第二种,编写VS项目生成事件 

由于每次发布操作,VS都会生成项目 

而VS项目支持绑定生成事件,所以我们在后期生成事件命令中添加一行指令,删除发布文件夹下的bin目录,这样就可以保证每次生成都会重新写入dll 

命令:

rd /s /q $(ProjectDir)\PublishOutput\bin\ 

这样,每次发布后,再加密,也不会报错了 

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
YES开发框架
上一篇:DevExpress 组件 历史各版本下载地址【更新:V21.1.5】
下一篇:陈幼坚设计蓝月亮标识
评论列表

#1楼 123 2023-05-09 15:47
VSTO发布的时候加上NET Reactor加密后,客户端安装报错,说被处理的DLL文件打不开
发表评论

评论内容
昵称:
关联文章

Visual Studio(VS)发布自动使用Net Reactor生成DLL
bat脚本:生成项目并自动发布
开源组件:DockPanelSuite(WeifenLuo.WinFormsUI.Docking)Visual Studio风格用户界面 使用
.NET DLL加密代码混淆 Eziriz .NET Reactor
.NET DLL反编译 .Net利器de4dot
Visual Studio(VS) 集成 Git 命令窗口 Git Bash
[.Net] .NET Reactor授权方法 .NET Reactor自定义注册机和获取机器码
Visual Studio(VS)生成错误:尝试访问已卸载 AppDomain。
Visual Studio 一些常用设置
.NET DLL反编译 JustDecompile
.NET Reactor代码混淆注意事项
Visual Studio(VS) web停止调试后关闭浏览器配置
Visual Studio 2019 远程调试工具(Remote Debugger)
解决:旧项目升级新版Unity2021导致Visual Studio无法使用
Visual Studio (VS) 使用Gulp报错 ReferenceError: primordials is not defined
LabVIEW生成.NETDLL——C#下调用NI数据采集设备功能一种方法 [原创www.cnblogs.com/helesheng]
未能载文件或程序集“CefSharp.Core.dll”或它某一个依赖项。
.NET Core生成后没有Nugetdll文件
C# 中使用JavaScriptPDF文档设置过期时间
VS制作C#程序windows安装程序

联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码