我目前正在参与开发产品(开发C#),将提供下载和安装用于免费的,但在非常有限的版本。要访问的所有功能,用户已经支付许可证费用和收到的一个关键。那个键会然后可以进入应用程序"解开"的完整版本。

作为使用许可证的关键一样,是一种通常的我想知道:

  1. 怎么样,通常解决的?
  2. 我怎么可以生成关键的,以及它如何可以通过验证的应用程序?
  3. 我怎么可以还避免具有关键的出版在互联网上,并由其他人使用,还没有支付许可证(一种关键,基本上不是"他们").

我想我应该还有领带的关键版本的应用程序以某种方式这样它将能够充用于新的钥匙在功能的版本。

还有什么我应该想一想,在这种情况?

有帮助吗?

解决方案

警告:你不能阻止用户盗版的,但是仅仅使它更容易为诚实用户,以做正确的事情。

假设你不想做一个特殊的建立对于每个用户,然后:

  • 产生自一个秘密的关键产品
  • 采取用户的名字
  • Concatentate的用户名称和密钥和哈希(例如)SHA1
  • Unpack the SHA1hash作为一个字母数字符串。这是个人用户的"产品的关键"
  • 内程序,执行相同的散列,并比较的产品的关键。如果相等时,确定。

但是,我重复: 这不会阻止海盗行为


我最近读到,这种方法不加密非常声音。但这种解决方法已经弱(由于软件本身已包括秘密关键的地方),因此我不认为这一发现使无效的解决方案为止。

只是想我真的应该提到这一点,虽然;如果你计划要获得的东西从这个,当心。

其他提示

有许多方法可以产生许可证,但很少的那些方面都是真正的安全。这是一个遗憾,因为对于公司来说,许可证已几乎相同的价值为真正的现金。

理想的,你想要你的许可证具有以下性能:

  1. 只有你公司应该能够产生许可证键为你的产品,即使有人完全反向工程师你的产品(其中会发生,我讲的经验)。加密算法或隐藏一个加密钥匙,在你的软件是真的出了问题,如果你是认真控制的许可。如果产品是成功的,有人会让一个关键的发生器在几天之内从释放。

  2. 许可证的关键应用的只在一个计算机(或至少你应该能够控制这一非常紧)

  3. 许可证的应该是简短和易类型,或者规定通过电话。你不希望每一位客户调的技术支持,因为他们不理解,如果关键含有一个"l"或"1".你支持新闻部会感谢你为这个,你会有较低的成本在这一领域。

那么,你如何解决这些挑战?

  1. 答案是简单的,但在技术上具有挑战性:数字签名的使用公共钥匙加密技术。您的许可证的钥匙应该在实际上签署的"文件",包含一些有用的数据,签署与公司的私人钥匙。签名应该被许可证的一部分关键。产品应当验证的许可证钥匙对应的公用钥匙。这样,即使有人已经完全进入到你的产品的逻辑,他们不能产生许可的钥匙,因为他们没有私人钥匙。许可证的关键要看这样的:BASE32(CONCAT(数据,PRIVATE_KEY_ENCRYPTED(哈希(数据)))) 最大的挑战就是经典的公共钥算法具有大型签名的大小。RSA512有1024位的签名。你不想要你的许可钥匙具有数以百计的人物。最强大的一个办法是利用椭圆曲线加密系统(仔细的实现,以避免的现有专利)。ECC键是喜欢6次短于RSA键,对于相同的强度。你可以进一步减少签署的尺寸使用算法如Schnorr数字签字的算法(专利到期在2008-好:))

  2. 这是可以实现的产物活化(Windows是一个很好的例子)。基本上,对于客户具有有效许可证的关键,需要产生一些"激活的数据",这是一个签名的消息嵌入计算机硬件id作签字的数据。这通常是通过互联网,但只有一次:产品发送的许可证,并计算机硬件id一个激活的服务器,以及激活的服务器发送回签名的消息(这也可以作出简短和易于决定过电话)。从这一刻起,该产品没有检查许可证的关键在启动,但是激活的数据,这些数据需要的计算机是相同的,以便验证(否则,数据将不同的数字签名将不会验证).注意,激活的数据检查不需要核查在互联网上:这是足以验证数字签字的数据,激活与公共钥匙已经嵌入的产品。

  3. 好的,只是消除冗余人物,如"1","l"、"0"、"o"从你的钥匙。分许可证的钥匙串入群体的人物。

简单的回答的-无论什么方案,使用它可以破解。

不惩罚诚实客户有一个系统意味着防止黑客,如黑客将破解它。

一个简单的散列码绑在他们的电子邮件或类似的可能是不够好。基于硬件的Id总是成为一个问题时,人们需要重新安装或更新硬件。

好的线程上的问题:http://discuss.joelonsoftware.com/default.asp?biz.5.82298.34

当产生的关键,不要忘记,以连接的版本,并建立数字符串你计算的散列。这种方式不会是一个单一的关键,解除所有一切你有没有释放。

之后你发现一些关键或贴漂浮在 astalavista.盒。sk 你会知道你成功地使一些东西足够的流行,有人打扰破裂。欢呼吧!

除了已经说明。...

任何使用。网的应用是固有的易碎的,因为中间体的语言问题。一个简单的拆卸。净码将会打开你的产品的任何人。他们可以很容易地绕过你的许可代码在这一点上。

你甚至不能使用的硬件价值观创造一个关键的了。虚拟机现在允许有人创建一个图像的'授权'机器上运行平台的任何他们选择。

如果这是昂贵的软件还有其他的解决方案。如果不是,只是让人很难有足够的休闲黑客。和接受这样的事实,将有未经许可的副本那里最终。

如果产品是复杂的、固有的支持的问题将是创建一些保护你。

C#/.净引擎我们用于许可证的关键的一代,现在是保持开放源:

https://github.com/appsoftware/.NET-Licence-Key-Generator.

它基于一个"关键部分验证"的系统,这意味着只有一小部分关键,用于生成密钥必须编入你分发的.你创建的钥匙你自己,所以许可证的执行情况是独特的软件。

如上所述,如果你的代码可以被反编译,这是相对容易,以规避最许可系统。

我用 Crypkey 在过去。这是一个许多可用。

你只能保护软件达到的一点有任何授权的方案。

我不知道如何精心你想要得到的

但我相信这一点。网可访问的硬盘驱动器的序列号。

你可以有程序发送你的东西eles(用户名称和mac地址nic)

你计算的码基础,并通过电子邮件发送回来的关键。

他们会让他们从交换机之后,他们有钥匙。

我一个人的后面 Cryptolens 软件许可证的平台,并已在工作许可证发放制度,因为14岁。在这个答案,我已经包含一些提示根据经验获得了多年。

最好的方式解决这个是通过设立一个许可证关键服务器的应用程序的每个实例将调,以核实许可证的关键。

福利的许可证关键服务器

优点与许可证关键服务器:

  1. 你总是可以更新或区块的许可证关键的立即生效。
  2. 每个许可证的关键可以锁定某些数量的机器(这有助于防止用户发布的许可证关键的在线对其他人使用)。

考虑事项

虽然核实许可证在线可以更好地控制每个实例中的应用程序、互联网连接不是始终存在(特别是如果目标的较大型企业),因此,我们需要另一种方式的执行许可证钥匙的验证。

该方案是总是签署许可证关键服务器的响应使用公用钥匙密码系统,例如RSA或ECC(可能有更好的如果你计划运行上嵌入式系统)。你的应用应该仅有的 公共密钥 验证的许可证。

因此,如果没有网络连接,可以使用的以前的许可证关键的响应。确保来存储 日期机器标识符 在响应,并检查它是不是太旧(eg.你允许用户可以离线至多30天,等等)和许可证的关键响应属于正确的设备。

注意到 你应该总检查证书的许可证键的响应,即使你已连接到互联网),以便确保它不被改变,因为它离开服务器(此仍有工作要做,甚至如果你API到许可证关键服务器的使用https)

保护秘密算法

大多数。网应用程序可以反向工程相当容易地(有两个diassembler由Microsoft提供获得IL代码和一些商品甚至可以检索源码。C#)。当然,你总是可以模糊的代码,但它永远不会100%的安全。

我大多数情况下,目的的任何软件许可的解决办法是帮助老实人是诚实的(即那诚实用户,他们都愿意支付不要忘记付出之后的审判到期,等等)。

然而,可能仍然有一些代码,你不想泄露出去到公众(例如。一个算法预测的股票价格,等等)。在这种情况下,唯一的出路是建立一个 API终点 那你的应用程序将呼吁每一个时间的方法应该以执行。它要求互联网连接,但它能确保你的秘密码是从来不执行通过的客户机。

执行情况

如果你不想要实现的一切自己,我会让你看一看 这个教程 (的一部分 Cryptolens)

只有这样,才能做到一切,你要是需要互联网接入和验证服务器。该应用程序需要登录服务器与的关键,然后你需要存储届会议的详细信息,喜欢的IP地址。这将防止关键用于几个不同的机器。这通常不是非常受欢迎的,与用户的应用程序,除非这是一个非常昂贵和复杂的应用程序,它不值得的。

你可能只有一个许可证的关键应用程序,然后检查客户的侧面如果关键的是好的,但它是容易分发这个关键的其他用户,并与新的反编译器键,可产生的。

我已经实现基于互联网的一次活在我的公司软件(C#。净额),需要许可证的关键,是指许可储存在服务器的数据库。该软件的命服务的关键,并给予许可证的信息,然后加密的本地使用的是RSA的关键产生的一些变量(组合的CPUID和其他的东西,将不会改变往往)在客户的计算机,然后将其存储在注册表中。

它需要一些服务器的端编码,但它真的很好对我们以及我能够使用相同的系统,当我们扩大到基于浏览器软件。它还给你的销售人民的伟大信息谁,在哪里和软件时使用。任何许可系统,该系统只是在本地处理是完全容易受到剥削, 尤其是与反射。净.但是,像其他人所说的那样,没有系统全部安全。

在我看来,如果你不使用基于网络的授权,就没有真正的问题,以保护软件。头痛,DRM可能导致,这是不公平的用户实际支付给受到影响。

我强烈认为,只有公共钥匙加密为基许可证制度是正确的做法,在这里,因为你没有包括必要信息所需许可证的生成为你的源代码.

在过去的,我已经使用 Treek的许可图书馆 很多时候,因为它fullfills这一要求并提供了很好的价格。它使用相同的许可证的保护的最终用户和本身并没有破裂,到现在为止。你还可以找到很好的提示在网站上,以避免海盗行为和破裂。

像其他几个人所提到的,我是一个巨大的 对手 被敌对客户的默认情况下,授权工业是臭名昭着的。因此,我将扩大在一个很好的解决你的问题 还提供了一个良好的客户.

开始,你提到你有一个"有限的"版本的软件使用的尝试和转换的客户"升级",用于额外的功能。所以你要找的是 功能许可证 为你的产品,例如客户可以购买的许可证 特-X特-Y.

我建立的 注册机 与这种类型的许可证中心。注册机是一个发牌的其余API,可以让你来管理用户账户,也许可证和跟踪机使用情况/协会。

我会做的就是设立2 许可证的类型 (a 政策 内注册机),其中一个是基本政策,为有限的免费版本,和另一个政策为支付版本。

我不确定你要用于支付,但让我们假设你使用类似条(相当标准现在)提供 web钩子.注册机还有web钩子(无论是否使用或不是,所有这仍然是适用的话)。你可以把注册机谈话与你的付款提供者采用web钩子从两面(认为: customer.created->创建基本许可证用于客户, license.created->收取客户的新的许可证).

因此,利用web钩子,我们可以自动许可证建立新的客户。那么,关于许可证的验证在应用程序本身?这可以通过各种方式,但最受欢迎的方式是通过需要你的客户进入一个漫长的许可证键入一个输入场然后你就可以验证;我认为这是一个 可怕的 的方式来处理许可证的验证在应用程序。

我为什么这么想?好的首先你需要你的客户输入的一个不厌其烦地长许可证的关键,是为机的消耗,和第二 你需要你和你的客户跟踪说不厌其烦地长许可证的关键.

好吧,那么,有什么别的选择吗?我想最好的选择是做什么的所有客户都用于: 让他们创建一个帐户为你的产品使用的电子邮件/密码.然后你可以联系的所有他们的许可证 和他们的机器 用这一帐户。所以,现在,而不是输入许可证的关键,他们可以简单地记录在使用他们的全权证书。

什么优点不给你吗? 首先,它摆脱需要你和你的客户要跟踪的许可证, 因为它是所有处理背后的幕后内部的用户帐户 最重要的是: 你现在可以提供客户自助服务许可证和机激活! 即由于他们所有的许可证和机都与他们的用户账户,可以促使他们购买的许可证,当他们开火你的应用程序在无法识别的机。

现在到许可证:每当你的客户登录进你的应用程序与他们的电子邮件/密码,你可以查询他们的用户帐户的许可证他们自己来确定如果它们可以使用 特-X特-Y.而且,由于你的应用程序是现在 自我服务, 你可以让你的客户购买额外的功能直接应用程序内的!

因此,我们已经引入了一种 自动化给我们的许可证制度,我们可以许可的个人 功能 (即一个限制与完整版本),我们已经提供了一个 真棒 UX为我们的客户和我们也已经得到缓解的最大原因之一用于支持请求: 许可证关键的恢复。

不管怎么说,这得到了长但我希望它可以帮助别人!

这是不可能防止盗版软件。你可以阻止随意海盗行为,这就是所有授权方案出自己做的。

节点(机)锁定的许可是最好的,如果您想要防止重复使用的许可证键。我已经被使用 Cryptlex 大约一年,现在为我的软件。它有一个 免费计划 还有,所以如果你不要指望太多的客户,可以免费使用它。

你可以使用一个免费的第三方解决方案来处理这个对你如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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top