如果真的有“最佳”方式,那么发布 python 应用程序并确保人们不能(轻松)对您的算法/安全性/工作进行逆向工程的最佳方式是什么?
如果没有“最佳”方式,有哪些不同的选择?
背景:我喜欢用 Python 编码,并希望用它发布更多的应用程序。我想知道的一件事是人们是否有可能绕过我输入的任何许可代码,或者能够窃取我的整个源代码库。我听说过 Py2Exe 和类似的应用程序,但我很好奇是否有“首选”方法,或者这个问题是否只是生活中的事实。
如果真的有“最佳”方式,那么发布 python 应用程序并确保人们不能(轻松)对您的算法/安全性/工作进行逆向工程的最佳方式是什么?
如果没有“最佳”方式,有哪些不同的选择?
背景:我喜欢用 Python 编码,并希望用它发布更多的应用程序。我想知道的一件事是人们是否有可能绕过我输入的任何许可代码,或者能够窃取我的整个源代码库。我听说过 Py2Exe 和类似的应用程序,但我很好奇是否有“首选”方法,或者这个问题是否只是生活中的事实。
通过默默无闻的安全永远不会奏效。如果您必须使用专有许可证,请通过法律强制执行,而不是半生不熟的混淆尝试。
如果您担心他们学习您的安全(例如密码学)算法,同样适用。真实、有用的安全算法(如 AES)是安全的,即使该算法是完全已知的。
即使您使用 C# 或 Java 之类的编译语言,如果人们有动力并具备技术能力,他们也可以执行逆向工程。混淆不是对此的可靠保护。
您可以在您的软件的最终用户许可协议中添加禁止逆向工程。大多数专有公司都这样做。但这并不能防止违规,它只会给你法律追索权。
最好的解决方案是提供产品和服务,在这些产品和服务中,用户读取您的代码的权限不会损害您销售产品或服务的能力。您的业务基于提供的服务或订阅数据的定期更新,而不是代码本身。
示例:Slashdot 实际上使他们的网站代码可用。这会损害他们运行网站的能力吗?不。
另一种补救措施是设定您的价格点,以便盗版您的代码的努力比简单地购买合法许可证来使用您的产品更昂贵。Joel Spolsky 在他的文章和播客中对这种效果提出了建议。
用Python发布商业 mac 桌面应用程序,我们完全按照其他答案中的描述进行操作;用体面的 EULA 保护自己,而不是混淆视听。
我们从来没有遇到过人们对我们的代码进行逆向工程的麻烦。如果我们这样做,我相信我们可以采取法律行动。所以,是的,这是生活中的事实。但是一个并不太难相处的人。只需找一位体面的律师,写出体面的 EULA。
你要找的词是模糊的。一个快速的谷歌揭示:
http://www.lysator.liu.se/~astrand/projects/pyobfuscate/
但:
a) 如果侵犯版权成为问题,那么法律站在您这边(只要您在所有文件中包含适当的版权声明)。
b) 如果你很聪明,也可以从开源应用程序中获利。
c)如果您希望您的知识产权真正安全,那么唯一的答案是首先不要让任何人拥有它:将您的应用程序编写为网络应用程序,(我建议使用 django)并且只有您的网络托管服务提供商有访问您的代码。
py2exe
在 Windows 上,py2exe 是向最终用户发送代码的一种方式,py2exe 捆绑了 python 解释器、必要的 dll 和编译为 python 字节码的代码。
以下是 python 字节码指令,以了解它的外观:
http://www.python.org/doc/2.5.2/lib/bytecodes.html
或者你可以使用dis反汇编一些 pyc/pyo 文件。
因此,使用 py2exe 类似于分发已编译的 python (pyc/pyo) 文件。
剥皮 C++ 编译器
Shedskin 编译器将 python 的子集编译为 C++,您可以使用任何编译器将其编译为本机代码。
pypy
我对 PyPy 不太了解。根据他们的文档,Pypy 能够生成 C 代码。