与许多现代软件公司一样,我的公司使用产品密钥来检查用户对某个软件的合同。在解析产品密钥时,我可以检查某人的产品类型(试用版/完整版等)。我们希望用户能够从免费版本升级到付费版本的代码库,并希望试用版本检查产品密钥是否有效。
试用版不包含完整版的所有代码。使用算法检查产品密钥(它不使用Web服务或类似的东西),因此可以非常快速地完成。
这里有两个子问题:
我的问题是:这是正确的方法吗?如果是这样,是否有实现这种功能的标准方法(或工具)?如果没有,最好的方法是什么?
更新
感谢迄今为止所有出色的答案。我认为现在是时候从答案中解释更多的背景 - 幸运的是,我们似乎或多或少走上正轨。
对于我们的产品,将它安装在私有(非互联网连接)VLAN上是有意义的,这样就可以让产品密钥成为现实......我真的不想去找'手机'的麻烦像微软那样激活:-)。因此,正如所建议的那样,我目前正在使用加密一些数据的产品密钥,这些密钥被解密以查看密钥是否对给定产品有效。当然,我可能是软件盗版的受害者,但我想我们现在将其视为“营销手段”。
正如其中一个答案中所建议的那样,我目前正在生成多个MSI文件:一个用于x64,另一个用于x86。然后一个用于试用,完整版和蓝图版。这使得总共有6个MSI文件(pfff)。在进程混淆期间,会发生强命名和代码签名。蓝图版本包含完整的源代码。
我更关心试用版。当然,我可以在这里和那里添加一些检查,但我宁愿把检查放在每个类中,自动...我想过复制所有CS文件并添加/更改静态c'tors(f.ex.使用cecil或nrefactory ..或只是几个正则表达式...)。在我看来,我不是唯一想要这个的人。必须有更好的方法,对吧?
此外,我真的不想考虑更新和升级,因为它似乎重新发明了MSI轮。从试用到完整版本在我看来就像是MSI升级,就像蓝图版的完整版感觉就像是MSI升级。但是,结合正常升级,我担心这是否可行?
答案 0 :(得分:1)
尝试Rhino Licensing(开源)
使用独特的机器将生成的许可证绑定到个人的计算机上 标识符,如计算机SID,硬盘序列号,CPU标识符, 等。使用浮动许可证并检查许可证的可用性 运行时的服务器。 Rhino Licensing提供必要的 基础设施为您实现这一目标。 Rhino Licensing也可以 在自定义文件中包含自定义数据,以便您具备此功能 轻松将您的客户信息存储在许可证文件中。所有 这些说,在你的申请上有一个许可计划没有 意味着你是完全安全的。黑客和破解者试图扭转局面 设计您的应用程序代码以查看许可是如何完成的 你研究其他安全问题,建议使用 混淆工具,使恶意用户更难。
答案 1 :(得分:0)
您可以发布完整版并禁用试用版的某些功能。当用户升级他的许可证时,他不需要下载任何东西。不要过分担心裂缝和关键原。如果有人对你的软件进行破解,那就意味着你已经成功了,而且你已经赚了很多钱。
答案 2 :(得分:0)
要使用我们的应用程序来解决这个问题,我们在Guid中使用Guid和选定的设定点让我们知道他们使用的是什么版本。之后我们刚刚安装了完整的系统并在软件启动时使用了bool值。
答案 3 :(得分:-1)
混合试用和生产环境可能会变得混乱。如果可能的话,为每个安装程序分别安装两个。
要使保护尽可能强大,有一些先决条件:
激活方案:
安装后或在安装后的一段时间内,您可以要求用户“激活”您的产品。激活时,您可以生成一个纯文本XML文件,其中包含一些标识系统的组件 - CPU ID,HDD ID,域名,用户名等。将所述XML发送到您的Web服务。
然后,服务可以附加随机标记,将数据散列在一起并使用私钥对其进行签名,并返回签名和随机标记。
您的客户端软件将内置匹配的公钥,并在本地存储随机标记和签名。
要检查许可证文件是否有效,应用程序会将明文数据和随机标记一起散列,并检查签名是否与该散列匹配。
这为您提供了一种非常可靠的方法来确定您的客户端运行的实例是否已经购买,并且几乎可以保证它们不仅可以修改XML本身。
没有激活的情景:
购买后,发送包含某些客户数据的文件,例如他们的姓名,电子邮件,电话等 - 使其有些个性化,以便用户不愿意共享自己的许可文件。
包含随机标记并将所有数据散列在一起。签署哈希并将其存储在文件中。
用户必须将文件保存在预定位置,或将其粘贴到应用中的文本框中。