当前位置:首页 > C#编程 > C#/.net框架 > 正文内容

NET DLL 保护措施详解(非混淆加密加壳)

秋天2年前 (2022-05-09)C#/.net框架700

 

搜索如何保护dll的时候,看到一篇广告贴子。

虽然是广告贴子,但是很好的解释了常规的dll破解办法,以突显他的产品的优秀之处。其所述的知识还是有参考价值,特转载备察。


为什么要保护DLL,我就不多说了,各人有各人的理由。总的来说,就是不想核心逻辑泄露及授权验证被破解两大方面的因素。市面上的混淆加密工具对.NET源码保护的效果天差地别,很多网上下到的混淆工具破解版对.NET源码混淆保护的效果通常都不行(能找到对应的反混淆工具进行脱壳),而保护效果较好的混淆工具,收费比较高昂且也没有破解版,导致很多小企业或个人开发者为.NET的源码的知识产权保护绞尽脑汁。

 

首先,我来介绍一下发布出去的DLL所面临的风险:

一、直接引用

二、反编译

三、反射

如果DLL一点措施都不做的话,上面任意一种都可以达到破解目的的。

 

然后,通常网上能搜到如下的保护方式,但真心的来说,用处不大,当然对小白破解者增加了难度。

一、混淆类的工具(如Dotfuscator,但是可以通过ILSpy、Reflector等反编译哦,直接COPY代码也能运行)

二、加密类的工具(如MaxToCode,网上有相应的破解教程)

三、加壳类的工具(如Sixxpack,网上有相应的破解教程)

四、强签名(签名只是防止项目中的某一个DLL被篡改了,不能防止反编译或反射的哦)

 

说了那么多,难道没有相对靠谱的方式了吗?

最后,我们进入正题

上面那些工具的目的归结出来大约完成两个目的,一是不能看,二是不能调,当然,我们也是实现这两个目的,只是手段不同。

一、不能看:.NET DLL可以包含托管堆代码(可以被反编译的)与非托管堆代码(不能被反编译,要反编译也是更高层次的了,不在讨范围内),我们将核心逻辑代码置于非托堆代码中,由托管堆代码提供接口供外部调用,调用时将非托管代码通过.NET动态编译特性编译后返回执行结果。这样就保证了不能看。

二、不能调:我们在非托管代码中加入验证调用者来源功能,判断调用者的HASH值是不是与在非托管代码中约定的HASH值(发布时需要提前生成相关引用者的HASH值存于非托管代码,最后生成非托管代码的DLL放于安装包中)一致,如一致则通过执行返回结果,不一致则返回空。这样就解决了非合法来源不能调的问题。

 

此保护思路适用于有.net 源码加密、.net 源代码加密、.net 代码保护、.net dll加密、.net dll保护、.NET 产品保护、asp.net源码加密、asp.net 代码保护、asp.net dll保护、C# 代码保护、C# dll保护、VB.net 代码保护、VB.net dll保护需求的用户,能有效的保护.net源码及dll,达到.net 防止反编译、.net代码防止反编译、.net 防止破解、asp.net 防止反编译、asp.net 防止破解、C# 防止反编译、C# 防止破解、dll加密防止反编译、dll防止反编译、dll防止被调用、dll 防止别人调用、vb.net 防止反编译、vb.net 防止破解的效果。

 

 


#转载请注明出处 www.skcircle.com 《少有人走的路》勇哥的工业自动化技术网站。

扫描二维码推送至手机访问。

版权声明:本文由7点博客发布,如需转载请注明出处。

本文链接:http://6dot.cn/?id=114

标签: .NET.NET框架
分享给朋友:

“NET DLL 保护措施详解(非混淆加密加壳)” 的相关文章

C# Modelbus crc16计算校验和程序

C# Modelbus crc16计算校验和程序

我们手里一个无刷电机,采用485的modelbus crc16协议来控制。因此需要一个计算校验和的工具。源码:C#using System;using System.Collections.Generic;using System.ComponentModel;usin...

C# tableLayoutPanel动态加载控件闪烁的解决方案

C# tableLayoutPanel动态加载控件闪烁的解决方案

WinForm加载多个自定义控件时,会出现很严重的闪烁问题,很卡,一块一块的加载(像打开网页时,网络很卡的那种感觉)简直没法忍受。在网上搜索了好久,网上大部分的方法是一下4种,但是都不能有效的解决问题。  1.将DoubleBuffered 设置 true,用双缓存处理Form界面内容加载,可以提高...

谈谈ObservableCollection观察者集合

谈谈ObservableCollection观察者集合

注:事件很常见,但有重复的代码量。如果你想简化一下事件的编程,而且是整个程序只使用一个像事件池一样的东西,可以尝试使用下文讲的ObservableCollection观察者集合来做到。ObservableCollection<T>类表示一个动态数据集合,在添加项,移除项或刷新整个列表时,...

C# 异步和等待,async/await

C# 异步和等待,async/await

 首先,重点是:异步将从根本上改变大多数代码的编写方式。是的,我相信 async/await 会比 LINQ 产生更大的影响。理解异步将在短短几年内成为基本必需品。关键字介绍让我们直接开始吧。我将使用一些稍后将阐述的概念——请继续阅读第一部分。异步方法看起来像这样:public ...

C# 不要阻塞异步代码,即异步代码死锁的最佳解决方案

C# 不要阻塞异步代码,即异步代码死锁的最佳解决方案

这是一个在论坛和 Stack Overflow 上反复提出的问题。我认为这是异步新手在学习了基础知识后最常问的问题。用户界面示例我们编写了下面的例子。单击按钮将启动 REST 调用并在文本框中显示结果(此示例适用于 Windows 窗体,但相同的原则适用于任何UI 应用程序)。C#using&nbs...

C#中CancellationToken和CancellationTokenSource用法

C#中CancellationToken和CancellationTokenSource用法

 继续谈一下异步中的任务取消机制CancellationToken和CancellationTokenSource。  之前做开发时,一直没注意这个东西,做了.net core之后,发现CancellationToken用的越来越平凡了。  这也难怪,原来.net framework使用异...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。