我正在编写一个.NET应用程序(Windows类库)来实现我们产品的许可。
问题是,MSIL反汇编程序或任何其他第三方工具都可以轻松地反汇编DLL,并且很容易破坏代码。
我甚至尝试过签署程序集,但仍然可以将其拆解。
那么我该如何防止这种情况呢?
有没有可用的工具?
答案 0 :(得分:8)
查看this问题的答案 您无法实现完全保护,但是您可以通过使人们更难以成功的方式来阻止拆卸。还有更多方法可以做到这一点,其中一些方法在我上面链接的问题答案中有详细说明:
我要添加的是增量更新,包括核心功能和保护代码,因此您的用户将不断受益于新功能,同时让破解者在破解软件方面落后于您。如果您的发布速度超过了破解和分发软件的速度,那么您将获益匪浅。合法用户将始终拥有技术支持和关于新功能的说法。它们是你最好的市场,因为那些破解你软件的人无论如何都不会为它付钱。
答案 1 :(得分:4)
答案 2 :(得分:3)
.NET有一个名为SuppressIldasmAttribute
的属性,可防止反汇编代码。例如,请考虑以下代码:
using System;
using System.Text;
using System.Runtime.CompilerServices;
[assembly: SuppressIldasmAttribute()]
namespace HelloWorld
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello world...");
}
}
}
正如您所看到的,只有两点不同:
System.Runtime.CompilerServices
命名空间decleration。[assembly: SuppressIldasmAttribute()]
属性。在Visual Studio中构建应用程序后,当我们尝试在ILDASM中打开生成的EXE文件时,现在我们收到错误消息。
答案 3 :(得分:2)
为.NET框架编写的任何内容都需要反汇编。你不能阻止它。
有一些混淆工具可用于更改变量名称并将其他“噪音”插入IL,例如Dotfuscator。
如果绝对需要许可您的产品,您可能需要考虑使用许可库采用另一种方法,即使用除.NET之外的其他方法。
答案 4 :(得分:0)
如上所述,在选定的答案中,没有真正的完全证明方法来保护您的代码。 即使是像c ++这样的东西,如果您的应用程序代码在您的客户手中:例如 - 他们可以物理访问二进制文件,那么该应用程序可能会被反汇编。
解决方案是保留您获得许可的功能,可能想要拆解它的人无法接触,让他们使用它,但不要让他们持有它。
考虑使用:
唯一需要记住的是,任何代码,无论代码编码如何,如果它位于用户系统上都是易受攻击的。当你在系统上放置二进制文件时,你必须承担最坏的情况。一个非常有才华的工程师可以反汇编任何dll,无论是c ++还是c#。