是否可以从.py文件生成的.pyc文件中获取一些信息?
jobtbby31#
Python反编译是一个很难的问题,特别是对于最近的3.x版本。这就是为什么有各种各样的工具,都有限制和错误。然而,Python 2.7和更早的3.x版本应该工作得很好,即使是部分反编译也比失去一切要好。
Uncompyle6可以在Python 3.8之前运行,但有一些bug,在Python 2.7中运行良好。
*推荐选项作为开始,因为它旨在统一早期的分支并专注于自动化单元测试。
如果这不起作用,最好接下来尝试一下-特别是对于Python 3.7+:
decompyle3
rocky/decompile3
如果您仍然有问题,请查看uncompyle6和decompyle3 README,它们链接到可能更适合您的代码的其他工具。
uncompyle6
你可以恢复你的代码,包括变量名和文档字符串,但没有注解。有些代码可能无法成功反编译,特别是使用不寻常的控制流或更新的Python 3.x版本。这是由于这些反编译器中的错误,Python随着时间的推移改变了它的字节码。
uncompyle6和decompyle3都不支持Python 3.9或更高版本,对3.7或更高版本的支持也有限。Python中的新优化使反编译变得更加困难,并且这两个项目都缺乏代码贡献和赞助。您可以做些什么来帮助:
频繁的Git提交或备份显然是一个好主意。一些编辑器/IDE具有帮助恢复已删除文件的功能,即使未提交到Git。请参阅this answer,了解一些可能在编辑器或IDE中工作的指针,包括VS Code和JetBrains IDE,如PyCharm,GoLand和IntelliJ。
iklwldmw2#
您可以尝试***Easy Python Decompiler***。它基于Decompyle++和Uncompyle 2。它支持反编译python版本1.0-3.3注:我是上述工具的作者。
368yc8dk3#
是。
我使用uncompyle6反编译(甚至支持最新的Python 3.8.0):uncompyle6 utils.cpython-38.pyc > utils.py原始python和反编译的python比较看起来像这样:
uncompyle6 utils.cpython-38.pyc > utils.py
所以你可以看到,几乎相同,反编译效果非常好。
pvabu6sv4#
是的,你可以用unpyclib得到它,可以在 pypi 上找到。
unpyclib
$ pip install unpyclib
您可以反编译.pyc文件
$ python -m unpyclib.application -Dq path/to/file.pyc
up9lanfz5#
Decompyle++(pycdc)是唯一一个对我有效的:https://github.com/zrax/pycdc在反编译Python 2.7.pyc中提出
flvlnr446#
我已经花了几个小时,终于有了一个使用Decompyle++的解决方案:
https://cmake.org/download/
https://github.com/zrax/pycdc
pycdc-master
C:\Program Files\CMake\bin
我建议把你的pycdc-master文件夹放到另一个文件夹中,比如anotherFolder。现在,您可以在命令行中运行以下命令:
anotherFolder
cd anotherFolder
cmake pycdc-master
cd ../
cmake --build anotherFolder
pycdc.exe将在anotherFolder\Debug中。在控制台中执行类似pycdc.exe onlyhopeofgettingmycodeback.pyc的操作,它将打印出源代码。我有Python 3.9.6的源代码,其他的都不能用了。
pycdc.exe
anotherFolder\Debug
pycdc.exe onlyhopeofgettingmycodeback.pyc
dl5txlt97#
是的,有可能。有一个完美的开源Python(.PYC)反编译器,叫做Decompyle++ https://github.com/zrax/pycdc/Decompyle旨在将编译后的Python字节码转换回有效的、人类可读的Python源代码。虽然其他项目已经取得了不同的成功,但Decompyle的独特之处在于它寻求支持任何版本的Python的字节码。
xjreopfe8#
使用pip install pycompyle6安装pycompyle6文件名.pyc
pdkcd3nj9#
如果你需要反编译一个pyc,但已经安装了python3.9,你可以强制uncompyle 6运行。它并不完美,但它确实有效。只需编辑site-packages\uncompyle 6\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)
只需添加您已安装的版本,并将其保存为与其他版本相同的格式。它至少会跑。
9条答案
按热度按时间jobtbby31#
简介
Python反编译是一个很难的问题,特别是对于最近的3.x版本。这就是为什么有各种各样的工具,都有限制和错误。
然而,Python 2.7和更早的3.x版本应该工作得很好,即使是部分反编译也比失去一切要好。
试用工具
Uncompyle6可以在Python 3.8之前运行,但有一些bug,在Python 2.7中运行良好。
*推荐选项作为开始,因为它旨在统一早期的分支并专注于自动化单元测试。
如果这不起作用,最好接下来尝试一下-特别是对于Python 3.7+:
***注意:**这个
decompyle3
包来自rocky/decompile3
repo -拼写不同但内容相同如果您仍然有问题,请查看
uncompyle6
和decompyle3
README,它们链接到可能更适合您的代码的其他工具。限制
你可以恢复你的代码,包括变量名和文档字符串,但没有注解。
有些代码可能无法成功反编译,特别是使用不寻常的控制流或更新的Python 3.x版本。这是由于这些反编译器中的错误,Python随着时间的推移改变了它的字节码。
支持最新版本的Python
uncompyle6
和decompyle3
都不支持Python 3.9或更高版本,对3.7或更高版本的支持也有限。Python中的新优化使反编译变得更加困难,并且这两个项目都缺乏代码贡献和赞助。
您可以做些什么来帮助:
防止将来代码丢失
频繁的Git提交或备份显然是一个好主意。
一些编辑器/IDE具有帮助恢复已删除文件的功能,即使未提交到Git。请参阅this answer,了解一些可能在编辑器或IDE中工作的指针,包括VS Code和JetBrains IDE,如PyCharm,GoLand和IntelliJ。
iklwldmw2#
您可以尝试***Easy Python Decompiler***。它基于Decompyle++和Uncompyle 2。它支持反编译python版本1.0-3.3
注:我是上述工具的作者。
368yc8dk3#
是。
我使用uncompyle6反编译(甚至支持最新的Python 3.8.0):
uncompyle6 utils.cpython-38.pyc > utils.py
原始python和反编译的python比较看起来像这样:
所以你可以看到,几乎相同,反编译效果非常好。
pvabu6sv4#
是的,你可以用
unpyclib
得到它,可以在 pypi 上找到。您可以反编译.pyc文件
up9lanfz5#
Decompyle++(pycdc)是唯一一个对我有效的:https://github.com/zrax/pycdc
在反编译Python 2.7.pyc中提出
flvlnr446#
我已经花了几个小时,终于有了一个使用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的源代码,其他的都不能用了。dl5txlt97#
是的,有可能。
有一个完美的开源Python(.PYC)反编译器,叫做Decompyle++ https://github.com/zrax/pycdc/
Decompyle旨在将编译后的Python字节码转换回有效的、人类可读的Python源代码。虽然其他项目已经取得了不同的成功,但Decompyle的独特之处在于它寻求支持任何版本的Python的字节码。
xjreopfe8#
使用pip install pycompyle6安装
pycompyle6文件名.pyc
pdkcd3nj9#
如果你需要反编译一个pyc,但已经安装了python3.9,你可以强制uncompyle 6运行。它并不完美,但它确实有效。只需编辑site-packages\uncompyle 6\bin\uncompile.py
只需添加您已安装的版本,并将其保存为与其他版本相同的格式。它至少会跑。