Python > Uncompyle2 - 用法

8

我正在尝试反编译一些 .pyc 文件——只需要从中获取一些基本数据,听说最好的方式是使用 Uncompyle2,

所以我安装了 Python27(Win) ,然后从https://github.com/wibiti/uncompyle2安装了 Uncompyle2。到目前为止一切都没问题,现在我想知道如何使用它,readme 上说我需要输入 uncompyle2 --h 获取更多帮助,但是我得到了一个“未定义”的消息,接着我尝试在解释器中通过 import uncompyle2 导入脚本,我认为模块已加载(当我在解释器中键入 uncompyle2 时,它会说已经加载了来自 __init__ 的函数),但仍然无法使其功能正常工作,如果我尝试执行任何操作,它都会显示“语法错误”(即使我将每个命令都按照 readme 中的指示输入),--h 也不起作用,

我做错了什么?

顺便说一句,我尝试找一些在线转换器,但是由于这是 2.6.4 版本的 Python 编译文件,我找不到任何可以使用的工具。


你应该在终端中键入uncompyle2 --h,而不是Python解释器中。对于Windows系统,你可能需要编辑PATH变量(搜索Google),将包含uncompyle2的文件夹加入其中。 - Anubhav C
4个回答

13

来自 IDLE

import uncompyle2
with open("uncompiled file.py", "wb") as fileobj:
    uncompyle2.uncompyle_file("afile.pyc", fileobj)

结果应该是您未编译的源代码。

编辑 2/15/18

对于Python 3,请使用uncompyle 6并以"w"模式(而不是"wb")打开输出文件。

import uncompyle6
with open("uncompiled file.py", "w") as fileobj:
    uncompyle6.uncompyle_file("afile.pyc", fileobj)

你真是个救命恩人 :) - dig_123
我在使用Python 3的uncompyle6时遇到了“TypeError:需要类似字节的对象,而不是'str'”错误。 - Pyd

1

我刚刚重新尝试了https://github.com/wibiti/uncompyle2的版本。

但是它无法导入。我不得不搜索库并发现它已被重命名...所以这是对我有效的代码:

import uncompyle6
with open("uncompiled file.py", "wb") as fileobj:
    uncompyle6.uncompyle_file("yourpycfile.pyc", fileobj)

我在使用Python 3的uncompyle6时遇到了TypeError:需要一个类似字节的对象,而不是'str'。 - Pyd

1
我想补充一下已接受的答案,建议在同一目录下执行所有操作。当我试图从其他地方运行它时,得到了一个空的“未编译文件.py”文件夹。整个脚本。
import os

#this should be /folder_where_py_filtes_were/__pycache__/ in python3
os.chdir("C:\Dir where my pyc is")
import uncompyle2
with open("uncompiled file.py", "wb") as fileobj:
    uncompyle2.uncompyle_file("afile.pyc", fileobj)

除此之外,你是个了不起的用户2682863!你拯救了我的项目。

确保你从 /pycache/ 解密即可。 - Vincent Buscarello
告诉我那个怎么样,我实际上还没有在3中测试过它。 - Vincent Buscarello

1
要从命令行运行(例如PowerShell),您需要在Scripts中运行uncompyle2脚本,如果您将Python安装到C:\ Python,则可能位于C:\ Python \ Scripts中。这将反编译文件somefile.pyc并创建文件c:\ temp \ decompiled.py。
PS C:\ Python \ Scripts> python .\uncompyle2 -o c:\temp\decompiled.py somefile.pyc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接