一、.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(一)的更多相关文章

  1. [转载]Eziriz .NET Reactor 4.7.0.0 官方原版+破解补丁(强大的代码保护和软件防盗版工具)

    Eziriz .NET Reactor 是一个强大的代码保护和软件防盗版工具,完全由.NET框架编写..NET Reactor支持NET平台的软件许可系统,并支持NET程序集所有语言.当.Net编译器 ...

  2. 利用U盘进行软件加密的方法

    利用U盘进行软件加密的方法 一般的U盘不具备加密的功能,虽然U盘和加密狗外形有一些相似,但是内部完全不一样的,U盘只是一个存储器芯片和简单的附属电路,而现在的智能卡加密狗都具有一个单独的CPU或者加密 ...

  3. 如何使用NET Reactor为您的.Net(C#,VB.Net) 源代码加密

    前言 VS开发的源代码安全性,是很多开发者头痛的事情.于是保护好源代码便成了开发者们最关心的事情之一了. 在网上搜一搜,很多有不少的第三方工具可以为源代码加密.加密方式不外乎就是混淆,加壳. 理论上, ...

  4. CentOS软件管理之源代码以及RPM软件包管理

    在Linux系统下,对于软件包的管理有多种机制,有源代码方式.RPM软件包管理方式以及YUM软件管理方式,本篇随笔将详细讲解CentOS下源代码形式安装软件以及RPM软件包管理机制 一.源代码形式 首 ...

  5. sql server 关于表中只增标识问题 C# 实现自动化打开和关闭可执行文件(或 关闭停止与系统交互的可执行文件) ajaxfileupload插件上传图片功能,用MVC和aspx做后台各写了一个案例 将小写阿拉伯数字转换成大写的汉字, C# WinForm 中英文实现, 国际化实现的简单方法 ASP.NET Core 2 学习笔记(六)ASP.NET Core 2 学习笔记(三)

    sql server 关于表中只增标识问题   由于我们系统时间用的过长,数据量大,设计是采用自增ID 我们插入数据的时候把ID也写进去,我们可以采用 关闭和开启自增标识 没有关闭的时候 ,提示一下错 ...

  6. 一种简单的md5加盐加密的方法(防止彩虹表撞库)

    md5加密(或者说摘要算法)大家都很熟悉了 就不解释了 现在很多数据库设计都喜欢用单向加密的方式保存密码,验证时对提交的密码再次加密之后做密文对比 /// <summary> 使用MD5加 ...

  7. Winform软件,不要在线程里操作UI

    对于Winform软件,不要在线程里操作UI,不要相信:StartForm.CheckForIllegalCrossThreadCalls = false; 于是,把所有的代码都改成主线程委托调用的方 ...

  8. 用Qt写软件系列三:一个简单的系统工具(上)

    导言 继上篇<用Qt写软件系列二:QIECookieViewer>之后,有一段时间没有更新博客了.这次要写的是一个简单的系统工具,需求来自一个内部项目.功能其实很简单,就是查看当前当前系统 ...

  9. sqlite的源代码加密,以及其它一些文章

    一.       给数据库加密 前面所说的内容网上已经有很多资料,虽然比较零散,但是花点时间也还是可以找到的.现在要说的这个——数据库加密,资料就很难找.也可能是我操作水平不够,找不到对应资料.但不管 ...

  10. Java实现一个简单的加密解密方法

    Crypto是Java语言写的一个简单的加密解密方法. 使用方法: 加密方法 String cipherte=Enande.encrypt(content, pass): 解密方法 Enande.de ...

随机推荐

  1. pod(九):污点taint 与容忍度tolerations

    目录 一.系统环境 二.前言 三.污点taint 3.1 污点taint概览 3.2 给节点添加污点taint 四.容忍度tolerations 4.1 容忍度tolerations概览 4.2 设置 ...

  2. .NET性能优化-是时候换个序列化协议了

    计算机单机性能一直受到摩尔定律的约束,随着移动互联网的兴趣,单机性能不足的瓶颈越来越明显,制约着整个行业的发展.不过我们虽然不能无止境的纵向扩容系统,但是我们可以分布式.横向的扩容系统,这听起来非常的 ...

  3. 元数据性能大比拼:HDFS vs S3 vs JuiceFS

    元数据是存储系统的核心大脑,元数据性能对整个大数据平台的性能和扩展能力至关重要.尤其在处理海量文件的时候.在平台任务创建.运行和结束提交阶段,会存在大量的元数据 create,open,rename ...

  4. Centos7 mysql网络源安装范例(其他系统也可参考)

    1. 以下是一个通配的el7系列的yum源,可适应aarch64,x86_64,i386内核,但是可能会慢一点 # cat > /etc/yum.repos.d/mysql-community. ...

  5. extern "C"的使用

    在使用C++开发程序时,有时使用到别人开发的第三方库,而这第三库是使用C开发的.直接使用会报错如下: cpp error LNK2019: 无法解析的外部符号 "int __cdecl su ...

  6. (GCC) C++代码中使用#pragma GCC optimize / #pragma G++ optimize

    科学计算用优化 经过实验证明这个命令优化效果最好,把我的 1.2S 的 FFT 优化到了 0.4S使用 pragma 命令优化程序: #pragma GCC optimize("Ofast, ...

  7. 高效率开发Web安全扫描器之路(一)

    一.背景 经常看到一些SRC和CNVD上厉害的大佬提交了很多的漏洞,一直好奇它们怎么能挖到这么多漏洞,开始还以为它们不上班除了睡觉就挖漏洞,后来有机会认识了一些大佬,发现它们大部分漏洞其实是通过工具挖 ...

  8. Android ViewPager2 + TabLayout + BottomNavigationView

    Android ViewPager2 + TabLayout + BottomNavigationView 实际案例 本篇主要介绍一下 ViewPager2 + TabLayout + BottomN ...

  9. 下载kali以及安装

    一.kali下载 下载地址:https://www.kali.org/get-kali/#kali-virtual-machines 二.kali安装 1.打开VMware,打开文件,选择刚刚下载并解 ...

  10. $_GET方法踩坑

    背景 写代码时,遇到一个奇怪的问题:小程序卡券解码接口老是报解码失败,苦寻了一个小时,发现原来是url参数经过thinkphp的I方法被过滤掉,而且涉及到PHP原生的$_GET 原因 I方法底层是原生 ...