c – 基于订阅的软件许可 – 离线验证

weixin_38056080 2019-09-12 11:18:57
我正在尝试创建基于订阅的许可系统,如果您购买1年1用户的软件,您只能在用于激活软件的计算机上使用它一年,之后您将需要续订许可证键.这是非常基本的,但实现相同的是一个完全不同的场景. 那么让我来讨论一下我到目前为止做了些什么:(如果你想要我粘贴它们,请不要包含代码让我知道) 首先我有一个托管的MySQL数据库,我有一个存储所有许可证相关信息的数据库(产品,serial_keys,Plans等) 因此,当您第一次启动软件时,它会检查注册表中的一些值(多个位置),如果没有找到,它将要求您输入序列密钥. 输入序列密钥后,软件应连接到DB并验证密钥并计算以下内容 >验证序列号>计算唯一的机器ID – 获取BIOS_SL,MB_SL,HDD_SL,将它们添加到一个字符串和MD5中.>计算许可证有效性 – 获取Internet当前时间,使用计划持续时间增加年份>将以下信息存储在注册表中(多个位置) – license_id,machine_id,valid_till,activation_date,last_updated& license_status 如果许可证已激活,此处跳过一些逻辑步骤,检查并匹配已注册的machine_id 所以该软件已注册.现在,我每次软件启动它都会再次在注册表中查找这些值并根据它做出决定,这里是我被困住的地方,需要你的专家建议. >软件启动>检查注册表值>生成machine_id并将其与存储的匹配>读取valid_till值(到期日期)并将其与当前时间匹配. 考虑到用户没有互联网并使用它进行一次激活或他的互联网计划已过期,我该如何对该日期进行合理检查?无法使用系统时间他们非常容易受到攻击. 此时我想到创建一个服务,它将具有一个回调函数,以便在用户尝试更改系统日期时执行操作.但这很乏味,我认为不是最好的解决方案. 或者在启动时记录系统时间并依赖于此,但用户甚至可以在系统启动之前通过BIOS更改它. 抱歉这么长的问题,但不得不解释整个场景. 简而言之,用户没有互联网连接如何维护或获取日期/时间呼叫的合法来源?
...全文
54 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38096599 2019-09-12
  • 打赏
  • 举报
回复
你可以做一些事情虽然你永远不会得到100%傻瓜证明. 最简单的可能只需要一个互联网连接.但是我们已经看到了XBox和其他游戏公司的收获情况. 如果您不能依靠互联网连接来执行检查,您可以观察“可疑”活动.例如,记录应用程序的上次运行时间.如果由于某种原因,系统时钟报告最后一次记录的运行时间之前的时间,则提示用户建立互联网连接并进行验证. 请记住,用户设置时钟可能有合理的原因.夏令时是一个.也许使用一个阈值,例如忽略一小时或一天或其他什么时候倒退的时钟.

476

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧