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

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

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

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


当前回答

有一个关于隐藏python源代码的全面答案,可以在这里找到。

讨论的可能技术有: -使用编译字节码(python -m compileall) -可执行文件创建者(或安装程序,如PyInstaller) 软件即服务(在我看来,这是隐藏代码的最佳解决方案) - python源代码混淆器

其他回答

发布.pyc文件有它的问题-它们与创建它们时使用的python版本以外的任何其他python版本都不兼容,这意味着您必须知道产品将运行的系统上运行的python版本。这是一个非常有限的因素。

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

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

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

你应该看看getdropbox.com的人是如何为他们的客户端软件(包括Linux)做这件事的。这是相当棘手的破解,需要一些相当有创意的拆卸来通过保护机制。

你的雇主是否意识到他可以“偷”回其他人从你的代码中得到的任何想法?如果他们能读懂你的作品,你也能读懂他们的。也许看看你如何能从这种情况中受益,会比担心你可能会失去多少,获得更好的投资回报。

[编辑]回答尼克的评论:

没有得到也没有失去。客户得到了他想要的东西(因为他自己进行了更改,所以已经为此付费了)。因为他没有发布变更,就好像它没有发生在其他人身上一样。

现在如果客户出售软件,他们必须更改版权声明(这是非法的,所以你可以起诉并且会赢->简单的案件)。

如果他们不更改版权声明,第二级客户就会注意到软件来自您的原创,并想知道发生了什么。很有可能他们会联系你,这样你就会了解到你的作品被转售的情况。

同样,我们有两种情况:原来的客户只卖了几份。这意味着他们并没有赚到多少钱,所以为什么要麻烦呢。或者是销量。这意味着你有更好的机会了解他们的工作,并为此做些什么。

But in the end, most companies try to comply to the law (once their reputation is ruined, it's much harder to do business). So they will not steal your work but work with you to improve it. So if you include the source (with a license that protects you from simple reselling), chances are that they will simply push back changes they made since that will make sure the change is in the next version and they don't have to maintain it. That's win-win: You get changes and they can make the change themselves if they really, desperately need it even if you're unwilling to include it in the official release.

通过散列和签署重要文件并使用公钥方法检查,用标准加密方案为代码签名如何?

通过这种方式,您可以为每个客户颁发带有公钥的license文件。

另外,你可以使用python混淆器,就像这个(谷歌一下)。