218

是否可以从 .py 文件生成的 .pyc 文件中获取一些信息?

4

9 回答 9

202

Uncompyle6适用于 Python 3.x 和 2.7 - 推荐选项,因为它是最新的工具,旨在统一早期的分支并专注于自动化单元测试。GitHub 页面有更多详细信息。

  • 如果您使用 Python 3.7+,您还可以尝试decompyle3,它是 Uncompyle6 的一个分支,专注于 3.7 及更高版本。
  • 如果需要,请在这些项目上提出 GitHub 问题 - 两者都在一系列 Python 版本上运行单元测试套件。

使用这些工具,您可以获取包含变量名和文档字符串的代码,但没有注释。

较旧的Uncompyle2仅支持 Python 2.7。前段时间这对我来说很有效,可以将 .pyc 字节码反编译为 .py,而 unpyclib 因异常而崩溃。

于 2013-02-11T08:27:27.207 回答
34

你可以试试Easy Python Decompiler。它基于 Decompyle++ 和 Uncompyle2。它支持反编译python 1.0-3.3版本

注意:我是上述工具的作者。

于 2014-02-20T18:39:42.790 回答
29

是的,你可以unpyclibpypi上找到它。

$ pip install unpyclib

比你可以反编译你的 .pyc 文件

$ python -m unpyclib.application -Dq path/to/file.pyc
于 2011-04-18T14:07:44.700 回答
18

的。

我使用uncompyle6反编译(甚至支持最新的 Python 3.8.0):

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

原始 python 和反编译 python 比较看起来像这样:

pyc 反编译工具

所以你可以看到,几乎一样,反编译效果非常好

于 2020-01-06T07:42:05.683 回答
14

Decompyle++ (pycdc) 是唯一对我有用的:https ://github.com/zrax/pycdc

Decompile Python 2.7 .pyc中建议

于 2013-03-26T22:02:30.647 回答
4

对的,这是可能的。

有一个完美的开源 Python (.PYC) 反编译器,名为 Decompyle++ https://github.com/zrax/pycdc/

Decompyle++ 旨在将编译后的 Python 字节码转换回有效且人类可读的 Python 源代码。虽然其他项目已经取得了不同程度的成功,但 Decompyle++ 的独特之处在于它寻求支持来自任何版本的 Python 的字节码。

于 2016-07-17T09:23:52.790 回答
3

我已经为此工作了几个小时,终于有了使用 Decompyle++ 的解决方案:

  • 访问https://cmake.org/download/并安装 CMake。
  • 访问https://github.com/zrax/pycdc并获取此 repo 的副本:pycdc-master
  • 添加C:\Program Files\CMake\bin到PATH下的系统环境变量。

我建议将您的pycdc-master文件夹放入另一个文件夹,例如anotherFolder.

现在您可以在命令行中运行这些命令:

  • cd anotherFolder进入其中的文件夹pycdc-master
  • cmake pycdc-master
  • cd ../上一个目录,
  • 然后:cmake --build anotherFolder

pycdc.exe然后将在anotherFolder\Debug.

在控制台中执行类似pycdc.exe onlyhopeofgettingmycodeback.pyc操作,它将打印出源代码。我有 Python 3.9.6 源代码,但没有其他工作。

于 2021-07-23T01:14:50.417 回答
2

使用 pip install pycompyle6 安装

pycompyle6 文件名.pyc

于 2018-08-09T09:11:01.843 回答
0

如果您需要反编译 pyc 但安装了 python 3.9,您可以强制 uncompyle6 运行。它并不完美,但它确实有效。只需编辑site-packages\uncompyle6\bin\uncompile.py

def main_bin():
if not (sys.version_info[0:2] in ((2, 6), (2, 7), (3, 0),
                                  (3, 1), (3, 2), (3, 3),
                                  (3, 4), (3, 5), (3, 6),
                                  (3, 7), (3, 8), (3, 9)

只需以与其他版本相同的格式添加您已安装的版本并保存。它至少会运行。

于 2021-08-12T15:04:36.983 回答