完全反编译python编译的(* .pyc)文件是否容易?

时间:2010-08-12 02:20:35

标签: python bytecode

我想知道反编译python字节代码有多容易。我在python中创建了一个应用程序,我希望它是安全的。我正在使用py2exe,它基本上依赖于python编译的文件。

这样可以保护代码吗?

4 个答案:

答案 0 :(得分:7)

取决于您对“完全”(在“完全反编译”中)的定义...... ;-)。你不会轻易找回原始的Python源代码 - 但是获取字节码很容易,并且标准库模块dis完全存在以使字节码易于阅读(尽管它仍然是 字节码,不是完整的Python源代码; - )。

答案 1 :(得分:4)

编译.pyc不保护代码。它们很容易阅读。见How do I protect Python code?

答案 2 :(得分:1)

如果你在网上搜索,你可以找到Python字节码的反编译器:有一个免费的下载版本,但它只能处理Python 2.3之前的字节码,还有一个online service,可以反编译到2.6版。

对于更新版本的Python字节码,似乎还没有任何反编译器,但这几乎肯定是因为没有人觉得需要编写一个而不是字节码本身的任何基本困难。

有些人试图通过修改解释器来保护Python字节码:没有特别的理由说明为什么你不能用字节码使用的不同值编译自己的解释器:这将阻止用{{1来简单检查代码但是,对于任何坚定的攻击都不会长久存在,而且所有代码都可以用来改善程序本身的代码。

简而言之,如果您想保护您的程序,请使用法律来执行此操作:使用适当的软件许可证并起诉那些忽略它的人。代码编写起来很昂贵,但最终结果很少是软件包中有价值的部分:数据更有价值。

答案 3 :(得分:0)

现在我们可以说:非常容易反编译,并且安全。

因为我已经使用uncompyle6反编译了(最新的3.8.0)Python代码:

uncompyle6 utils.cpython-38.pyc > utils.py

,反编译效果为近乎完美

  • origin pythondecompiled python

    • pyc uncompile utils

      • -> ALMOST 相同的py代码,但无注释

不要忘记,其他人可以使用unpy2exe

从使用py2exe创建的可执行文件中提取.pyc文件

因此您的方法不安全。