在哪里保存应用程序的激活数据?

Posted

技术标签:

【中文标题】在哪里保存应用程序的激活数据?【英文标题】:where to save activation data of the application? 【发布时间】:2011-09-22 23:48:22 【问题描述】:

在我的应用程序中,我将使用在线激活来控制盗版。但问题是一旦用户激活软件,我如何检测该应用程序已激活。有没有办法存储该应用程序被激活的数据.不要告诉我注册表,因为这种方式不安全。任何与在线激活相关的信息都会对我有所帮助。我决定在系统驱动器中创建文件,我的应用程序每次启动时都会检查该文件。如果找到了文件应用程序启动,如果没有,那么它会要求密钥。那安全吗?任何建议都会很好!

【问题讨论】:

【参考方案1】:

您提到的问题是您需要考虑的问题,但还有很多其他问题:

用户如何在没有网络连接的系统上激活许可证? 如果您遵循节点锁定每个许可证的标准做法(自动读取一些系统参数,如 MAC 地址、主机名、硬盘 ID 等)并在运行时检查这些,您将如何适应升级其许可证的用户系统,从而导致这些参数之一发生变化? 如果用户想要将其许可证重新定位到其他系统,例如将其从台式机移动到笔记本电脑或新系统,该怎么办? 如果用户打电话给您(他们会)说:“求助,我的系统崩溃了,所以我需要在另一台机器上运行我的许可证?” 如果您使用激活系统设置许可时间限制,例如试用许可为 30 天或订阅为一年,您如何防止用户通过错误设置系统来作弊在他们激活许可证之前或之后的时钟? 如果您决定提供不同版本的应用程序怎么办?您的激活系统可以管理吗?例如根据每个用户的激活许可证启用或配置产品功能,但全部来自一个可执行文件 如何报告已激活的许可证 - 您的服务器是否捕获已激活许可证的数据并提供报告、警报等? 如果有人想要购买一组(例如 20 个许可证)怎么办?您是否必须提供 20 个不同的激活 ID,或者您是否可以提供一个 ID 来激活 20 个许可证?

根据多年的该领域经验,需要考虑一些事情。

【讨论】:

【参考方案2】:

我可以看到“保护激活数据”有两种不同的看法:

1) 如果您试图保护用户的激活数据,以便用户无法将数据复制到另一台计算机并在那里使用该软件,我建议以下协议:

在激活过程中,用户环境的唯一标识特征被散列并发送到激活服务器。激活服务器生成使用密钥签名的激活。在产品启动时,您的产品验证激活是否由您的服务器签名(使用服务器的公钥),并且本地环境散列到激活中包含的相同签名值。如果它失败了,那么环境要么已经改变(操作系统的新安装?),要么数据已经迁移到一个新的环境,需要(通过它的声音)一个新的许可证/激活。无论哪种方式,用户都需要重新激活。

2) 如果您试图保护激活数据免遭损坏,请考虑使用以下逻辑补充以前的协议:如果客户尝试使用相同的 UID 重新激活,则允许再次激活,这应该导致将相同的激活实例发送回客户。

这些都是即兴的,我不保证其中任何一个都是防弹的。另外,请记住,盗版者只需绕过验证激活即可成为有争议的问题。

另外,我觉得重要的是要注意,使用此方案的想法是您不必在任何地方隐藏激活信息。您可以将其存放在任何方便的地方。

【讨论】:

如果我只是通过搜索服务器数据库来验证插入的密钥是否为真,并且每个密钥只能使用一次。如果用户格式化驱动器,他们将不得不获取新密钥。所以每种格式都需要新的密钥。我知道这会使用户更难使用应用程序,但我的用户非常有限,所以这不是问题。一旦软件被激活,我将文件保存在 c 驱动器中,这不能很容易找到。如果应用程序找到该文件应用程序启动,否则应用程序要求密钥。这对受限用户安全吗?

以上是关于在哪里保存应用程序的激活数据?的主要内容,如果未能解决你的问题,请参考以下文章

我应该在哪里存储我的应用程序的“激活”密钥?

我的第一响应者链从哪里开始?

在哪里保存我的 iOS 应用程序的保存文件

在 UWP 中,我应该在哪里保存用户数据?

代码中哪里是保存核心数据的最佳位置?

iPhone:不需要icloud备份时将用户数据保存在哪里