Python3代码混淆工具

6
有没有现成的Python3代码混淆工具?
请不要试图教我,如果我想隐藏/混淆我的代码,Python不是正确的选择。或者说正确的许可证应该保护代码而不是混淆...
更新:这个问题并不重复于问题如何保护Python代码?:我只是问是否有一个混淆Python的工具。没有更多,也没有更少。(如果没有,我想知道为什么我会得到这么多反馈...)
6个回答

7
无论你做什么,Python 解释器在某个时刻都会读入未经混淆的 Python 字节码。因此很容易就可以还原出你的源代码(不包括注释和非显而易见的排版)。这就是为什么大家都说 Python 几乎不可能被混淆。几乎不可能混淆 Python 的事实意味着没有好的工具来完成这项任务。如果你想说“我知道这不能很有效地完成,但是否有任何工具可以做到?”那只能算是一厢情愿了。
你可能能够采用标准加密工具对代码进行加密,并编写一个小型的包装程序来解密你的 Python 代码并运行程序,然后在程序结束时删除未经加密的代码。如果你想花费过多的精力,可能也可以使用 C API 并将 Python 解释器嵌入到 C 程序中,在内存中将未经加密的 Python 传递给解释器,而不是直接从磁盘文件中读取。
请注意,这些方案仍然相对容易被攻破,并且如果你想提供可导入的 Python 模块(而不是整个程序),则完全不起作用。这就是为什么我不指望已经有人为你编写了这样的工具。

将以下与编程有关的内容从英语翻译成中文。只返回翻译后的文本:即使它没有提供现有工具的名称/链接,也给予答案+1。 - gecco
一个好的混淆器会在保持程序逻辑的同时,将源代码变成一团难以阅读的混乱,这样反编译也无法提供太多帮助。 - Amnon
@Amnon,而且这在任何意义上对Python来说真的很难。你可以乱改本地变量名并引入一堆没有任何重要作用的冗余代码。但是,需要进行 非常有效 的整个程序分析才能确定哪些全局名称和属性名称是安全可乱序的,因为它们都可以使用运行时字符串动态访问,而不是代码中可见的标识符。大多数程序不会做太多这方面的操作,但是很难通过静态分析证明给定的名称永远无法以这种方式访问。 - Ben

5
如果我是你,我不会采取混淆的方法,而是探索替代方式来传递可执行二进制文件而不是(字节)代码。
我知道的工具(可能还有其他工具):
- http://www.ohloh.net/p/py2c (将Python转换为C代码,然后可以编译) - http://www.pyinstaller.org/ - http://cx-freeze.sourceforge.net/ - http://www.py2exe.org/ (仅限Windows) - http://svn.pythonmac.org/py2app/py2app/trunk/doc/index.html (仅限Mac)
我不知道这些工具有多少防黑客功能,但我认为值得一看。
编辑:该死,我错过了Python 3部分。你没有写任何关于产品本身(操作系统,GUI等)的内容,所以帮助有点困难。如果它也可以是Python 2代码,但你已经全部使用Python 3编写了你的代码,我建议使用3to2

您提供的py2c页面没有任何证据表明该项目实际存在并且可以正常工作,据我所知,任何有意义的完全通用的Python到C转换器都不可能存在。我认为所有其他转换器只是将Python解释器与Python字节码捆绑在一个单独的可执行文件中,这只会比仅发送.pyc文件略微增加一些恢复源代码的难度。 - Ben

3
我建议使用PyArmor。它将代码转换为二进制形式。唯一的缺点是,您需要为每个操作系统分别混淆代码。

1
它也是商业软件,但是使用免费许可证,不能用于商业应用程序,并且非常有限。 - Hossein

1

Pyminifier 是一个 Python 代码缩小器、混淆器和压缩器。

该工具适用于 Python 3。

更新:该项目已停止。


4
这个项目看起来确实不错,只是最后一次提交是在2015年6月,而且还有很多问题没有解决。 - NicolasWebDev
1
它已经死透了。我甚至使用了一个更新的分支,但是出现了各种问题,导致一些东西没有正确转换。 - WestCoastProjects

1
没有任何有用的方式可以混淆Python代码,也没有任何理由让你这样做。您似乎想混淆代码以保护它。这是完全没有意义的,因为您可以只发送.pyc文件,这意味着您根本不发送源代码。即使只发送.pyc文件也无法帮助您,因为还存在.pyc文件的反编译器。
如果您的程序相对简单且代码编写得很好,使用cx-freeze、py2exe等创建可执行文件后,.pyc文件将在可执行文件中,因此稍微难以找到,并且更少人会发现您在使用Python,所以这可能会有所帮助。但更重要的是,它可能会使用户安装更简单。他们会喜欢的。
如果您真的想以有用的方式混淆代码,请将所有内容都转换为使用Cython,并生成C文件进行编译。这也将加速程序。然而,Cython并不完全与Python兼容,因此您可能需要进行更改。
我知道您不想听到这个,但我会为其他人的利益说出来:
当然,所有这些都是愚蠢和误导的。开放源代码对您有好处。真的。您不应该保护您的代码,而应该让尽可能多的人看到和参与它。
请相信我:您的主要担忧应该是获取更多用户,而不是减少盗版行为。通过使您的软件更好而不是更糟,您可以吸引更多的用户。开放源代码将有助于这一点。

4
如果你的软件针对开源社区和/或私人用户,我完全同意你所说的一切。但是对于面向已知客户群体分发的商业应用程序来说,情况并非如此。 - gecco
@gecco:是的,商业应用程序也同样适用。我写这个答案时考虑了商业应用程序。对于分发给已知客户群体的应用程序来说,这一点非常真实,因为您知道谁拥有副本,因此您可以更容易地找到制作副本的罪犯。无论如何,混淆代码都不能帮助保护您的应用程序免受盗版。 - Lennart Regebro
在biicode博客(http://blog.biicode.com/bii-internals-compiling-your-python-application-with-cython/)上,有一个使用Cython的教程,正如@LennartRegebro所建议的那样。 - hithwen
1
当目标市场是中国时,开源并不是一个好主意。 - WestCoastProjects
混淆代码并不能阻止人们运行它。这对版权保护完全没有用处。 - Lennart Regebro
显示剩余3条评论

0

隐藏代码的最好方法是不发布它。

宣传一项服务 - 您接收他们的数据,然后返回处理后的数据。传输可以通过网络、电子邮件、DHL、信鸽、电话、引力脉冲等方式进行...


我会承认实用性存在一个滑动比例。你是说在SAS和代码安全之间的权衡使你现在更倾向于不选择SAS路线吗? - Paddy3118

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接