使用 Python 保护软件许可

F J*_*F J 5 python license-key

我想出售一些我用 Python 编写的软件。我的界面允许用户提交许可证密钥并将其保存在本地。该程序围绕运行该程序的界面中的一个按钮展开。我的想法是在 AWS EC2 服务器上创建一个 HTTPS API(可能使用 Flask,因为我知道如何使用它)。然后,每当用户单击按钮运行服务器时,程序就会检索其本地存储的许可证密钥并向服务器发出 GET 请求。然后服务器检查数据库中是否存在该键,如果存在则返回 True,否则返回 False。如果返回 True,则本地程序将运行该程序,否则将告诉用户他们的密钥无效。

我知道这并不是特别安全。我看到的主要原因是,使用 Python,用户只需进入我的 .py 文件并将布尔值设置为始终为 True,或者完全删除检查。因此,我认为我可以通过使用py2exe来解决这个问题,尽管unpy2exe存在。pyarmor似乎也是一种选择,但我认为可能存在一些工具可以破解它,例如这个

即使我能够阻止用户访问代码,他们是否不可能更改服务器的响应并将其更改为 True?即使是HTTPS?

我还有一个问题,我只希望用户一次能够在一台计算机上使用我的程序。我想过存储他们的 MAC 地址,但我知道这很容易被欺骗,所以我不太确定如何实现它。

有些人可能会说这太过分了,如果有人想破解我的软件,他们就会这么做。然而,该程序将相当昂贵,并且将销往破解相当普遍的市场。因此,我真的很想尽我所能,让它尽可能地困难。

那么,有谁知道如何为我的程序创建一个安全的许可系统?至少一个大概的轮廓会非常有帮助。

谢谢。

编辑:关于安全生成许可证密钥,如果我确保它不存在,会怎么样?

from base64 import b64encode
from os import urandom

random_bytes = urandom(32)
license = b64encode(random_bytes).decode('utf-8')
Run Code Online (Sandbox Code Playgroud)

EDIT2:肯定有某种许可软件的行业标准,无论它是否是用 Python 编码的?他们是如何做到的呢?

Ron*_*nie 4

如果我正确理解了你的问题陈述,那么一切都可以归结为:

  1. 订阅和许可证续订问题,以及
  2. 单用户许可证密钥

在读完你最初的尝试后,我可以评论说你能够挥动球棒,但最终这些方法都是阉割的。

虽然我可以分享一些技巧来解决上述问题,但我宁愿建议您使用第三方供应商,他们已经从事许可业务并且在游戏中享有盛誉。

NetLicensing恰好是一种符合成本效益的解决方案。

对于目标#1,他们提供了反映典型订阅场景的订阅许可模型,其中允许在一定的日历时间内使用,并且可以根据需要延长,并且其最先进的安全性可帮助您避免所有此类破解和黑客攻击都是可能的(如帖子中提到的)。

他们还提供了一种称为“节点锁定”的解决方案,该解决方案可用于实现目标#2,其中使用 CPU 序列号验证来强制执行此类许可证。

总而言之,我想说你总是可以使用家常补救措施来实施软件许可,但如果你的产品确实值得市场,并且你打算避免盗版并限制未经授权的使用,那么让专业人士来处理你的业务,同时您专注于产品开发及其分销。