C# DLL如何保护防止被破解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# DLL如何保护防止被破解相关的知识,希望对你有一定的参考价值。

项目是用.net开发的,但是里面涉及到核心逻辑及授权验证,不想让人轻松被搞掉了。怎么办???

.net的实时编译(JIT)特性决定了用它开发的程序可以被轻松反编译,同时由于采用反射等技术,使得DLL能被未授权调用。

所以要想不被破解,一是不能被反编译看到源码,二是不能被随意调用。

什么混淆加壳加密等,都是可逆的。鉴于.net代码可以包含非托管代码,我们可以用C++解析C#代码生成DLL,这个DLL在被调用时验证调用者信息,就可以解决针对C#的破解,以及非授权调用了。

参考链接:http://blog.csdn.net/qwsf01115/article/details/52169574
参考技术A 百度.net混淆工具。 参考技术B 通过硬件加密的方式,保护C#的程序,一方面使用高安全性的加壳工具保护,同时精锐5加密锁强悍的硬件性能保障硬件安全,三层通讯加密。
高安全性加壳工具Virbox Protector,保护代码安全
.NET程序能够选择不保护、混淆、碎片化和代码加密四种保护方式。代码加密(IL),针对dotNet程序,保护IL代码:一种动态运行方法解密被保护代码。把当前代码加密存储为密文,存储起来,当程序运行到被保护函数时候自动解密并且执行,执行之后再擦除代码,执行之后再擦除代码,运行到哪里才解密哪里的代码,调试者无法获得原始的中间语言的指令和内存完整性的代码,由于是纯内存操作所以运行速度快,性价高的保护手段,建议全加。
代码碎片化:
深思自主知识产权的最新技术:基于 LLVM 和 ARM 虚拟机技术,自动抽取海量代码移入 SS 内核态模块,极大的降低了使用门槛, 不再需要手动移植算法,可移植的算法从有限的几个增长到几乎无限多,支持的语言也不再限于 C, 这是加密技术的一次综合应用,效果上类似于将软件打散执行,使调试无从下手。
精锐5加密锁
精锐5硬件加密锁是深思数盾研制的第5代加密锁,精锐5硬件加密锁相对于之前的版本做了很多的升级功能,硬件上使用业内高安全性的EAL5+芯片,在通信和执行速度上都有很大幅度提高。
精锐5硬件加密锁实现了网络锁和单机锁一体化的方式,可以随意切换。同时精锐5也提供了多个版本:标准版、旗舰版、精灵版、时钟版和IE工业版,方便软件开发者根据需要选择,其中精锐5旗舰版硬件加密锁达到业内存储最大达到512k。
同时精锐5硬件锁与Virbox 云锁、Virbox 软锁为同一系列产品并且可以相互兼容作为灾备使用,软件开发者可以根据产品不同的使用场景选择使用,Virbox 云锁的产品形式为账号,软件开发者可以为软件用户创建用户账号,并且可以向用户账号内签发许可,通过账号的形式可以实现软件开发商软件实时交付用户使用,实现软件开发者的软件加密、高效管控软件用户、实现软件授权的产品。

保护 DLL 的源代码

【中文标题】保护 DLL 的源代码【英文标题】:Protecting source code of a DLL 【发布时间】:2017-09-03 18:46:09 【问题描述】:

我有一个用 C# 编写的库。我想将它作为 DLL 分发。但似乎 .NET 允许对其进行轻松的反编译,因此算法很容易被窃取。

我可以用 C++ 重写它,但我是 .NET 的新手。因此,主要问题是编写 C# 的接口。库不是太大,使用线程、网络和一些数学

有没有办法构建一个只能反汇编的DLL?还是我最好只用 C++ 编写所有内容并提供 C# 接口?反编译C++比反编译C#难吗?

【问题讨论】:

您正在寻找obfuscator @cubrr 这会为用 C# 编写的库提供足够的保护吗? C++ 和 obfuscator 这样的工具会更好吗? Obfuscator 只是用奇怪的名称重命名你的类方法、变量、字段等,因此很难对其进行逆向工程。我认为您应该为您的代码申请专利并将其托管在云中。当然,您可以在云中托管一个混淆的 DLL。 【参考方案1】:

分发给最终用户的所有内容都可以进行逆向工程。您可以增加付出的努力,但这始终是可能的。如果您的算法确实是关键的、专有的和有价值的,并且您仍在进行应用程序设计,并且您的算法的结果不是性能关键或可以分块......那么也许您可以考虑使用 Web 服务方法。然后,您可以使用一些最强大的行业标准保护来访问您的计算。

【讨论】:

“分发给最终用户的所有内容都可以进行逆向工程” - 是的,我明白了。但是用 C++ 重写库值得吗? @Leonidas 你没有给我们足够的信息来帮助我们解决这个问题。一般来说,编译后的 C++ 代码比混淆的 C# 更难理解,但根据您使用的代码功能、您对 C++ 的舒适度以及算法代码的大小和要求,用 C++ 重写代码可能很简单或几乎不可能。 实际上我更喜欢 C++,但我是 .NET 新手。因此,主要问题是编写 C# 接口。库不是太大,使用线程、网络和一些数学。 也许您应该先尝试一下 .NET Native? msdn.microsoft.com/en-us/library/dn584397(v=vs.110).aspx【参考方案2】:

如果您真的担心算法的知识产权,那么您有一些选择。

1) 为算法申请专利。我能听到嚎叫声,但这就是您以合法方式保护知识产权的方式。

2) 不要将带有算法的 DLL 提供给用户。将算法托管在云端,只允许客户以这种方式访问​​它。

其他一些我不明白。你说你会写C++,却不知道怎么写C#的接口?使用 COM。 C# 可以使用 COM 库。或者,在 C++ 中导出您的函数并编写一个使用 PInvoke 调用 C++ DLL 的 .NET 互操作库。

【讨论】:

以上是关于C# DLL如何保护防止被破解的主要内容,如果未能解决你的问题,请参考以下文章

软件采用.net C#开发,不想让人轻松破解核心逻辑及授权验证代码,DLL也不想被人随意调用,有啥办法吗?

如何有效的防止Java程序被反编译和破解

如何防止放电破解电脑密码问题

如何防止破解?MCU加密技术揭秘

[C#防止反编译].NET 产品版权保护方案 (.NET源码加密保护)

您提的这个问题 C#调用delphi的DLL"尝试读取或写入受保护的内存。这通常指示其他内存已损坏,如何解决的?