我正在用Python开发一款软件,它将分发给我雇主的客户。我的雇主想用一个有时间限制的许可证文件来限制软件的使用。

如果我们分发.py文件甚至.pyc文件,将很容易(反编译和)删除检查许可证文件的代码。

另一个方面是,我的雇主不希望我们的客户读到代码,担心代码可能被窃取,或者至少是“新颖的想法”。

有什么好办法来解决这个问题吗?


当前回答

不要依赖混淆。正如你的正确结论,它提供的保护非常有限。 更新:这里有一个论文的链接,它在Dropbox中逆向工程混淆的python代码。操作码重映射方法是一个很好的障碍,但显然它是可以被击败的。

相反,正如许多海报所提到的那样:

不值得花时间进行逆向工程(你的软件这么好,花钱是有意义的) 如果可行的话,让他们签订合同并进行许可证审核。

或者,就像强大的Python IDE WingIDE所做的那样:放弃代码。没错,把代码送出去,让人们回来进行升级和支持。

其他回答

我记录了如何通过将其转换为.so文件和将其转换为python轮文件来混淆python: https://github.com/UM-NLP/python-obfuscation

在某些情况下,可以将软件(全部或至少关键部分)移动到组织托管的web服务中。

这样,许可证检查就可以在您自己的服务器机房的安全环境中执行。

虽然没有完美的解决方案,但可以做到以下几点:

将一些关键的启动代码移到本地库中。 在本机库中执行许可证检查。

如果要删除对本机代码的调用,程序无论如何都不会启动。如果它没有被删除,那么许可证将被强制执行。

虽然这不是一个跨平台的或纯python的解决方案,但它可以工作。

Python是一种字节码编译的解释型语言,很难被锁定。即使您使用py2exe这样的exe-packager,可执行文件的布局也是众所周知的,Python字节码也很好理解。

通常在这种情况下,你必须做出权衡。保护代码到底有多重要?里面有真正的秘密吗(比如对称加密银行转账的密钥),还是你只是多疑了?选择能让你最快开发出最好产品的语言,并现实地看待你的新想法的价值。

如果您决定确实需要安全地执行许可检查,可以将其编写为一个小的C扩展,这样许可证检查代码就很难(但不是不可能!)进行反向工程,并将大部分代码留在Python中。

不要依赖混淆。正如你的正确结论,它提供的保护非常有限。 更新:这里有一个论文的链接,它在Dropbox中逆向工程混淆的python代码。操作码重映射方法是一个很好的障碍,但显然它是可以被击败的。

相反,正如许多海报所提到的那样:

不值得花时间进行逆向工程(你的软件这么好,花钱是有意义的) 如果可行的话,让他们签订合同并进行许可证审核。

或者,就像强大的Python IDE WingIDE所做的那样:放弃代码。没错,把代码送出去,让人们回来进行升级和支持。