探索和反编译python字节码

18 python decompiling

让我们说:

>>> def test(a):    
>>>    print a
Run Code Online (Sandbox Code Playgroud)

现在,我想探索测试在编译形式中的样子.

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
Run Code Online (Sandbox Code Playgroud)

我可以使用dis模块获取反汇编的表单:

>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
Run Code Online (Sandbox Code Playgroud)

是否有一个开源和维护的反编译器,我可以用来将字节码重新转换成可读的python代码?

更新:感谢建议反编译,但它已过时(python2.3),没有人再维护它了.有没有python2.5或更高版本?

小智 6

UnPyc

http://sourceforge.net/projects/unpyc/

它是旧的解压缩的维护分叉,更新为2.5和2.6.

  • 从项目的readme.txt:"D - 反编译(尚未实现)".所以不,这是转换器的不良替代品. (5认同)

小智 5

从github获取uncompyle2!:)


roc*_*cky 5

现在还有uncompyle6和更窄的decompyle3(适用于 Python 3.7 和 3.8,并且未打包)。这两个都是用 Python 编写的。还有用C++ 编写的pycdc

它们处理从 Python 1 开始到 Python 3 版本的多个版本的 Python 字节码,除非上面另有说明。

您可能会考虑的另一件事是字节码解释器,它允许您跟踪和/或单步执行字节码指令。

为此,有x-python解释器和trepanxpy类似 gdb 的调试器。请参阅所解释的 Python 字节码版本以及运行解释器所需的 Python 版本的链接。


Sha*_*men 2

反编译

Decompyle 是一个 Python 反汇编器和反编译器,它将 Python 字节码(.pyc 或 .pyo)转换回等效的 Python 源代码。还可以验证生成的代码(重新编译)。