是否可以从 .py 文件生成的 .pyc 文件中获取一些信息?
9 回答
Uncompyle6适用于 Python 3.x 和 2.7 - 推荐选项,因为它是最新的工具,旨在统一早期的分支并专注于自动化单元测试。GitHub 页面有更多详细信息。
- 如果您使用 Python 3.7+,您还可以尝试decompyle3,它是 Uncompyle6 的一个分支,专注于 3.7 及更高版本。
- 如果需要,请在这些项目上提出 GitHub 问题 - 两者都在一系列 Python 版本上运行单元测试套件。
使用这些工具,您可以获取包含变量名和文档字符串的代码,但没有注释。
较旧的Uncompyle2仅支持 Python 2.7。前段时间这对我来说很有效,可以将 .pyc 字节码反编译为 .py,而 unpyclib 因异常而崩溃。
你可以试试Easy Python Decompiler。它基于 Decompyle++ 和 Uncompyle2。它支持反编译python 1.0-3.3版本
注意:我是上述工具的作者。
是的,你可以unpyclib
在pypi上找到它。
$ pip install unpyclib
比你可以反编译你的 .pyc 文件
$ python -m unpyclib.application -Dq path/to/file.pyc
是的。
我使用uncompyle6反编译(甚至支持最新的 Python 3.8.0):
uncompyle6 utils.cpython-38.pyc > utils.py
原始 python 和反编译 python 比较看起来像这样:
所以你可以看到,几乎一样,反编译效果非常好。
Decompyle++ (pycdc) 是唯一对我有用的:https ://github.com/zrax/pycdc
对的,这是可能的。
有一个完美的开源 Python (.PYC) 反编译器,名为 Decompyle++ https://github.com/zrax/pycdc/
Decompyle++ 旨在将编译后的 Python 字节码转换回有效且人类可读的 Python 源代码。虽然其他项目已经取得了不同程度的成功,但 Decompyle++ 的独特之处在于它寻求支持来自任何版本的 Python 的字节码。
我已经为此工作了几个小时,终于有了使用 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 源代码,但没有其他工作。
使用 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)
只需以与其他版本相同的格式添加您已安装的版本并保存。它至少会运行。