我正在用Python开发一款软件,它将分发给我雇主的客户。我的雇主想用一个有时间限制的许可证文件来限制软件的使用。
如果我们分发.py文件甚至.pyc文件,将很容易(反编译和)删除检查许可证文件的代码。
另一个方面是,我的雇主不希望我们的客户读到代码,担心代码可能被窃取,或者至少是“新颖的想法”。
有什么好办法来解决这个问题吗?
我正在用Python开发一款软件,它将分发给我雇主的客户。我的雇主想用一个有时间限制的许可证文件来限制软件的使用。
如果我们分发.py文件甚至.pyc文件,将很容易(反编译和)删除检查许可证文件的代码。
另一个方面是,我的雇主不希望我们的客户读到代码,担心代码可能被窃取,或者至少是“新颖的想法”。
有什么好办法来解决这个问题吗?
当前回答
使用cxfreeze (Linux的py2exe)可以完成这项工作。
http://cx-freeze.sourceforge.net/
它可以在ubuntu存储库中找到
其他回答
使用Python所能做的最好的事情就是模糊一些东西。
剥离所有文档字符串 只分发.pyc编译文件。 冻结它 隐藏类/模块中的常量,这样help(config)就不会显示所有内容
您可以通过加密部分数据并动态解密并将其传递给eval()来增加一些额外的模糊性。但无论你做什么,总会有人打破它。
这些都不能阻止一个坚定的攻击者通过help、dir等方法来分解字节码或挖掘你的api。
保护代码的唯一可靠方法是在您控制的服务器上运行它,并为您的客户机提供与该服务器接口的客户机。
在某些情况下,可以将软件(全部或至少关键部分)移动到组织托管的web服务中。
这样,许可证检查就可以在您自己的服务器机房的安全环境中执行。
发布.pyc文件有它的问题-它们与创建它们时使用的python版本以外的任何其他python版本都不兼容,这意味着您必须知道产品将运行的系统上运行的python版本。这是一个非常有限的因素。
取决于客户是谁,一个简单的保护机制,结合合理的许可协议将比任何复杂的许可/加密/混淆系统更有效。
最好的解决方案是将代码作为服务出售,比如托管服务,或者提供支持——尽管这并不总是可行的。
以.pyc文件的形式发布代码可以防止你的保护被一些#所破坏,但这几乎不是有效的反盗版保护(就像有这样的技术一样),而且归根结底,它不应该达到任何与公司签订像样的许可协议所能达到的效果。
专注于让你的代码尽可能好用——拥有满意的客户会让你的公司赚更多的钱,而不是防止一些理论上的盗版。