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(一)就结束啦,如果你觉得有用,点个赞吧!

如果您看了本篇博客,觉得对您有所收获,请点击右下角的 [推荐];

如果您想转载本博客,请注明出处;

如果您对本文有意见或者建议,欢迎留言;

感谢您的阅读,请关注我的后续博客。 

 

posted @ 2023-02-08 15:12  愿余生随风  阅读(2290)  评论(1编辑  收藏  举报