我希望出售一些用Python编写的软件。我的界面允许用户提交许可证密钥并将其保存在本地。该程序围绕运行该程序的界面中的一个按钮旋转。我的想法是在AWS EC2服务器上创建HTTPS API(可能使用Flask,因为我知道如何使用它)。然后,每当用户单击该按钮以运行服务器时,该程序就会检索其本地存储的许可证密钥,并向服务器发出GET请求。然后,服务器检查数据库中该密钥的存在,如果存在,则返回True,否则返回False。然后,如果返回True,则本地程序将运行该程序,否则它将告诉用户其密钥无效。
我知道这并不是特别安全。我看到的主要原因是,使用Python,用户可以进入我的.py文件并将布尔值设置为始终为True,或者完全删除检查。因此,尽管存在py2exe,但我认为我可以使用unpy2exe来解决这个问题。 pyarmor似乎也是一个选择,但我认为可能存在一些破解它的工具,例如this one。
即使我能够阻止用户访问代码,他们是否也无法更改服务器的响应并将其更改为True?即使是HTTPS?
我还有一个问题,就是我希望用户一次只能在一台计算机上使用我的程序。我本来想存储他们的MAC地址,但是我知道这很容易被欺骗,所以我不确定如何实现它。
有人可能会说这太过分了,如果有人想破解我的软件,他们会这样做。但是,此程序将非常昂贵,并且将被出售到一个非常普遍的破解市场中。因此,我真的想尽我所能使它尽可能地困难。
那么,有人知道我如何为自己的程序创建安全的许可系统吗?至少只有一个大致的概述会非常有帮助。
谢谢。
编辑:关于安全生成许可证密钥,如果我确定它还不存在,该怎么办?
from base64 import b64encode
from os import urandom
random_bytes = urandom(32)
license = b64encode(random_bytes).decode('utf-8')
EDIT2:当然,许可软件必须有某种行业标准,而不管它是否用Python编码?他们是如何做到的?
答案 0 :(得分:0)
如果我正确理解了您的问题说明,那么可以归结为:
在阅读了您的初始尝试之后,我可以评论说您能够挥动蝙蝠,但最终这些方法都被取消了。
尽管我可以分享一些技巧来解决上述问题,但我还是建议您使用第三方供应商,该供应商已经在许可业务中并在游戏中享有声誉。
NetLicensing恰好是一种符合成本效益的解决方案,肯定符合要求。
对于目标1,他们提供了一种订阅许可模型,该模型反映了典型的订阅场景,在该场景中,允许在日历的特定时间段内使用,并且可以按需扩展,并且其最新的安全性有助于您要避免所有此类裂缝和黑客攻击(如文章中所述)。
他们还提供了一种称为“节点锁定”的解决方案,可用于目标2,其中CPU序列号验证用于强制执行这种类型的许可证。
总而言之,我想说您总是可以使用自制的补救措施来实施软件许可,但是,如果您的产品确实值得市场销售,并且您打算避免盗版并限制未经授权的使用,请让专业人员来照顾您。业务,而您专注于产品开发及其分销。