我目前正在开发一个产品(用c#开发的),可以免费下载和安装,但版本非常有限。要获得所有功能,用户必须支付许可费并获得密钥。然后,该密钥将被输入应用程序以“解锁”完整版本。

像这样使用许可密钥是很常见的,我想知道:

这个问题通常是怎么解决的? 如何生成密钥以及应用程序如何验证密钥? 我怎样才能避免一个密钥被发布在互联网上,并被其他没有支付许可证的人使用(一个基本上不是“他们的”密钥)。

我想我还应该以某种方式将密钥绑定到应用程序的版本,这样就有可能在功能版本中对新密钥收费。

在这种情况下,还有什么需要考虑的吗?


当前回答

你可以使用免费的第三方解决方案来解决这个问题,比如Quantum-Key。Net它是免费的,通过paypal为你创建的网络销售页面处理支付,通过电子邮件发放钥匙,并将钥匙锁定到特定的计算机以防止盗版。

你还应该注意混淆/加密你的代码,或者它可以很容易地使用De4dot和. netreflector等软件进行逆向工程。ConfuserEx是一个很好的免费代码混淆器,它使用起来快速简单,比昂贵的替代品更有效。

你应该通过De4Dot和. netreflector运行你完成的软件来逆向工程它,看看黑客会看到什么,如果他们做同样的事情,并确保你没有留下任何重要的代码暴露或未伪装。

你的软件仍然是可以被破解的,但对于那些偶然的破解者来说,这可能足以让他们望而却步,这些简单的步骤也可以防止你的代码被提取和重用。

https://quantum-key.net

如何使用ConfuserEx?

https://github.com/0xd4d/de4dot

https://www.red-gate.com/dynamic/products/dotnet-development/reflector/download

其他回答

我通过将我的程序与一个不和谐的服务器连接来解决这个问题,它在一个特定的聊天中检查用户输入的产品密钥是否存在并且仍然有效。通过这种方式获得产品密钥,用户将被迫破解不和谐,这是非常困难的。

我已经在我公司的软件(c# .net)上实现了基于互联网的一次性激活,它需要一个许可证密钥,该密钥指向存储在服务器数据库中的许可证。软件用密钥攻击服务器,并获得许可信息,然后使用客户端计算机上的一些变量(CPUID和其他不经常更改的东西的组合)生成的RSA密钥在本地加密,然后将其存储在注册表中。

它需要一些服务器端编码,但它对我们来说工作得非常好,当我们扩展到基于浏览器的软件时,我能够使用相同的系统。它也给你的销售人员提供了关于谁,在哪里,什么时候使用软件的很好的信息。任何只在本地处理的许可系统都很容易被利用,特别是在。net中反射时。但是,正如其他人所说,没有一个系统是完全安全的。

在我看来,如果你不使用基于网络的授权,保护软件就没有任何意义。由于数字版权管理可能引起的头痛,这对已经为此付费的用户来说是不公平的。

简单的答案-无论你使用什么方案都可以被破解。

不要用一个旨在防止黑客的系统来惩罚诚实的客户,因为黑客无论如何都会破解它。

一个简单的散列代码绑定到他们的电子邮件或类似的可能就足够了。当人们需要重新安装或更新硬件时,基于硬件的id总是会成为一个问题。

关于这个问题的好帖子: http://discuss.joelonsoftware.com/default.asp?biz.5.82298.34

警告:你不能阻止用户盗版,只能让诚实的用户更容易做正确的事情。

假设你不想为每个用户做一个特殊的构建,那么:

为产品生成一个密钥 取用户名 使用(例如)SHA1连接用户名、密钥和散列 将SHA1散列解压缩为字母数字字符串。这是个人用户的“产品密钥” 在程序中,执行相同的散列,并与产品密钥进行比较。如果相等,好的。

但是,我再重复一遍:这并不能阻止盗版


我最近读到,这种方法在密码学上不是很可靠。但是这个解决方案已经很弱了(因为软件本身必须在某个地方包含密钥),所以我不认为这个发现会使解决方案失效。

只是觉得我真的应该提一下;如果您打算从这里推导出其他东西,请小心。

你可以使用免费的第三方解决方案来解决这个问题,比如Quantum-Key。Net它是免费的,通过paypal为你创建的网络销售页面处理支付,通过电子邮件发放钥匙,并将钥匙锁定到特定的计算机以防止盗版。

你还应该注意混淆/加密你的代码,或者它可以很容易地使用De4dot和. netreflector等软件进行逆向工程。ConfuserEx是一个很好的免费代码混淆器,它使用起来快速简单,比昂贵的替代品更有效。

你应该通过De4Dot和. netreflector运行你完成的软件来逆向工程它,看看黑客会看到什么,如果他们做同样的事情,并确保你没有留下任何重要的代码暴露或未伪装。

你的软件仍然是可以被破解的,但对于那些偶然的破解者来说,这可能足以让他们望而却步,这些简单的步骤也可以防止你的代码被提取和重用。

https://quantum-key.net

如何使用ConfuserEx?

https://github.com/0xd4d/de4dot

https://www.red-gate.com/dynamic/products/dotnet-development/reflector/download