如何反编译使用py2exe编译的exe文件?

28

如何反编译由py2exe编译的exe文件?

只有一个exe文件,没有任何zip文件。

如何将其反编译为pyc或pyo文件?


4
为什么你希望能够做这件事? - Karl Knechtel
2
如果没有 library 压缩文件,你几乎无法对其进行反转。 - Rafe Kettler
1
据我所知,exe文件是一种封装类型,因为我的Linux包管理器以此方式打开它们。 - motoku
3
py2exe可以将library.zip打包到.exe文件中。假设这里的情况是如此(而不仅仅是缺少library.zip),那么您只需从.exe文件中提取文件(将其视为zip文件)即可得到.pyc文件。要将pyc反编译为py,请参见此处:http://stackoverflow.com/questions/378127/pyc-to-py-files。 - Tony Meyer
4个回答

24
您可以使用unpy2exe提取.pyc文件,然后使用pyREtic获取源代码。我猜您可以阅读HOWTO并了解如何使用这些程序,但基本上您需要到达unpy2exe.py的位置并运行:

unpy2exe.py [-h] [-o OUTPUT_DIR] [-p PYTHON_VERSION] filename

然后到达REpdb.py的位置并运行:

REpdb.py

set_project [new project name]

选择Python版本

fs_um_decompile [pyc文件的位置]

源代码应该在...\Projects[new project name]\sourcecode\fs_um\中。


unpy2exe 对我来说非常好用。然而,pyREtic 却出现了一个 TypeError 错误,错误信息显示一个字符串被视为了列表,我在网络上找不到相关解码方法。该工具似乎是专为反混淆字节码而设计的。对于我的问题,使用 uncompyle6 工具就足够了。提供源代码链接是正确的做法,但是对于 uncompyle6 和 unpy2exe 两个工具,直接使用 pip install 安装也可以。 - Martin Dorey

9

另一种方法是直接从内存中获取Python字节码转储,Immunity Inc发表了一篇关于这个主题的论文,并提供了一个工具包,可以将内存中的字节码反编译为.py源代码。 pyREtic


8

1
使用提供的脚本这里。它需要安装原始的py2exe Python模块。此外,您必须确保使用与生成可执行文件时相同的Python版本。否则,该脚本将为.pyc生成无效的魔数。 稍后,您可以使用uncompyle2来恢复原始的.py源代码。

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