协慌网

登录 贡献 社区

如何保护 Python 代码?

我正在用 Python 开发一款软件,该软件将分发给我的雇主的客户。我的雇主想通过限时许可文件来限制软件的使用。

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

另一个方面是,我的雇主不希望我们的客户阅读该代码,因为担心该代码可能被盗或至少是 “新颖的主意”。

有解决这个问题的好方法吗?最好使用现成的解决方案。

该软件将在 Linux 系统上运行(因此,我认为 py2exe 不会成功)。

答案

“有没有解决这个问题的好方法?” 不可以。没有任何东西可以防止逆向工程。 DVD 机器上的固件甚至都经过了反向工程,并且暴露了 AACS 加密密钥。尽管有 DMCA 将该行为定为刑事犯罪,但这仍然存在。

由于没有任何一种技术方法可以阻止您的客户阅读您的代码,因此您必须采用普通的商业方法。

  1. 许可证。合同。条款和条件。即使人们可以阅读代码,这仍然有效。请注意,某些基于 Python 的组件可能要求您先付费,然后再使用这些组件销售软件。另外,某些开源许可证禁止您隐藏该组件的来源或来源。

  2. 提供重大价值。如果您的产品非常好 - 以难以拒绝的价格出售 - 则没有动力浪费时间和金钱对任何东西进行逆向工程。逆向工程很昂贵。使您的产品便宜一些。

  3. 提供升级和增强功能,使任何逆向工程都不是一个好主意。当下一个版本破坏了他们的逆向工程时,那就没有意义了。这可以荒唐地发挥到极致,但是您应该提供新功能,这些新功能使下一个版本比逆向工程更有价值。

  4. 以极具吸引力的价格提供定制服务,以至于他们宁愿付钱给您构建和支持增强功能。

  5. 使用过期的许可证密钥。这很残酷,并且会给您带来不好的声誉,但是肯定会使您的软件停止工作。

  6. 作为网络服务提供。 SaaS 不涉及向客户的下载。

Python 是字节码编译的解释语言,很难锁定。即使您使用 py2exe之类的 exe 打包程序,该可执行文件的布局也是众所周知的,并且 Python 字节码也已广为人知。

通常在这种情况下,您必须进行权衡。保护代码真的有多重要?那里是否有真正的秘密(例如,对银行转账进行对称加密的密钥),或者您只是偏执?选择使您能够最快地开发出最好的产品的语言,并且要对您的新颖创意的价值抱有现实的态度。

如果您确定确实需要安全地执行许可证检查,则将其编写为一个小的 C 扩展,以便可以对许可证检查代码进行额外的难度(但并非不可能!)以进行反向工程,并将大部分代码保留在 Python 中。

Python 不是您需要的工具

您必须使用正确的工具来完成正确的事情,并且 Python 并非旨在被混淆。恰恰相反;一切都是开放的,或者很容易在 Python 中显示或修改,因为这是该语言的理念。

如果您想要看不见的东西,请寻找其他工具。这不是一件坏事,很重要的一点是,有几种不同的工具可用于不同的用途。

混淆真的很难

即使已编译的程序也可以进行逆向工程,所以不要以为您可以完全保护任何代码。您可以分析混淆的 PHP,破坏 Flash 加密密钥等。每次都会破解较新版本的 Windows。

有法律要求是一个很好的方法

您不能阻止某人滥用您的代码,但是您可以很容易地发现某人是否在使用您的代码。因此,这只是一个偶然的法律问题。

代码保护被高估

如今,商业模式倾向于销售服务而不是产品。您不能复制,盗版或盗用服务。也许是时候考虑顺其自然了...