是否可以从 .py 文件生成的 .pyc 文件中获取一些信息?
Uncompyle6 适用于 Python 3.x 和 2.7 - 推荐选项,因为它是最新的工具,旨在统一早期的分支并专注于自动化单元测试。 GitHub page 有更多详细信息。
如果您使用 Python 3.7+,您还可以尝试 decompyle3,它是 Uncompyle6 的一个分支,专注于 3.7 及更高版本。
如果需要,请在这些项目上提出 GitHub 问题 - 两者都在一系列 Python 版本上运行单元测试套件。
使用这些工具,您可以获取包含变量名和文档字符串的代码,但没有注释。
旧版 Uncompyle2 仅支持 Python 2.7。前段时间这对我来说很有效,可以将 .pyc 字节码反编译为 .py,而 unpyclib 因异常而崩溃。
将来防止这种情况
有关可能在您的编辑器或 IDE(包括 VS Code)中起作用的一些提示,请参阅 this answer。
您可以尝试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
的 lib\site-packages\unpyclib\applcation.py 中的 Python 3.6 中崩溃——为什么它使用不带括号的 Python 2.7 版本的 print
?
unpyclib
的第一个和最后一个版本 was in 2009,可以肯定地说它是仅 Python 2 的程序。
是的。
我使用 uncompyle6 反编译(甚至支持最新的 Python 3.8.0):
uncompyle6 utils.cpython-38.pyc > utils.py
原始 python 和反编译 python 比较看起来像这样:
https://i.stack.imgur.com/Zw0aN.jpg
所以你可以看到,几乎一样,反编译效果非常好。
uncompyle6
令人难以置信。
Decompyle++ (pycdc) 是唯一对我有用的:https://github.com/zrax/pycdc
在 Decompile Python 2.7 .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-master
cd ../ 上一级目录,
然后: cmake --build anotherFolder
pycdc.exe
将在 anotherFolder\Debug
中。
在控制台中执行类似 pycdc.exe onlyhopeofgettingmycodeback.pyc
的操作,它会打印出源代码。我有 Python 3.9.6 源代码,但没有其他工作。
build
文件夹,然后在您调用 cmake ..
的 build
文件夹中创建
对的,这是可能的。
有一个完美的开源 Python (.PYC) 反编译器,称为 Decompyle++ https://github.com/zrax/pycdc/
Decompyle++ 旨在将编译后的 Python 字节码转换回有效且人类可读的 Python 源代码。虽然其他项目已经取得了不同程度的成功,但 Decompyle++ 的独特之处在于它寻求支持来自任何版本的 Python 的字节码。
使用 pip install pycompyle6 安装
pycompyle6 文件名.pyc
如果您需要反编译 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)
只需以与其他版本相同的格式添加您已安装的版本并保存。它至少会运行。
uncompyle6
也可在 decompiler.com 上在线获取