软件评估许可
我的公司正在寻求开始分发我们开发的某些软件,并希望能够让人们在购买之前试用一下该软件。我们还想确保它不能被复制并分发给我们客户的客户。
我们已经看到的一种模型是将许可证与MAC地址绑定,因此该软件只能在一台机器上运行。
我想知道的是,一种生成带有不同信息(例如许可证到期日期,MAC地址和不同软件限制)的许可证密钥的好方法是什么?
解决方案
回答
我建议我们获取密钥中所需的信息,并使用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]
回答
如果不了解产品和客户,很难提供一个好的答案。对于出售给技术人员的企业软件,我们可以使用一个相当复杂的许可系统,他们会解决的。对于出售给几乎没有计算机知识的消费类软件,我们需要一个简单得多的系统。
总的来说,我采用了制作非常简单的系统以使诚实的人保持诚实的做法。任何真正想窃取我们软件的人都会找到解决任何DRM系统问题的方法。
过去,我将Armadillo(现在称为Software Passport)用于C ++项目。我目前正在将XHEO用于Cprojects。
回答
我们将其保持简单:将每个许可证数据存储到XML(易于读取和管理),创建整个XML的哈希,然后使用实用程序(也是自己的和简单的)对其进行加密。
这也远非完美,但可以保留一段时间。
回答
几乎每个商业许可证系统都已被破解,这些年来我们使用了许多最终都被破解了,通常的规则是编写自己的代码,每次发行都更改,一旦我们乐意尝试自己破解。
没有什么是真正安全的,最终要看微软等大公司,他们采用诚实的人会付钱的模式,其他人会效仿的,不要花太多力气。
如果应用值得为人们付出金钱。
回答
我供职的公司实际上使用了USB加密狗。这很方便,因为:
- 我们的软件也已安装在该USB记忆棒上
- 该程序仅在找到(唯一)硬件密钥后才能运行(任何标准USB密钥都具有该密钥,因此我们不必购买特殊的东西,任何存储棒都可以)
- 它不仅限于计算机,还可以根据需要安装在其他系统上
我知道大多数人不喜欢加密狗,但是在这种情况下,它非常方便,因为它实际上被用于我们还提供的专用媒体播放器,因此USB密钥可以用作任何PC上的演示。 ,并且在不做任何修改的情况下,一旦客户满意,就可以在真实的应用程序(即真实的播放器)中使用
回答
多年来,我们在公司使用以下算法都没有发生任何事故。
- 确定代码中所需的字段。尽可能多地打包。例如,日期可以是"自2007年以来的天数",然后我们就可以摆脱16位。
- 添加一个额外的"校验和"字段。 (我们稍后会看到原因。)此字段的值是来自其他字段的打包字节的校验和。我们使用"来自MD5的前32位"。
- 使用TEA加密所有内容。对于密钥,请使用可识别客户的信息(例如,公司名称+个人电子邮件地址),这样,如果有人要在互联网上发布密钥,则他们必须以纯文本形式包含自己的联系信息。
- 以某种明智的方式将十六进制转换为字符串。我们可以直接输入十六进制数字,但有些人喜欢选择另一组16个字符以使其不那么明显。还应定期包含破折号或者其他内容,以便更轻松地通过电话阅读。
要解密,请将十六进制转换为字符串,然后使用TEA解密。但是,这又是一个额外的步骤:计算我们自己的字段校验和(忽略校验和字段)并与给定的校验和进行比较。这是确保没有人篡改密钥的步骤。
原因是TEA完全混合了这些位,因此即使更改一位,其他所有位在TEA解密期间也同样可能发生变化,因此校验和不会通过。
这是可入侵的吗?当然!几乎所有内容都是如此,但这足够紧密且易于实现。
如果仅联系信息不足,则在"节点ID"字段中添加一个字段并将其锁定为MAC地址或者我们建议的某种形式。
回答
如果产品需要使用互联网,那么我们可以为机器生成一个唯一的ID,并使用该ID来检查许可Web服务。
如果没有,我认为采用商业产品是必经之路。是的,他们可以被黑客入侵,但是对于绝对决心要对其进行入侵的人来说,他们不太可能会付钱。
我们使用了:http://www.aspack.com/asprotect.aspx
我们还在其sdk产品中使用了一个函数调用,该函数为我们提供了机器的唯一ID。
自从他们的第一个产品被称为" AsPack"以来,优秀的公司虽然显然不会讲英语。
回答
我既使用了Macrovision的FLEXlm(以前称为Globetrotter),又使用了Reprise Software的较新的RLM(据我了解,由FlexLM的原始作者编写)。两者都可以关闭MAC地址或者物理加密狗,可以被节点锁定(仅绑定到一台计算机)或者"浮动"(网络上的任何授权计算机都可以通过中央许可证服务器分发许可证)。最多可同时签出的副本数,取决于所支付的费用)。可以通过多种灵活的方式进行设置,包括到期日期,各个分许可的功能等。将其集成到应用程序中并不是很困难。这些只是我用过的两个,我敢肯定还有其他人也能很好地完成这项工作。
这些程序很容易被破解,这意味着存在一些已知的利用,它们使人们可以通过削减自己的许可证来欺骗许可证服务器来绕过使用它们的应用程序的安全性,或者仅通过修补二进制文件以绕过许可证检查即可(本质上是用只说" return'true'"的代码代替对库的子例程调用。它比这复杂得多,但这主要归结于此。我们将看到产品的破解版本发布到Warez的各个站点。这可能非常令人沮丧和士气低落,更是如此,因为他们经常对开裂的目的感兴趣,甚至对产品没有任何用处,也不知道如何使用它。有足够专业的程序。)
因此,有些人会说我们应该自己编写,甚至可能经常更改加密方案。但我不同意。的确,自行滚动意味着针对FLEXlm或者RLM的已知利用不会立即对应用程序起作用。但是,除非我们是这种安全性的专家(显然我们不是,或者我们不会问这个问题),否则很可能由于经验不足,最终编写的安全性将大大降低,并且更容易破解计划比市场领导者(可能弱)。
不自己动手的另一个原因仅仅是因为它是无尽的猫和老鼠游戏。对于客户和销售而言,最好将最小的精力用于许可证安全性上,并花时间进行调试或者添加功能。我们只需要"保持诚实的人诚实"就可以处理许可计划,而不能阻止明确的破解。接受破解者无论如何都不会为软件付费。
并非每个人都能采取这种禅宗态度。有些人无法入睡,知道某个地方的某人一无所获。但是,尝试学习处理它。我们无法制止盗版,但是我们可以权衡时间/精力/费用来制止所有盗版与为用户提供更好的产品。请记住,有时最盗版的应用程序也是最受欢迎和最有利可图的。祝你好运,睡个好觉。
回答
不要使用MAC地址。在我们已经测试过的某些硬件上,特别是在某些IBM Thinkpad上,MAC地址可以在重新启动时更改。我们没有费心研究为什么会这样,但是我们在研究中很早就学会了不依赖它。
强制性免责声明和插件:我与他人共同创立的公司生产OffByZero Cobalt许可解决方案。因此,听到我建议外包许可并专注于核心竞争力,我们可能不会感到惊讶。
认真地讲,这些东西正确起来很棘手,而弄错它的后果可能很糟。如果我们是低价高价产品,那么一些盗版副本可能会严重损害收入;如果我们是高价低价产品,那么warez d00dz就有动机破解软件以获取乐趣和声誉。
要记住的一件事是,没有真正的防裂许可。一旦有人在硬件上有了字节码,我们就可以完全控制他们使用它的功能。
一个好的许可系统所做的就是将门槛提高到足够高的水平,以至于购买软件是一个更好的选择,尤其是随着感染了恶意软件的盗版软件的增加。我们建议我们采取多种措施来保护应用程序安全:
- 获得良好的第三方许可系统
- 使用范围内包含的检查来检查代码(例如,没有一个像fIsLicensed这样的全局变量,请勿在实现该功能的代码附近检查某个功能的状态)
- 在.NET或者Java代码的情况下进行严重混淆
回答
我使用了许多不同的产品来生成许可证,并创建了自己的解决方案,但它最终将为我们带来最大的灵活性。
我们应该重点生成自己的许可证密钥的主题是...
HEX格式,椭圆曲线加密以及任何加密算法,例如AES / Rijndael,DES,Blowfish等,这些对于创建许可证密钥非常有用。
当然,仅拥有一个密钥还不够,我们还需要将其与产品关联并根据已创建的密钥系统对应用程序进行编程以锁定。
我一直在创建自己的解决方案,但最终却不得不使用该软件赚钱,我不得不去买一个商业解决方案,这将节省我生成密钥和管理产品线的时间...
到目前为止,我最喜欢的是SpearmanTech的License Vault,但我还尝试了FlexNet(价格昂贵),XHEO(需要太多编程)和SeriousBit Ellipter。
最后,我选择了License Vault产品,因为我会以比其他产品便宜得多的价格购买它,并且随着我们在.NET 3.5中完成大部分工作,它可以提供给我更多。