反编译Python 3.5 .pyc

时间:2016-03-01 23:26:58

标签: python-3.x python-3.5 decompiler

我一直在寻找并且找不到任何可以帮助我反编译Python 3.5的东西。有人知道吗?

3 个答案:

答案 0 :(得分:10)

我所知道的处理Python 3.5的人:

  1. uncompyle6
  2. pycdc
  3. [Disclamer:我开发1]

    uncompyle6(用Python编写)处理Python 3.5中引入的操作码,而pycdc(用C ++编写)在这里仍然有点缺乏。但是这些操作码只在使用新的Python 3.5语言功能时出现。因此,如果底层程序适用于早期版本的Python,那么在pycdc中遇到这种情况的可能性可能会很小。

    Python 3.6和3.7的情况略有不同。 Python 3.6 adds some function-call opcodes and changes the semantics of other opcodes。因此,与3.5相比,即使代码没有使用Python 3.5或3.6中使用的任何新功能,新的操作码也会出现。 Python 3.7,再次,adds method opcodes并改变了其他人的语义;而且现在pycdc并不支持。

    uncompyle6正在通过各种错误报告来解决其中的一些问题。随着3.6的推出,更多新的3.5操作码和功能出现的次数更多。

    uncompyle6在处理控制流程方面很弱,即使它可能是目前的领跑者。因此,我在这里所做的是创建一个new project altogether just to handle Python control flow。由于Python丰富的控制结构,仅仅这一点很难。除了需要对控制流图表进行特殊处理和边缘的异常处理之外,还有else块可以作为forwhile和{{1}的一部分出现结构;此外,还有try块。

    当该项目可以很好地处理事情时(现在它不能),我会以某种非常有限的形式将它集成到uncompyle中,就像在3.7中一样。或者也许我会用这个新代码分叉或放入一个只有3.7的分支。这很难;欢迎志愿者来到这里。

    虽然uncompyle6和pycdc都没有认真跟上Python的变化,但是现在uncompyle6做得更彻底了。您可以查看每个问题的问题跟踪器,以了解最新情况。

    因此,当uncompyle6出现问题时,我的建议是使用pycdc,或者在可行的情况下,将结果与之比较。

答案 1 :(得分:1)

要反编译已编译的 .pyc python3文件,我在当前的 Ubuntu操作系统中使用了uncompyle6,如下所示:

(i)安装uncompyle6:             pip3安装uncompyle6

(ii)从.pyc文件创建.py文件运行:             uncompyle6 -o。 your_filename.pyc

(iii)将使用相同的现有 .pyc 文件名自动创建新的 .py 文件。

希望这会有所帮助。

答案 2 :(得分:0)

现在是private void button1_Click(object sender, EventArgs e) { string connetionString; SqlConnection cnn; connetionString = @"Data Source=test;Initial Catalog=test;User ID=test;Password=test"; cnn = new SqlConnection(connetionString); cnn.Open(); MessageBox.Show("Connection Open !"); cnn.Close(); } ,最新的uncompyle6很好地支持Python 3.8.0->也应该很好地支持Python 3.5。

  • 示例:

    • 2020-01-06
  • 输出:

    • uncompyle6 ../pyc/utils.cpython-38.pyc > ../pyc/utils.py py与origin py: