我正在使用XCode和Objective C(Cocoa)开发OSX应用程序,我需要一个系统来为每个销售的应用程序生成许可证。
系统必须
那里有什么东西要做,或者我应该自己实施吗?
答案 0 :(得分:12)
我会以三种方式之一实现这一点,具体取决于我是多么偏执。
您使用的语言并不重要。
如果您对某人进行逆向工程许可证生成器的偏执,这是您使用的方法。您生成RSA密钥对,并将公钥与应用程序捆绑在一起。每个许可证号都使用私钥签名,应用程序使用公钥验证签名。由于您是唯一一个拥有私钥的人,因此几乎没有人可以为您的应用程序制作许可证生成器。
缺点:许可证密钥非常长,可能至少200个字符长(四行文本)。用户不想输入这些内容,他们必须复制和粘贴。
好处:任何人都有可能编写许可证生成器。没有经常性的费用。
如果你不那么偏执,这就是你使用的方法。许可证使用HMAC和私钥进行签名,但私钥必须与您的应用程序捆绑在一起。您可以对其进行模糊处理,但智能人员总是可能从您的应用程序中提取密钥。
缺点:可以使用许可证生成器。
好处:短按键。您可以选择使用截断的HMAC; 64位签名可能“足够好”,基数16只有16个字符。没有经常性费用。
这种方法既偏执又方便,但它要求用户具有互联网连接,并且需要运行服务器。每个许可证只是一个随机字符串。服务器上的数据库将随机字符串映射到许可证。当用户注册应用程序时,它会向服务器发出HTTP请求,以获取与指定字符串对应的许可证信息。服务器回复了RSA签名的许可证。
缺点:服务器的重复成本。没有互联网连接就无法注册。您可以轻松检测到盗版密钥。
好处:短按键。没有许可证生成器许可证撤销很容易。对那些担心你会破产的人的销售损失。
临时许可证也可以通过三种方式完成。
在线
签署有效期
签署许可条款
显然,如果您使用签名的许可条款,那么用户将能够擦除其首选项以重新启动许可条款,如果它们是不道德的。 请勿尝试隐藏用户无法找到的许可条款信息,这违反了用户的信任,即您的应用程序不会做任何恶意的事情。如果我发现任何应用程序在我的计算机上隐藏数据,我会删除该应用程序并拒绝从开发人员那里购买任何东西,我确信其他一些用户也有同感。
如果您是在线许可服务器,这很容易 - 黑名单在服务器上。否则,您必须将黑名单与应用程序捆绑在一起,并且每次发布新版本时都会更新。
是否阻止使用盗版许可证的问题。这个问题没有一个明显的答案:你可能认为最好是直接阻止盗版许可,但接受带有警告信息的盗版许可证实际上是出售新许可证的机会。
我确信您可以提出自己的编码许可证方式。我已经看过使用Base 32,这很好,因为它很难被误读(与Base 64不同)。我也看过使用交替的字母和数字组的方案,这很好,因为在阅读长按键时很容易记住你的位置。
以下是使用HMAC的离线许可证密钥的示例方案:
AAXX-XXXX-YYYY-ZZZZ-ZZZZ-ZZZZ-ZZZZ
AA
:产品名称,缩写为两个字母XXXXXX
:一个随机YYYY
:到期日期,自2013年1月1日起的天数,或0表示无限期ZZZZZZZZZZZZZZZZ
:密钥第一部分的签名对于RSA密钥,ZZZ...
部分将非常长。
使用在线密钥服务器时,密钥只有ZZZ...
,且不必非常长(12或16个字符)。
阻止某人破解您的应用程序,无论您采用何种方案。智能工程师可以反汇编您的应用程序并禁用许可检查。你用来阻碍它们的任何技术只会减慢它们的速度,而不是阻止它们。