软件评估许可

时间:2008-09-08 13:06:22

标签: licensing

我的公司正在寻求开发我们开发的一些软件,并希望能够让人们在购买前试用该软件。我们还希望确保不能将其复制并分发给客户的客户。

我们看到的一个模型是将许可证绑定到MAC地址,因此该软件只能在一台机器上运行。

我想知道的是,生成具有嵌入其中的不同信息的许可证密钥的好方法是什么,例如许可证到期日期,MAC地址和不同的软件限制?

10 个答案:

答案 0 :(得分:17)

我使用过来自Macrovision(以前称为Globetrotter)的FLEXlm和来自Reprise Software的新版RLM(据我所知,由FlexLM的原创作者撰写)。两者都可以关闭MAC地址或物理加密狗,可以是节点锁定(仅绑定到一台机器)或“浮动”(网络上的任何授权机器都可以获得由中央许可证服务器发出的许可证,向上最大数量的同时签出的副本由他们支付的金额决定)。有多种灵活的方法可以设置它,包括到期日期,单独的子许可功能等。集成到应用程序中并不是很困难。这些只是我用过的两个,我敢肯定还有其他人也能做到这一点。

这些程序很容易被破解,这意味着有一些已知的漏洞可以让人们绕过使用它们的应用程序的安全性,或者通过削减自己的许可证来欺骗许可证服务器,或者只是通过修补二进制文件来绕过许可证检查(基本上用代表“return'true'”的代码替换子程序调用它们的库。它比那更复杂,但这是它最常归结为的。你会看到你的产品的破解版本发布到各种Warez网站。它可能非常令人沮丧和士气低落,更是如此,因为他们经常有兴趣破解破解的缘故,甚至没有任何使用你的产品或知道如何处理它。(这是很明显,如果你有一个足够专业的程序。)

因此,有些人会说你应该自己编写,甚至可能经常更改加密方案。但我不同意。确实,滚动自己意味着针对FLEXlm或RLM的已知漏洞不会立即适用于您的应用程序。但是,除非你是这种安全方面的专家(显然你不是或者你不会问这个问题),否则很可能在你缺乏经验的情况下你最终会写出一个不那么安全且更难破解的东西。计划比市场领导者(他们可能很弱)。

另一个不打自己的理由就是这是一场无尽的猫捉老鼠游戏。对您的客户和销售人员来说,最好的做法是尽量减少许可证安全性,并花时间调试或添加功能。您需要将许可计划仅仅称为“保持诚实的人诚实”,而不是阻止确定的破解。接受破解者无论如何都不会为软件付费。

并非每个人都能采取这种禅宗态度。有些人晚上无法入睡,因为知道有人在某个地方无所事事。但试着学会处理它。你不能阻止海盗,但你可以平衡你的时间/精力/费用,试图阻止所有盗版,而不是让你的产品更好地为用户服务。请记住,有时最盗版的应用程序也是最受欢迎和最有利可图的应用程序。祝你好运,睡个好觉。

答案 1 :(得分:9)

我建议您在密钥中获取所需的信息,并使用md5进行哈希处理,然后只取前X个字符(其中X是您认为可管理的密钥长度)。

在密码学方面,它远非完美,但是这是你想要用最少的努力来阻止偶然攻击者的那种区域 - 任何东西都会更快变成黑洞。

哦,我还应该指出,如果你去的话,你会想要以明文形式(或略微混淆)提供过期日期(以及你可能想要自己读出的任何其他信息)作为密钥的一部分。沿着这条道路 - md5只是为了阻止最终用户更改其到期日期以扩展许可证。

最简单的事情就是像这样的密钥文件......

# License key for XYZZY
expiry-date=2009-01-01
other-info=blah
key=[md5 has of MAC address, expiry date, other-info]

答案 2 :(得分:8)

我们在my company使用了以下算法多年,没有发生任何事件。

  1. 在代码中确定所需的字段。尽可能包装。例如,日期可以是“自2007年以来的天数”,然后您可以使用16位。
  2. 添加额外的“校验和”字段。 (您将在一秒钟内看到原因。)此字段的值是来自其他字段的压缩字节的校验和。我们使用“来自MD5的前32位。”
  3. 使用TEA加密所有内容。对于密钥,使用标识客户的内容(例如公司名称+个人电子邮件地址),如果有人想在互联网上发布密钥,他们必须以纯文本形式包含他们自己的联系信息。
  4. 以合理的方式将十六进制转换为字符串。您可以直接使用十六进制数字,但有些人喜欢选择一组不同的16个字符,以使其不那么明显。还包括破折号或其他东西,以便通过电话更容易阅读。
  5. 要解密,请将十六进制转换为字符串并使用TEA解密。但是还有这个额外的步骤:计算你自己的字段校验和(忽略校验和字段)并与给定的校验和进行比较。 这是确保没有人篡改密钥的步骤

    原因是TEA完全混合了这些位,所以即使改变了一位,所有其他位也可能在TEA解密期间发生变化,因此校验和不会通过。

    这可以破解吗?当然!几乎所有东西都是,但这足够紧凑,易于实施。

    如果联系到联系信息是不够的,那么请为“节点ID”添加一个字段,并将其锁定到MAC地址或某些建议。

答案 3 :(得分:4)

不要使用MAC地址。在我们测试的一些硬件上 - 特别是一些IBM Thinkpads - MAC地址可以在重启时改变。我们没有费心去调查为什么,但我们在研究期间很早就学会了不依赖它。

强制性免责声明&插件:我共同创办的公司生产OffByZero Cobalt licensing solution。因此,听到我建议外包您的许可证,并且您可能不会感到惊讶。专注于你的核心竞争力。

说真的,这个东西很难做到正确,&弄错的后果可能非常糟糕。如果你是低价高价,一些盗版可能会严重影响你的收入,&如果你的产品价格很低,那么就有动力让warez d00dz破解你的软件以获得乐趣和价值。声誉。

要记住的一件事是,没有真正的防裂许可证;一旦有人在他们的硬件上有你的字节码,你就已经放弃了完全控制他们用它做什么的能力。

良好的许可系统的作用是提高标准,以至于购买软件是一个更好的选择 - 尤其是恶意软件感染的盗版软件的增加。我们建议您采取一些措施保护您的申请:

  • 获得良好的第三方许可系统
  • 使用包含范围的检查来编写代码(例如,没有像fIsLicensed这样的全局变量,不检查实现该功能的代码附近的功能的状态)
  • 在.NET或Java代码的情况下使用严重的混淆

答案 4 :(得分:2)

我工作的公司实际上使用了usb dongle。这很方便,因为:

  • 我们的软件也安装在USB记忆棒上
  • 程序只有在找到(唯一的)硬件密钥(任何标准USB密钥都有,所以你不需要买特别的东西,任何棍子都可以)时才会运行。
  • 它不仅限于计算机,但如果需要可以安装在另一个系统上

我知道大多数人不喜欢加密狗,但在这种情况下它非常方便,因为它实际上用于我们也提供的特殊目的媒体播放器,因此USB密钥可能是用作任何 pc上的演示,但是,一旦客户满意,也可以在没有任何修改的情况下用于真实应用程序(即真实玩家)

答案 5 :(得分:1)

我们保持简单:将每个许可证数据存储到XML(易于阅读和管理),创建整个XML的哈希值,然后使用实用程序(也是自己的和简单的)来加密它。

这也远非完美,但它可以持续一段时间。

答案 6 :(得分:1)

几乎每个商业许可证系统都被破解了,我们多年来一直使用很多东西最终都会被破解,一般规则是自己编写,每次发布都要更改它,一旦你快乐尝试自己破解它。

没有什么是真正安全的,最终看看微软等大公司,他们选择诚实的人会支付的模式,其他人会复制,不要投入太多精力。

如果你的申请值得为人们付钱。

答案 7 :(得分:1)

我已经使用了许多不同的产品来生成许可证并创建了我自己的解决方案,但它归结为什么能够为您提供最大的灵活性。

您应该专注于生成自己的许可证密钥的主题是......

HEX格式化,椭圆曲线加密以及任何加密算法,如AES / Rijndael,DES,Blowfish等。这些非常适合创建许可证密钥。

当然,拥有一个密钥是不够的,您还需要将其与产品相关联,并根据您创建的密钥系统对应用程序进行编程以锁定。

我已经搞砸了创建我自己的解决方案,但最终当它归结为使用该软件赚钱时我不得不陷入困境并获得商业解决方案,这将节省我生成密钥和管理我的产品线的时间。 。

我最喜欢的是SpearmanTech的License Vault,但我也尝试过FlexNet(代价高昂),XHEO(需要太多编程)和SeriousBit Ellipter。

我最终选择了License Vault产品,因为我会比其他产品便宜得多,而且我们在.NET 3.5中完成的大部分工作都只能提供更多产品。

答案 8 :(得分:0)

如果不了解您的产品和客户,很难提供一个好的答案。对于出售给技术人员的企业软件,您可以使用相当复杂的许可系统,他们会弄清楚。对于销售给几乎没有计算机知识的消费者软件,你需要一个更简单的系统。

总的来说,我采用的做法是建立一个非常简单的系统,让诚实的人保持诚实。任何真正想要窃取软件的人都会找到适合任何DRM系统的方法。

过去我曾使用Armadillo(现为Software Passport)进行C ++项目。我目前正在使用XHEO进行C#项目。

答案 9 :(得分:0)

如果您的产品需要使用互联网,那么您可以为该机器生成一个唯一的ID,并使用它来检查许可证Web服务。

如果没有,我认为使用商业产品是可行的方法。是的,他们可能被黑客入侵,但对于那些绝对决定入侵它的人来说,他们不太可能付钱。

我们使用过:http://www.aspack.com/asprotect.aspx

我们还在他们的sdk产品中使用函数调用,它为我们提供了一个机器的唯一ID。

良好的公司虽然他们的第一个产品被称为“AsPack”,但显然不是母语为英语的人。