典型的产品激活方案如下
在向供应商提供此信息后,供应商会发出激活码。
我想知道激活码是如何生成的以及它的内容是什么。 一旦在用户PC上的应用程序中输入激活码,一般方案是什么,比如下次如何解码,存储,检查?
由于
答案 0 :(得分:5)
一种非常简单的方法是将PC的相关硬件列表编译成字符串,然后在其上运行MD5哈希。所以你的字符串可用于例如包含
"Pentium 4 Dual Core 3.8 GHz, HDD1: 320GB"等 几乎所有语言都有许多免费的MD5哈希实现,你可以在Google上搜索它。
您没有说明您要定位的平台,但如果您使用的是Windows,则可以通过查询WMI或使用Windows API调用来获取PC的硬件配置。例如,要在WMI中查看的物理内存类是Win32_PhysicalMemory。
首次安装软件时,会编译此哈希值,然后将其发送到激活服务器,激活服务器会发回一些仅与该哈希值匹配的相应代码。一个非常简单/无用的例子 - 假设硬件散列是123,并且检查算法是在添加硬件散列和激活代码之后所有数字应该是9,激活服务器将返回876.该程序将添加2编码并获得999,然后将其解锁以供使用。
程序会定期重新创建硬件哈希,将其添加到激活码中(仅在我的超级简单示例中),并确保它们仍然加起来。如果他们不这样做,产品可能会自行锁定并坚持重新激活。
但是:我强烈建议您不要使用这种复制保护方法。为什么不呢?
相反,我建议您使用注册方名称或公司名称的哈希值,并将其嵌入到程序中,以便很明显程序已注册到它们。是的,这在技术上允许他们更容易地复制软件。
底线是 - 如果您的软件对许多人来说真的很有价值,那么有人会绕过您的版权保护计划,无论它有多复杂。使用基于硬件配置的产品激活只会加剧您真正想要与之做生意的一组人 - 那些基本上诚实并希望合法使用您的产品的人。那些不提供有关合法软件的人会使用你的激活方案被破解的版本。
我个人鄙视购买任何产品,如果我更换我的电脑或公司关闭,我无法保证能够使用它。这有点像最近人们为他们的Kindles购买了George Orwell的1984年,然后当出现版权纠纷时,亚马逊远程删除了人们购买的这本书的所有副本。
只是我的2c。
答案 1 :(得分:1)
我认为您的最终目标是保护您的软件免遭未经授权的使用?
以下是几个相关的SO帖子:
How do you protect your software from illegal distribution?
Methods to stop Software Piracy ?
更新:
更直接地回答OP的问题:
我想知道激活码是如何生成的以及它的内容是什么?
@:可以是序列号的专有散列/加密。与用户/产品/日期信息或其他任何东西混合在一起。
在用户PC上的应用程序中输入激活码后,一般方案是什么,比如下次如何解码,存储,检查?
@:该软件可能内部有一些算法可以理解这段代码,至少可以检查有效性。可以存储为文件,在注册表中,甚至可以嵌入到现有文件等中。
答案 2 :(得分:0)
我假设你问了这个问题,因为你想自己实现类似的东西。
在这里,我将概述一个可用于帮助保护所购软件合法性的方案。这有助于保护公司免受盗版侵害,并有助于保持客户的利益。有价值的购买合法且相对容易注册。
此方案通过跟踪三个单独的数据元素来工作:一个是自动生成的,一个是用户输入的,另一个是根据这两个数据计算出来的。当产品未被激活时,它可以使用一组减少的功能运行,也可以根本不运行。
该过程涉及与网站的通信,但是当网站不可用时,存在替代机制,使得用户仍然可以使用该软件而不会对许可问题感到沮丧。 方法
该软件使用三个基本数据元素:
逻辑流程
在伪代码中,软件运行以下过程:
begin:
load IC
if not IC: IC = generateIC
load UI
if not UI: UI = promptUser
testHash:
load HASH
if HASH=hash(IC,UI): goto valid
HASH = activateLicense()
if not HASH=hash(IC,UI): goto invalid
valid:
REV = revokeLicense()
if REV: goto invalid
done : run software
invalid:
done : do not run software
generateIC:
IC = some unique identifier
store IC
return IC
promptUser:
UI = get id from user input
store UI
return UI
activateLicense:
HASH = wwwResponse('activationRequest')
store HASH
return HASH
revokeLicense:
REV = wwwResponse('checkIfRevoked')
if REV: erase HASH
return REV
伪代码还涉及可选的第四个元素:
无法连接到网站只会意味着许可证的状态不会改变。如果软件无法直接连接到网站,则可以从网络启用点获得更改程序,用户将其IC和UI输入浏览器,浏览器通过电子邮件向他们发送HASH,他们可以手动输入软件。这只是稍微涉及一些,但仍然允许用户自己这样做,其中一个重要因素是,如果他们希望接收将通过电子邮件发送给他们的哈希码,他们必须输入有效的电子邮件。
它不是防黑客或不可摧毁的,但它确实以合理的方式保护双方,不会导致挫败感。所涉及的实际机制应该严密保护公司机密。
注意:强>
在这个方案中,IC是计算机硬件上的散列还是只是一些随机生成的密钥并不重要。当它发生变化时所发生的一切都是软件将重新注册,如果它所在的机器连接到互联网可能不是问题,或者如果再次需要用户交互可能会有轻微的不便,但是如上所述,此部分仍可作为网站上的自助服务功能实施。如果他们想要计算激活次数或跟踪其他信息,则由软件公司负责。