反编译Python 2.7的.pyc文件

44

我已经搜索了很多地方,但找不到一个可以用于 Python 2.7 .pyc 的反编译器。有人知道是否有适用于 Python 2.7 的反编译器吗?谢谢

5个回答

85

如果还有人像我今天上午一样苦苦挣扎,我找到了一个适合我的解决方案:

Uncompyle

安装说明:

git clone https://github.com/gstarnberger/uncompyle.git
cd uncompyle/
sudo ./setup.py install

一旦程序安装完成(注意:它将被安装到系统范围内可访问的Python包中,因此应该在你的$PATH中),你可以像这样恢复你的Python文件:

uncompyler.py thank_goodness_this_still_exists.pyc > recovered_file.py

反编译器会在代码中添加一些噪音,主要以注释的形式出现,但是我发现反编译结果非常干净,并且与我的原始代码非常相似。你需要移除恢复文件末尾附近以“+++”开头的一行文本才能运行你的代码。


5
救了我的大忙!我将从现在开始将其添加到我的虚拟环境中... - kaleissin
5
我也受益匪浅。在提交到git之前,我运行了“rm *.py”以清理我的pyc文件,这么做虽然很聪明,但至少让我留下了美好的.py c文件,具有一定的讽刺意味。 - Eloff
2
@Eloff 一个包含 *.pyc 的 .gitignore 文件会比在每次提交之前记得删除 *.pyc 更容易!不过你可能已经知道这一点,并且对于拥有干净环境而言有些强迫症,就像许多程序员一样 :D - Milosz
2
谢谢分享。我曾不得不说服我的老板,隐藏.py代码文件没有意义。现在他相信我了 ;)。 - Prine
1
又有一个灵魂在这里得救了! - daigorocub
显示剩余6条评论

26

Decompyle++ (pycdc) 似乎适用于多个 Python 版本:https://github.com/zrax/pycdc

例如:

git clone https://github.com/zrax/pycdc   
cd pycdc
make  
./bin/pycdc Example.pyc > Example.py

4
真正的救星,只有它对我有效。 - Kenneth Hoste
3
在运行make之前,您需要运行“cmake .”来准备编译环境。 - RoundSparrow hilltx

21

1
即使在问题8中应用了补丁,我仍然无法让它与Python 2.7一起工作。 - Michael Hoffman
1
Python 2.7出现异常崩溃 - 使用Uncompyle2。 - RichVel
1
uncompyle2 对我来说非常棒! - AndrewSmiley
2
uncompyle6是一个更为现代化的工具,支持Python 2.7和3.x版本 - 更多信息请参见此答案 - RichVel
"uncompyle6" 也可以在 https://www.decompiler.com/ 上在线使用。 - Leo
显示剩余3条评论

10

4
好的!值得一提的是,这是专为Windows用户设计的。 - tutuDajuju
1
源代码在SourceForge上不可用,所以我现在会忽略这个工具。 - Bludzee
非常方便的工具!在Linux Mint上使用wine轻松反编译了我的Python 2.7文件,没有任何问题。 - sly

3
Ned Batchelder发布了一个简短的脚本,可以取消编译.pyc文件并反汇编其中的任何代码对象,因此您将能够看到Python字节码。看起来在较新版本的Python中,您需要注释设置modtime和打印它的行(但不要注释设置moddate的行)。
将其转换回Python源代码会更加困难,尽管从理论上讲是可能的。我假设所有适用于旧版本Python的程序都这样做。

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