【发布时间】:2011-07-14 07:43:18
【问题描述】:
是否可以从 .py 文件生成的 .pyc 文件中获取一些信息?
【问题讨论】:
标签: python decompiling pyc compiled
是否可以从 .py 文件生成的 .pyc 文件中获取一些信息?
【问题讨论】:
标签: python decompiling pyc compiled
Uncompyle6 适用于 Python 3.x 和 2.7 - 推荐选项,因为它是最新的工具,旨在统一早期的分支并专注于自动化单元测试。 GitHub page 有更多详细信息。
使用这些工具,您可以获取包含变量名和文档字符串的代码,但不包含 cmets。
较旧的Uncompyle2 仅支持 Python 2.7。前段时间这对我来说很有效,可以将 .pyc 字节码反编译为 .py,而 unpyclib 因异常而崩溃。
【讨论】:
uncompyle6 也可通过decompiler.com在线获得
你可以试试Easy Python Decompiler。它基于 Decompyle++ 和 Uncompyle2。 它支持反编译python版本1.0-3.3
注意:我是上述工具的作者。
【讨论】:
是的,您可以通过 pypi 上的unpyclib 获取它。
$ pip install unpyclib
你可以反编译你的 .pyc 文件
$ python -m unpyclib.application -Dq path/to/file.pyc
【讨论】:
print __copyright 崩溃——为什么它使用不带括号的print 的 Python 2.7 版本?
unpyclib 的第一个和最后一个版本was in 2009,可以肯定地说这是一个仅限 Python 2 的程序。
是的。
我用uncompyle6反编译(甚至支持最新的Python 3.8.0):
uncompyle6 utils.cpython-38.pyc > utils.py
原始python和反编译python对比如下:
所以你可以看到,几乎一样,反编译效果是VERY GOOD。
【讨论】:
uncompyle6 太不可思议了。
Decompyle++ (pycdc) 是唯一对我有用的:https://github.com/zrax/pycdc
【讨论】:
是的,有可能。
有一个完美的开源 Python (.PYC) 反编译器,叫做 Decompyle++ https://github.com/zrax/pycdc/
Decompyle++ 旨在将编译后的 Python 字节码转换回有效且人类可读的 Python 源代码。 虽然其他项目已经取得了不同程度的成功,但 Decompyle++ 的独特之处在于它寻求支持来自任何版本的 Python 的字节码。
【讨论】:
安装使用 pip install pycompyle6
pycompyle6 文件名.pyc
【讨论】:
我已经为此工作了几个小时,终于有了使用 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-mastercd ../上一级目录,cmake --build anotherFolder
pycdc.exe 将在anotherFolder\Debug 中。
在控制台中执行pycdc.exe onlyhopeofgettingmycodeback.pyc 之类的操作,它会打印出源代码。我有 Python 3.9.6 源代码,但没有其他工作。
【讨论】:
build 文件夹,然后在你调用cmake .. 的build 文件夹中
如果您需要反编译 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)
只需将您安装的版本以与其他版本相同的格式添加并保存。它至少会运行。
【讨论】: