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 ...
随机推荐
- Jmeter添加性能监控插件监控被测系统资源
使用jmeter来监控服务器资源(CPU.I/O.内存.网络等),需要安装jmeter性能监控插件以及在被测服务器中启动监控服务. 一.下载并安装插件 下载 Plugins Manager插件管理器, ...
- spring源码解析(一) 环境搭建(各种坑的解决办法)
上次搭建spring源码的环境还是两年前,依稀记得那时候也是一顿折腾,奈何当时没有记录,导致两年后的今天把坑重踩了一遍,还遇到了新的坑,真是欲哭无泪;为了以后类似的事情不再发生,这次写下这篇博文来必坑 ...
- fastposter v2.10.0 简单易用的海报生成器
fastposter海报生成器是一款快速开发海报的工具.只需上传一张背景图,在对应的位置放上组件(文字.图片.二维.头像)即可生成海报. 点击代码直接生成各种语言的调用代码,方便快速开发. 现已服务众 ...
- 【iOS逆向与安全】frida-trace入门
前言 frida-trace是一个用于动态跟踪函数调用的工具.支持android和ios.安装教程请参考官网.工欲善其事必先利其器.本文将以某App为示范,演示frida-trace的各种方法在iOS ...
- npm卸载"Tracker idealTree already exists"
问题 使用npm卸载babel插件的时候执行命令npm uninstall babel...出现如下报错 npm ERR! Tracker "idealTree" already ...
- Vue使用axios请求接口返回成功200但是进入到catch中
发生这个问题时查阅了许多资料,没有一个是对得上的.最后发现原来是在请求拦截器中的错误 错误代码如下 // 添加响应拦截器 axios.interceptors.response.use(functio ...
- 关于Linux mint更换中文字体后全局楷体修改办法
问题描述 linux mint 更新中文字体后,全局都变成了楷体,浏览器里面,终端里(英文字体可以在终端设置里面修改),这里指的是中文字体,而英文字体可以在 linux mint 设置 - 选择字体 ...
- C# Math 中的常用的数学运算
〇.动态库 System.Math.dll 引入动态库 using System.Math; Math 为通用数学函数.对数函数.三角函数等提供常数和静态方法,使用起来非常方便,下边简单列一下常用 ...
- Entity Framework Core 7中高效地进行批量数据插入
因为之前的版本中,EF Core无法实现高效地批量插入.修改.删除数据,所以我开发了Zack.EFCore.Batch这个开源项目,比较受大家的欢迎,获得了400多个star. 从.NET 7开始,微 ...
- MySQL进阶实战6,缓存表、视图、计数器表
一.缓存表和汇总表 有时提升性能最好的方法是在同一张表中保存衍生的冗余数据,有时候还需要创建一张完全独立的汇总表或缓存表. 缓存表用来存储那些获取很简单,但速度较慢的数据: 汇总表用来保存使用grou ...