有很多方法可以实现这样的事情,但是这不应该太难做:
您需要在某个公共站点上托管一个网站,该网站托管一个文件,该文件包含已列入黑名单的许可证密钥的哈希值。您如何管理此文件取决于您,但是文件本身仅需要每行有一个哈希即可。
然后,您的软件会定期重复下载此文件(大多数服务器端语言都提供了此文件),然后在其中搜索已安装许可证密钥的哈希值。如果找到了,则应用程序知道它应该死,直到删除黑名单。
MD5或类似的东西加上一个秘密就足够了。您可能会觉得更怪异,并希望应用程序将请求发送到您的站点,然后您可以在数据库中即时查找请求,但是文件(对于我来说,我希望它可能是一个简短的列表)可能希望很小,并且可能会最简单的方法。
最困难的部分将是使应用程序停止运行。毕竟,您必须将其存储在内部某个地方,这意味着,如果它太明显了,则可以轻松地对其进行颠覆;即使它不是太明显,也可以通过还原适当的表/来轻松地对其进行还原。文件。因此,我也建议采用第二种保护方法。
该方法将“ LIVE”或“ DEAD”(或足够类似的东西)存储在表或文件中,但又被哈希化。这需要与您的盐和时间戳进行哈希运算。每次运行应用程序上的页面时,请使用“ LIVE” + salt + timestamp的哈希版本检查此值,然后允许有效的时间戳范围(例如,一天,两天,一周,一个月等)。请记住,范围越大,性能越差。)只要事物匹配(或找到匹配),该应用程序就处于活动状态;否则,即使特殊文件或表中的值为“ LIVE”,如果尝试从备份还原,则该时间戳仍将失效,因为时间戳将超出阈值。
总而言之(这确实假定您具有某种检查许可证密钥有效性的程序化方法,例如某种校验和或其他方法):
- 黑名单
- 将许可证密钥转换为带有盐的哈希
- 从服务器请求黑名单文件
- 我的哈希在文件中吗?
- 如果是,则存储“ DEAD” +盐+时间戳的哈希(截断为天;无需存储小时+天+分钟)
- 如果为“否”,则存储“ LIVE” +盐+时间戳的哈希(被截断)
- IsKeyAlive
- 从“实时” +盐+截断的时间戳创建哈希
- 加载DeadAlive哈希
- 他们同意吗?
- 如果是,那么我们还活着;返回TRUE。
- 如果为“否”,那么我们可能已经死了,但仍可能在时间戳窗口内:
- 从时间戳中减去一天并重复哈希。
- 我们现在同意吗?
- 是?返回TRUE
- 向时间戳记添加一天并重复哈希
- 我们现在同意吗?
- 是?返回TRUE
- 此时,我们超出了时间戳范围,没有匹配项。返回FALSE。(杀死应用)
现在,天哪知道可能有一百万个失败的方法。考虑所有可能的方法并构建一个可靠的系统(包括一个如果无法下载黑名单文件则假定客户端正确的系统)。在部署之前进行测试,测试,测试,然后再进行其他测试,因为如果出现问题,您将失去客户的信任。