没有互联网的软件许可机制

时间:2012-08-29 14:02:44

标签: .net licensing software-distribution copy-protection

我开发了一些我希望通过许可保护的软件。到目前为止,我已经有代码使用硬件组件的细节为每台机器生成一个唯一的ID。然后,我可以允许激活5台机器对一个单一的串行密钥(每个许可证5台机器就是我所销售的)。

这一切都很好,但显然只能在有互联网连接的机器上运行。这只是这种保护的限制,我无能为力吗?或者我有办法解决这个问题吗?

注意:在这一点上,在这个帖子中,我不会批评关于我生成唯一ID的方式,这是我选择的方法,而且相当无知,需要坚持下去原因有几个。

2 个答案:

答案 0 :(得分:2)

我认为你有几种选择:

  1. 如评论中所述,不要通过合并密钥中所有允许的计算机的唯一ID来使许可证浮动,而是使计算机特定。启动时,根据密钥检查当前计算机的唯一ID
  2. 使用您当前的方法,但区别在于服务器不在您的身边,而是在客户端,即客户需要在某处安装的许可服务器。
  3. 实施某种自检:每个正在运行的实例将其唯一ID发送到网络中,然后侦听其他正在运行的实例的唯一ID。通过网络接收四个以上唯一ID的第一个实例会自行关闭。我想这可以使用UDP广播来实现。实现这一点并不是那么简单:

    • 您需要确保退出一个实例并在之后立即启动新实例不会导致其他地方关闭。
    • 此外,您可能希望检查机器是否确实联网

    如果我要实现类似的东西,我会介绍以下三种包类型:

    • 开始:实例刚刚启动并首次广播其ID。所有其他实例都需要广播自己的ID作为答案。原因有两个:
      1. 快速失败
      2. 理想情况下,如果已超过允许的最大实例数,则最后启动的实例应退出。如果其中一个已经运行的实例将关闭,那将是不理想的。
    • 定期:所有实例定期发送其唯一ID,以防错过先前的传输
    • 退出:如果一个实例关闭,则告诉其他实例
  4. 在所有情况下,您都应该考虑将允许的实例数量编码到密钥中,以便稍后分发不同大小的密钥。

答案 1 :(得分:2)

要求拥有中央许可服务器。启动时的每个程序都向该服务器注册。服务器告诉客户端它是否可以启动。如果5个程序已经启动,程序将拒绝启动。

当程序停止时,它再次告诉许可服务器不再需要它的许可证。

完成工作。不需要互联网。