我正在用 Python 开发一款软件,该软件将分发给我的雇主的客户。我的雇主想通过限时许可文件来限制软件的使用。
如果我们分发. py 文件或什至. pyc 文件,将很容易(反编译和)删除检查许可证文件的代码。
另一个方面是,我的雇主不希望我们的客户阅读该代码,因为担心该代码可能被盗或至少是 “新颖的主意”。
有解决这个问题的好方法吗?最好使用现成的解决方案。
该软件将在 Linux 系统上运行(因此,我认为 py2exe 不会成功)。
“有没有解决这个问题的好方法?” 不可以。没有任何东西可以防止逆向工程。 DVD 机器上的固件甚至都经过了反向工程,并且暴露了 AACS 加密密钥。尽管有 DMCA 将该行为定为刑事犯罪,但这仍然存在。
由于没有任何一种技术方法可以阻止您的客户阅读您的代码,因此您必须采用普通的商业方法。
许可证。合同。条款和条件。即使人们可以阅读代码,这仍然有效。请注意,某些基于 Python 的组件可能要求您先付费,然后再使用这些组件销售软件。另外,某些开源许可证禁止您隐藏该组件的来源或来源。
提供重大价值。如果您的产品非常好 - 以难以拒绝的价格出售 - 则没有动力浪费时间和金钱对任何东西进行逆向工程。逆向工程很昂贵。使您的产品便宜一些。
提供升级和增强功能,使任何逆向工程都不是一个好主意。当下一个版本破坏了他们的逆向工程时,那就没有意义了。这可以荒唐地发挥到极致,但是您应该提供新功能,这些新功能使下一个版本比逆向工程更有价值。
以极具吸引力的价格提供定制服务,以至于他们宁愿付钱给您构建和支持增强功能。
使用过期的许可证密钥。这很残酷,并且会给您带来不好的声誉,但是肯定会使您的软件停止工作。
作为网络服务提供。 SaaS 不涉及向客户的下载。
Python 是字节码编译的解释语言,很难锁定。即使您使用 py2exe之类的 exe 打包程序,该可执行文件的布局也是众所周知的,并且 Python 字节码也已广为人知。
通常在这种情况下,您必须进行权衡。保护代码真的有多重要?那里是否有真正的秘密(例如,对银行转账进行对称加密的密钥),或者您只是偏执?选择使您能够最快地开发出最好的产品的语言,并且要对您的新颖创意的价值抱有现实的态度。
如果您确定确实需要安全地执行许可证检查,则将其编写为一个小的 C 扩展,以便可以对许可证检查代码进行额外的难度(但并非不可能!)以进行反向工程,并将大部分代码保留在 Python 中。
您必须使用正确的工具来完成正确的事情,并且 Python 并非旨在被混淆。恰恰相反;一切都是开放的,或者很容易在 Python 中显示或修改,因为这是该语言的理念。
如果您想要看不见的东西,请寻找其他工具。这不是一件坏事,很重要的一点是,有几种不同的工具可用于不同的用途。
即使已编译的程序也可以进行逆向工程,所以不要以为您可以完全保护任何代码。您可以分析混淆的 PHP,破坏 Flash 加密密钥等。每次都会破解较新版本的 Windows。
您不能阻止某人滥用您的代码,但是您可以很容易地发现某人是否在使用您的代码。因此,这只是一个偶然的法律问题。
如今,商业模式倾向于销售服务而不是产品。您不能复制,盗版或盗用服务。也许是时候考虑顺其自然了...