我一直在PyQt(python 2.7,PyQt 4.9.5)中创建一个Windows桌面应用程序,我即将发布该软件以供销售。现在是时候为基于许可/序列号的软件激活添加某种系统了。该软件是一种企业对企业产品,零售价约为250美元。
我一直在考虑使用Fastspring,他们提供与以下内容的集成:
提供此功能有哪些好的选择?我遇到的一些事情是它们似乎都没有提供python API,所以我必须弄清楚如何将它们的东西与我的python代码集成。我从来没有这样做过,因此与Python的集成很容易成为一个强大的因素。我并不觉得有必要阻止任何人盗用我的软件,我只是想让企业保持诚实,以便他们购买正确数量的座位。最后要考虑的是,将来我可能希望将其设置为跨平台,理想情况下我不会将自己锁定在Windows上。
感谢您的帮助。
答案 0 :(得分:2)
需要注意的一点是,对Python字节码进行反编译和反向工程并删除对其进行的任何保护相对容易,因此花费太多精力和时间来实施防破解保护通常是不值得的。你只想放足够让人保持诚实。
如果您担心企业购买正确数量的座位,一种基本保护机制是使用公钥机制使用许可服务器上的私钥将数字签名放入邮件中。该消息只是一个随机字符串和一些唯一标识信息,限制许可证密钥有效的机器(例如MAC地址等),如果您想要使密钥到期,则可能是时间戳。然后,此消息和签名将以客户放入程序的字符串进行编码,该字符串通过验证签名是否与消息匹配以及消息是否与计算机匹配来验证许可证密钥。
如果你关心的只是用户有一把钥匙(而不是他们为不同的机器使用不同的钥匙),那么有更简单的方案;你可以简单地用一个完全随机的字符串作为信息。
只要用户不对您的代码进行反向工程,此方案就是安全的。可以通过使用自己的公钥对程序中的公钥进行逆向工程来绕过它。它也可以通过篡改用于识别计算机的信息来绕过,例如, MAC地址;篡改这些信息可能允许使用相同的密钥进行多次安装。