C#,Winform软件防破译-源代码加密简单方法之.NET REACTOR(一)
一、.NET Reactor介绍
.NET Reactor是一个功能强大的代码保护和软件许可系统,适用于为.NET Framework编写的软件,并支持生成.NET程序集的所有语言。
支持Blazor保护,支持.NET 5 Preview 4保护,允许创建.NET Core 3.x单个文件应用程序,改进了许多功能性能,等等10个功能的更新和改进,还没有体验的朋友可点击下方按钮下载试用。
(立即下载)
本文将介绍.NET Reactor的功能和保护机制中的重要名词含义,了解了这些才能更好的掌握功能使用,希望对您有所帮助。
.NET Core捆绑
启用此选项可创建.NET Core 3.x单个文件应用程序。可执行文件是自解压缩的,包含运行应用程序所需的所有依赖项(包括本地依赖项)。首次运行该应用程序时,该应用程序将根据应用程序名称和构建标识符提取到目录中。再次运行该应用程序时,启动速度更快。除非使用了新版本,否则该应用程序无需再次提取自身。
反调试
此选项将启用受保护程序集中的反调试器检测。如果连接了调试器,当前进程将终止。
抗ILDASM
此功能可防止使用反编译工具进行反编译。反编译工具(如ILDASM-Microsoft中间语言反汇编程序)将报告它们无法打开受保护的程序集。
防篡改
此选项可防止黑客工具篡改/修改受保护的程序集。在运行时,受保护的程序集将执行几个二进制完整性检查。
代码虚拟化
通用中间语言(CIL)是一组与平台无关的指令,由特定于语言的编译器(C#,VB.NET ...)从源代码生成。CIL是独立于平台的,并且可以在任何公共语言基础架构支持的环境(例如.NET运行时或Mono)上执行。CIL和其他元数据的存储方式必须遵循特定的标准(ECMA-335)。这样,.NET Reflector或ILSpy之类的工具就可以读取CIL指令并将代码转换回其源语言(C#,VB.NET ...)。
代码虚拟化将CIL代码转换为一组随机指令,这些指令在运行时由我们自己的虚拟机解释。由于没有正确解释新指令集的标准化程序,因此无法重建原始CIL指令。因此,虚拟代码无法转换回其源语言。
由于虚拟化方法的性能大大降低,因此代码虚拟化应仅应用于选定的方法。要启用代码虚拟化,需要使用以下属性装饰相应的方法:
[System.Reflection.ObfuscationAttribute(Feature = "Virtualization", Exclude = false)]
用法示例
之前

之后

其余的存根代码将执行虚拟机。
压缩和加密资源
.NET Reactor可以通过压缩和加密托管资源来提高保护和程序集的大小。在运行时,需要时,资源将自动解压缩和解密。
控制流混淆
控制流混淆将方法内部的代码转换为意大利面条代码,而这又保留了代码的功能,这使得人眼和反编译器很难遵循程序逻辑。反编译器无法将意大利细面条代码反编译回原始源代码。
嵌入组件
.NET Reactor接收程序集(在“ 其他文件”中列出)并将其嵌入到Main Assembly中。
在可执行文件中嵌入依赖项可以帮助您部署和维护软件,因为您可以将所有依赖项嵌入到一个有效的可执行文件中。在运行时,嵌入式依赖项直接从内存中加载,而不提取到硬盘驱动器中。.NET Reactor对嵌入式程序集不施加任何保护。如果要保护嵌入式程序集,则应将其与主程序集合并或先对其进行保护。
评估锁
如果只希望在有限的时间内使用受保护的程序集,请启用Evaluation_Lock。在“ Runtime_Minutes”(分钟)(分钟)和“ Trial_Days”(天)之间选择。此锁将您的软件转变为“试用版”。
硬件锁
如果要将许可证文件链接到特定计算机,请启用“硬件锁定” 。创建的许可证文件仅在具有定义的硬件ID的计算机上有效。要获取硬件ID,请使用.NET Reactor SDK库License.dll。
隐藏方法调用
隐藏对外部和/或内部方法的调用。方法调用通过在运行时动态构建的委托进行重定向。通常,仅隐藏外部方法调用就足够了。
之前:

然后:

最后(混淆处理->命名约定->隐身):

许可文件
有效的许可证文件将您锁定的.NET软件解锁。要创建有效的许可证文件,必须加载正确的主密钥。它必须与用于保护软件的主密钥相同。可以通过许可证管理器创建许可证文件。
映射文件
要对跟踪痕迹进行模糊处理,需要一个映射文件。映射文件包含所有混淆名称的翻译。该堆栈跟踪deobfuscator需要映射文件重建原始的堆栈跟踪。
合并程序集
启用此选项可将多个部件合并到单个目标部件中。.NET Reactor将您的程序集(“ 主程序集”和“ 其他文件中列出的程序集”)合并到一个目标程序集中。
合并依赖项可以改善对软件的保护。合并的依存关系不再对用户可见,并且由于它们是主装配的真实部分,因此它们也将自动受到保护。如果主程序集是可执行文件,则目标程序集仍然是具有相同入口点的可执行文件。
第三方库通常已经受到保护,因此不建议将它们与主程序集合并。如果在合并装配件时遇到问题,则应将其嵌入到主装配件中。
本机EXE文件
.NET Reactor能够为您的应用程序生成本机x86 EXE文件存根。这样就无法在反编译器中直接打开受保护的应用程序。反编译器将受保护的应用程序识别为本地EXE文件。
NecroBit
NecroBit是一种强大的保护技术,通过用加密代码替换方法中的CIL代码,可以为您的敏感知识产权提供全面保护。这样就不可能对方法源代码进行反编译/反向工程。
混淆
除了源代码保护,.NET Reactor还提供了彻底的类和成员混淆,并辅之以不同的排除方案,在混淆名称中使用了不可打印的字符,甚至是增量混淆,它们始终为类型和成员名称生成相同的混淆字符串。
模糊处理类型和成员名称。混淆过程将程序转换为等效程序,使反向工程更加困难。这种方法的优点是它可以在标准硬件上运行,并且无需对虚拟机或可用的解释器进行任何更改。
.NET Reactor完全支持声明式混淆。声明式混淆允许您直接定义哪些类型和成员应排除在混淆之外。这可以通过在源代码中使用自定义属性System.Reflection.ObfuscationAttribute来完成。.NET Reactor自动检测该属性,并从混淆中排除相应的类型和成员。
混淆节点:
创建映射文件-启用“创建映射文件”以创建一个将未混淆名称与混淆名称交叉引用的文件,该名称由堆栈跟踪反混淆器使用。
启用-设置为True以混淆所有非公共类和成员名称。
排除-选择要避免混淆的类型。
增量混淆-如果您希望IntelliLock始终为您的类型和成员名称生成相同的混淆字符串,则需要启用此选项。
模糊公共类型-启用它也可以模糊所有类型和成员名称。
混淆可序列化类型-禁用此选项可防止混淆可序列化类型。
使用不可打印的字符-不可打印的字符使用不可打印的字符串来混淆类型和成员名称,但是如果程序集必须作为安全代码运行,则无法使用。
准时制方法
与本机EXE文件功能和NecroBit结合使用,.NET Reactor能够将托管方法转换为REAL x86本机代码。只有不影响运行时和平台行为的方法(大多数是诸如属性getter / setters之类的小方法)才会转换为本机代码。本质上,此功能具有内置保护,可防止组件修改。
字符串加密
字符串加密使黑客难以理解您的代码并尝试对程序集进行代码补丁,因为他将无法识别消息文本或其他有用的字符串,从而使识别补丁代码的难度变得更大。此功能具有内置的防止组装操作的保护。
至此,C#,Winform软件防破译-源代码加密简单方法之.NET REACTOR(一)就结束啦,如果你觉得有用,点个赞吧!
如果您看了本篇博客,觉得对您有所收获,请点击右下角的 [推荐];
如果您想转载本博客,请注明出处;
如果您对本文有意见或者建议,欢迎留言;
感谢您的阅读,请关注我的后续博客。
C#,Winform软件防破译-源代码加密简单方法之.NET REACTOR(一)的更多相关文章
- [转载]Eziriz .NET Reactor 4.7.0.0 官方原版+破解补丁(强大的代码保护和软件防盗版工具)
		
Eziriz .NET Reactor 是一个强大的代码保护和软件防盗版工具,完全由.NET框架编写..NET Reactor支持NET平台的软件许可系统,并支持NET程序集所有语言.当.Net编译器 ...
 - 利用U盘进行软件加密的方法
		
利用U盘进行软件加密的方法 一般的U盘不具备加密的功能,虽然U盘和加密狗外形有一些相似,但是内部完全不一样的,U盘只是一个存储器芯片和简单的附属电路,而现在的智能卡加密狗都具有一个单独的CPU或者加密 ...
 - 如何使用NET Reactor为您的.Net(C#,VB.Net) 源代码加密
		
前言 VS开发的源代码安全性,是很多开发者头痛的事情.于是保护好源代码便成了开发者们最关心的事情之一了. 在网上搜一搜,很多有不少的第三方工具可以为源代码加密.加密方式不外乎就是混淆,加壳. 理论上, ...
 - CentOS软件管理之源代码以及RPM软件包管理
		
在Linux系统下,对于软件包的管理有多种机制,有源代码方式.RPM软件包管理方式以及YUM软件管理方式,本篇随笔将详细讲解CentOS下源代码形式安装软件以及RPM软件包管理机制 一.源代码形式 首 ...
 - sql server 关于表中只增标识问题  C# 实现自动化打开和关闭可执行文件(或 关闭停止与系统交互的可执行文件)  ajaxfileupload插件上传图片功能,用MVC和aspx做后台各写了一个案例  将小写阿拉伯数字转换成大写的汉字, C# WinForm 中英文实现, 国际化实现的简单方法    ASP.NET Core 2 学习笔记(六)ASP.NET Core 2 学习笔记(三)
		
sql server 关于表中只增标识问题 由于我们系统时间用的过长,数据量大,设计是采用自增ID 我们插入数据的时候把ID也写进去,我们可以采用 关闭和开启自增标识 没有关闭的时候 ,提示一下错 ...
 - 一种简单的md5加盐加密的方法(防止彩虹表撞库)
		
md5加密(或者说摘要算法)大家都很熟悉了 就不解释了 现在很多数据库设计都喜欢用单向加密的方式保存密码,验证时对提交的密码再次加密之后做密文对比 /// <summary> 使用MD5加 ...
 - Winform软件,不要在线程里操作UI
		
对于Winform软件,不要在线程里操作UI,不要相信:StartForm.CheckForIllegalCrossThreadCalls = false; 于是,把所有的代码都改成主线程委托调用的方 ...
 - 用Qt写软件系列三:一个简单的系统工具(上)
		
导言 继上篇<用Qt写软件系列二:QIECookieViewer>之后,有一段时间没有更新博客了.这次要写的是一个简单的系统工具,需求来自一个内部项目.功能其实很简单,就是查看当前当前系统 ...
 - sqlite的源代码加密,以及其它一些文章
		
一. 给数据库加密 前面所说的内容网上已经有很多资料,虽然比较零散,但是花点时间也还是可以找到的.现在要说的这个——数据库加密,资料就很难找.也可能是我操作水平不够,找不到对应资料.但不管 ...
 - Java实现一个简单的加密解密方法
		
Crypto是Java语言写的一个简单的加密解密方法. 使用方法: 加密方法 String cipherte=Enande.encrypt(content, pass): 解密方法 Enande.de ...
 
随机推荐
- 【题解】[ARC113C] String Invasion
			
题面传送门 解决思路 题目大意是给你一个字符串 \(s\) ,定义一次操作为对于长度为 \(3\) 的一个子段,满足 \(s_i=s_{i+1}\ne s_{i+2}\),则可以将 \(s_{i+2} ...
 - C#使用GDI+同时绘制图像和ROI在picturebox上
			
Bitmap bmp; /// <summary> /// 绘制图像 /// </summary> /// <param name="g">Gr ...
 - vulnhub靶场之VIKINGS: 1
			
准备: 攻击机:虚拟机kali.本机win10. 靶机:DRIPPING BLUES: 1,网段地址我这里设置的桥接,所以与本机电脑在同一网段,下载地址:https://download.vulnhu ...
 - Webpack前端源码泄露漏洞
			
什么是Webpack? webpack是一个打包器(bundler),它能将多个js.css.json等文件打包成一个文件.这样可以使复杂的各种加载文件集合为整合为单一的集合,让代码更加模块化便于编程 ...
 - MySQL数据库:7、SQL常用查询语句
			
Python基础之MySQL数据库 目录 Python基础之MySQL数据库 一.SQL语句常用查询方法 前期数据准备 1.基本查询 2.编写SQL语句的小技巧 3.查询之where筛选 3.1.功能 ...
 - 关于 risrqnis
			
这道题里最有用的( Range Insert Subset Range Query [n?] In Set 破案了 我那五个点是因为维护不知道有什么用的东西炸了 删了就过了 题面 [JRKSJ R4] ...
 - 老板:你为什么要选择 Vue?
			
大家好,我是 Kagol,Vue DevUI 开源组件库和 EditorX 富文本编辑器创建者,专注于前端组件库建设和开源社区运营. 假如你是团队的前端负责人,现在老板要拓展新业务,需要开发一个 We ...
 - 使用Typora
			
Markdown学习 标题:#+空格+名称 二级标题 二级标题:##+空格+名称 三级标题 几级标题以此类推,最多支持到六级标题 字体 Hello,world! 变粗体:一句话的前后加上两个** 变斜 ...
 - Python matplotlib 学习——建立画布和坐标系
			
#导入包import matplotlib.pyplot as plt #让图表在jupyter展示出来%matplotlib inline#解决中文乱码问题plt.rcParams["fo ...
 - [opencv]一些重配遇到的问题(只针对我自己的电脑)
			
1.我的opencv版本是4.5.3 2.环境变量这样配 3.对于每个项目,项目属性这样配: 其中包含目录: C:\Users\dxd\OPCV\opencv\build\include\opencv ...