我正在用Python开发一款软件,它将分发给我雇主的客户。我的雇主想用一个有时间限制的许可证文件来限制软件的使用。
如果我们分发.py文件甚至.pyc文件,将很容易(反编译和)删除检查许可证文件的代码。
另一个方面是,我的雇主不希望我们的客户读到代码,担心代码可能被窃取,或者至少是“新颖的想法”。
有什么好办法来解决这个问题吗?
我正在用Python开发一款软件,它将分发给我雇主的客户。我的雇主想用一个有时间限制的许可证文件来限制软件的使用。
如果我们分发.py文件甚至.pyc文件,将很容易(反编译和)删除检查许可证文件的代码。
另一个方面是,我的雇主不希望我们的客户读到代码,担心代码可能被窃取,或者至少是“新颖的想法”。
有什么好办法来解决这个问题吗?
当前回答
在我自己的项目中,我对软件保护进行了一般的研究,总的观点是完全的保护是不可能的。您唯一希望实现的事情是将保护添加到一个级别,使您的客户绕过该级别的成本高于购买另一个许可证的成本。
话虽如此,我只是检查谷歌的python混淆,没有发现很多东西。在. net解决方案中,混淆将是在windows平台上解决问题的第一种方法,但我不确定是否有人在Linux上有与Mono一起工作的解决方案。
接下来要做的就是用编译语言写代码,如果你真的想这么做,那就用汇编语言。一个被剥离的可执行文件将比解释语言更难反编译。
这一切都归结于权衡。一方面,你可以用python轻松地进行软件开发,在python中也很难隐藏秘密。另一方面,你用汇编程序编写的软件更难编写,但更容易隐藏秘密。
你的老板必须在这个连续统一体中选择一个点来支持他的要求。然后他必须给你工具和时间,这样你才能建造他想要的东西。然而,我敢打赌,他会反对实际开发成本与潜在货币损失之间的对立。
其他回答
通过散列和签署重要文件并使用公钥方法检查,用标准加密方案为代码签名如何?
通过这种方式,您可以为每个客户颁发带有公钥的license文件。
另外,你可以使用python混淆器,就像这个(谷歌一下)。
发布.pyc文件有它的问题-它们与创建它们时使用的python版本以外的任何其他python版本都不兼容,这意味着您必须知道产品将运行的系统上运行的python版本。这是一个非常有限的因素。
在某些情况下,可以将软件(全部或至少关键部分)移动到组织托管的web服务中。
这样,许可证检查就可以在您自己的服务器机房的安全环境中执行。
可以将py2exe字节码放在C启动器的加密资源中,在内存中加载并执行它。这里和这里有一些想法。
有些人还想到了一种自我修改程序,使逆向工程变得昂贵。
您还可以找到防止调试器、使反汇编程序失败、设置错误调试器断点和使用校验和保护代码的教程。搜索[" crypded code" execute "in memory"]以获得更多链接。
但正如其他人所说,如果你的代码值得,逆向工程师最终会成功。
保护代码的唯一可靠方法是在您控制的服务器上运行它,并为您的客户机提供与该服务器接口的客户机。