我一直在寻找能够帮助我反编译Python 3.5的工具,但是一直没有找到。有谁知道有这样的工具吗?
我一直在寻找能够帮助我反编译Python 3.5的工具,但是一直没有找到。有谁知道有这样的工具吗?
SETUP_LOOP
来进一步更改代码生成方式。
uncompyle6正在解决其中的一些问题,并受到各种错误报告的推动。随着3.6的引入,越来越多的新的3.5操作码和功能更加频繁地出现。uncompyle6在处理控制流方面对3.7的支持较弱,对3.8的支持甚至更弱。因此,我创建了一个全新的项目来处理Python控制流程。由于Python具有丰富的控制结构,仅仅这一点就很难。除了需要特殊处理异常处理和控制流图中的边缘之外,还有可能出现在for
、while
和try
结构中的else
块,以及finally
块。
当该项目能够合理地处理这些事情时(目前还无法做到),我将首先将其放入项目https://github.com/rocky/python-decompile3中的派生代码。这很困难;欢迎志愿者加入。
尽管未编译的6和pycdc都没有认真跟上Python的变化,但目前来看,未编译的6做得更全面。您可以查看每个问题的问题跟踪器,了解事情的最新状况。
最近使用uncompyle6和decompyle3的历史表明,修复一些问题可能会破坏其他问题。让我解释一下。 uncompyle6
和decompyle3
模式匹配指令。可能有一个特定的模式,失败率达到50%。随着时间的推移,我会将模式改进为更复杂的模式,失败率更低,例如25%,但以前使用50%模式的特定实例已经可以工作。
最近我们在decompyle3和uncompyle6中添加了额外的检查,以在语法缩减时进行附加的流控制检查。然而,这再次表明需要使用控制流支配者信息进行更好的重新思考。这可以在decompyle3的fork上完成。
考虑到这一点,我的建议是当uncompyle6出现问题时,尝试使用不同的版本、使用pycdc,或者在实际操作中比较不同反编译工具的结果。
assert
语句变成了 if not x raise AssertionError
,但除此之外一切正常) - andyhasitpython3
文件,我在我的当前Ubuntu操作系统中使用了 uncompyle6
如下:
(i) 安装 uncompyle6:
pip3 install uncompyle6
(ii) 从 .pyc 文件创建 .py 文件运行:
uncompyle6 -o . your_filename.pyc
(iii) 自动创建一个新的 .py 文件,具有相同的现有 .pyc 文件名。
希望这会有所帮助。截至目前为止,最新的uncompyle6已经很好地支持Python 3.8.0 -> 应该也能很好地支持你的Python 3.5。
示例:
uncompyle6 ../pyc/utils.cpython-38.pyc > ../pyc/utils.py
输出:
origin
py和decompiled
py之间的对比: