我一直在四处搜索,但没能找到任何可以帮助我反编译 Python 3.5 的东西。有人知道吗?
原文由 Matthew Zielke 发布,翻译遵循 CC BY-SA 4.0 许可协议
我一直在四处搜索,但没能找到任何可以帮助我反编译 Python 3.5 的东西。有人知道吗?
原文由 Matthew Zielke 发布,翻译遵循 CC BY-SA 4.0 许可协议
为了反编译已编译的 .pyc python3
文件,我在当前的 Ubuntu 操作系统 中使用了 uncompyle6
如下:
(i)uncompyle6的安装: pip3 install uncompyle6
(ii) 从 .pyc 文件创建 .py 文件运行: uncompyle6 -o。你的文件名.pyc
(iii) 将使用相同的现有 .pyc 文件名自动创建一个新的 .py 文件。
希望这会有所帮助。
原文由 Dhawaleswar 发布,翻译遵循 CC BY-SA 3.0 许可协议
我所知道的处理 Python 3.5(和其他 Python 版本)的是:
[免责声明:我开发 1]
uncompyle6(用 Python 编写)处理 Python 3.5 中引入的操作码,而 pycdc(用 C++ 编写)在这里仍然有点欠缺。但是这些操作码只有在使用新的 Python 3.5 语言特性时才会出现。因此,如果底层程序在较早版本的 Python 上运行,那么在 pycdc 中遇到这种情况的可能性可能很小。
不过,对于 Python 3.6 及更高版本,情况略有不同。 Python 3.6 添加了一些函数调用操作码并更改了其他操作码的语义。因此,与 3.5 相比,新的操作码甚至出现在不使用 Python 3.5 或 3.6 中使用的任何新功能的代码中。 Python 3.7 再次 添加了方法操作码 并更改了其他操作码的语义;现在 pycdc 不支持。 3.8 通过删除
SETUP_LOOP
对代码生成的更改比其他版本多一些。uncompyle6 正在解决其中的一些问题,并提出各种错误报告。随着 3.6 的推出,更多更新的 3.5 操作码和功能出现得更频繁。
uncompyle6 在处理控制流方面对于 3.7 来说很弱,对于 3.8 来说甚至更弱,尽管它可能是当前的领跑者。因此,我在这里所做的就是 完全创建一个新项目来处理 Python 控制流。由于 Python 丰富的控制结构,仅此一项就很难。除了需要对控制流图中的边进行特殊处理的异常处理之外,还有
else
块可以作为for
,while
bed2 的一部分出现, 和try
结构;此外,还有finally
块。当该项目可以相当好地处理事情时(现在它不能),我将首先将其放入项目 https://github.com/rocky/python-decompile3 的分叉代码中。这是很难的事情;这里欢迎志愿者。
尽管 uncompyle6 和 pycdc 都没有认真跟上 Python 的变化,但就目前而言,uncompyle6 做得更彻底。您可以查看每个问题的问题跟踪器,以了解最新情况。
uncompyle6 和 decompyle3 最近的历史是,事情已经到了解决一些问题可能会破坏其他问题的地步。让我解释。
uncompyle6
和decompyle3
指令模式匹配。可能有一个特定的模式在 50% 的时间内失败。随着时间的推移,我会将模式细化为更复杂、失败更少的东西,比如 25% 的时间,但特定实例使用之前使用的 50% 模式。最近,我们在 decompyle3 和 uncompyle6 中添加了额外的检查,以便在语法缩减时进行额外的流程控制检查。然而,这再次表明需要使用控制流支配信息进行更好的重新思考。这可以在 decompyle3 的分支上完成。
鉴于此,我目前的建议是,当 uncompyle6 出现问题时,尝试不同的版本,使用 pycdc,或者在可行的情况下,比较不同反编译器的结果。