如何将该字节码解码为常规的.py脚本?

时间:2019-09-05 09:06:17

标签: python python-2.7 reverse-engineering bytecode

此字节码来自exec marshal.loads('<BYTECODE>'),我想将其转换为带有清晰源代码的常规python脚本。 我无法粘贴所有字节码,因为它的大小约为4MB,因此我将链接附加到GitHub(在Pastebin上,文件太大)。

我尝试使用此代码来反转此字节码:

import sys
from sys import stdout
import uncompyle6
from uncompyle6.main import *
import marshal
x = marshal.loads('BYTECODE')
uncompyle6.main.uncompyle(2.7, x, sys.stdout)

但是它仅适用于较小的文件,例如:

c\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00@\x00\x00\x00sa\x00\x00\x00d\x00\x00d\x01\x00l\x00\x00Z\x00\x00d\x00\x00d\x02\x00l\x01\x00m\x02\x00Z\x02\x00\x01d\x00\x00d\x03\x00l\x03\x00m\x04\x00Z\x04\x00\x01d\x04\x00\x84\x00\x00Z\x05\x00d\x05\x00\x84\x00\x00Z\x06\x00d\x06\x00\x84\x00\x00Z\x07\x00e\x08\x00d\x07\x00k\x02\x00r]\x00e\x05\x00\x83\x00\x00\x01n\x00\x00d\x01\x00S(\x08\x00\x00\x00i\xff\xff\xff\xffN(\x01\x00\x00\x00t\x04\x00\x00\x00exit(\x01\x00\x00\x00t\x06\x00\x00\x00sha512c\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00C\x00\x00\x00s\t\x00\x00\x00d\x01\x00GHd\x00\x00S(\x02\x00\x00\x00Ns\x0c\x00\x00\x00import me :D(\x00\x00\x00\x00(\x00\x00\x00\x00(\x00\x00\x00\x00(\x00\x00\x00\x00s\n\x00\x00\x00bughela.pyt\x04\x00\x00\x00main\x05\x00\x00\x00s\x02\x00\x00\x00\x00\x01c\x01\x00\x00\x00\x07\x00\x00\x00\x03\x00\x00\x00C\x00\x00\x00s\xb5\x00\x00\x00|\x00\x00d\x01\x00 d\x02\x00k\x03\x00r\x1a\x00t\x00\x00\x83\x00\x00\x01n\x00\x00|\x00\x00d\x01\x00\x1f}\x00\x00t\x01\x00j\x02\x00t\x01\x00j\x01\x00\x83\x00\x00\x83\x01\x00}\x01\x00t\x01\x00j\x03\x00d\x03\x00t\x01\x00j\x02\x00\x83\x00\x00\x83\x02\x00}\x02\x00t\x04\x00|\x02\x00\x83\x01\x00j\x05\x00\x83\x00\x00}\x03\x00|\x01\x00j\x06\x00d\x04\x00\x16d\x05\x00\x17}\x04\x00|\x04\x00|\x01\x00j\x07\x00d\x06\x00\x16d\x07\x00\x17\x14}\x05\x00|\x03\x00|\x04\x00|\x05\x00!}\x06\x00|\x06\x00|\x00\x00k\x03\x00r\xac\x00t\x00\x00\x83\x00\x00\x01n\x00\x00d\x08\x00GHd\x00\x00S(\t\x00\x00\x00Ni+\x00\x00\x00s+\x00\x00\x00http://wargame.kr:8080/pyc_decompile/?flag=s\x0c\x00\x00\x00%m/%d/HJEJSHi\x03\x00\x00\x00i\x01\x00\x00\x00i\x1e\x00\x00\x00i\n\x00\x00\x00s\x07\x00\x00\x00GOOD!!!(\x08\x00\x00\x00t\x03\x00\x00\x00diet\x04\x00\x00\x00timet\t\x00\x00\x00localtimet\x08\x00\x00\x00strftimeR\x01\x00\x00\x00t\t\x00\x00\x00hexdigestt\x07\x00\x00\x00tm_hourt\x06\x00\x00\x00tm_min(\x07\x00\x00\x00t\x04\x00\x00\x00flagt\x03\x00\x00\x00nowt\x04\x00\x00\x00seedt\x02\x00\x00\x00hst\x05\x00\x00\x00startt\x03\x00\x00\x00endt\x02\x00\x00\x00ok(\x00\x00\x00\x00(\x00\x00\x00\x00s\n\x00\x00\x00bughela.pyt\x0c\x00\x00\x00GIVE_ME_FLAG\x08\x00\x00\x00s\x18\x00\x00\x00\x00\x01\x10\x00\n\x01\n\x01\x15\x01\x18\x01\x12\x01\x11\x01\x15\x01\r\x01\x0c\x00\n\x01c\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00C\x00\x00\x00s\x10\x00\x00\x00d\x01\x00GHt\x00\x00\x83\x00\x00\x01d\x00\x00S(\x02\x00\x00\x00Ns\x07\x00\x00\x00NOPE...(\x01\x00\x00\x00R\x00\x00\x00\x00(\x00\x00\x00\x00(\x00\x00\x00\x00(\x00\x00\x00\x00s\n\x00\x00\x00bughela.pyR\x03\x00\x00\x00\x14\x00\x00\x00s\x04\x00\x00\x00\x00\x01\x05\x01t\x08\x00\x00\x00__main__(\t\x00\x00\x00R\x04\x00\x00\x00t\x03\x00\x00\x00sysR\x00\x00\x00\x00t\x07\x00\x00\x00hashlibR\x01\x00\x00\x00R\x02\x00\x00\x00R\x11\x00\x00\x00R\x03\x00\x00\x00t\x08\x00\x00\x00__name__(\x00\x00\x00\x00(\x00\x00\x00\x00(\x00\x00\x00\x00s\n\x00\x00\x00bughela.pyt\x08\x00\x00\x00<module>\x01\x00\x00\x00s\x0e\x00\x00\x00\x0c\x01\x10\x01\x10\x02\t\x03\t\x0c\t\x04\x0c\x01

c\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00@\x00\x00\x00s\xfb\x02\x00\x00d\x00\x00d\x01\x00l\x00\x00Z\x00\x00d\x00\x00d\x01\x00l\x01\x00Z\x01\x00d\x00\x00d\x01\x00l\x02\x00Z\x02\x00d\x00\x00d\x01\x00l\x03\x00Z\x03\x00d\x02\x00Z\x04\x00d\x03\x00Z\x05\x00d\x04\x00Z\x06\x00d\x05\x00Z\x07\x00d\x06\x00Z\x08\x00d\x07\x00\x84\x00\x00Z\t\x00y2\x00e\t\x00\x83\x00\x00\x01e\x06\x00d\x08\x00\x17GHe\n\x00d\t\x00\x83\x01\x00Z\x0b\x00e\x0b\x00j\x0c\x00d\n\x00d\x0b\x00\x83\x02\x00Z\r\x00Wn\x0e\x01\x04e\x0e\x00k\n\x00r\xc7\x00\x01\x01\x01e\x05\x00d\x0c\x00\x17e\x07\x00\x17d\r\x00\x17e\x05\x00\x17d\x0e\x00\x17e\x07\x00\x17d\x0f\x00\x17GHe\x01\x00j\x0f\x00\x83\x00\x00\x01n\xd3\x00\x04e\x10\x00k\n\x00r0\x01\x01\x01\x01e\x05\x00d\x0c\x00\x17e\x07\x00\x17d\r\x00\x17e\x05\x00\x17d\x0e\x00\x17e\x07\x00\x17d\x10\x00\x17GHe\x05\x00d\x0c\x00\x17e\x07\x00\x17d\r\x00\x17e\x05\x00\x17d\x0e\x00\x17e\x07\x00\x17d\x11\x00\x17GHe\x03\x00j\x11\x00d\x12\x00\x83\x01\x00\x01e\x01\x00j\x0f\x00\x83\x00\x00\x01nj\x00\x04e\x12\x00k\n\x00r\x99\x01\x01\x01\x01e\x05\x00d\x0c\x00\x17e\x07\x00\x17d\r\x00\x17e\x05\x00\x17d\x0e\x00\x17e\x07\x00\x17d\x13\x00\x17GHe\x05\x00d\x0c\x00\x17e\x07\x00\x17d\r\x00\x17e\x05\x00\x17d\x0e\x00\x17e\x07\x00\x17d\x11\x00\x17GHe\x03\x00j\x11\x00d\x12\x00\x83\x01\x00\x01e\x01\x00j\x0f\x00\x83\x00\x00\x01n\x01\x00Xy\x19\x00e\x13\x00e\x0b\x00d\x14\x00\x83\x02\x00j\x14\x00\x83\x00\x00Z\x15\x00WnC\x00\x04e\x16\x00k\n\x00r\xf8\x01\x01\x01\x01e\t\x00\x83\x00\x00\x01e\x05\x00d\x0c\x00\x17e\x07\x00\x17d\r\x00\x17e\x05\x00\x17d\x0e\x00\x17e\x07\x00\x17d\x15\x00\x17GHe\x01\x00j\x0f\x00\x83\x00\x00\x01n\x01\x00Xy%\x00e\x17\x00e\x15\x00d\x16\x00d\x17\x00\x83\x03\x00Z\x18\x00e\x00\x00j\x19\x00e\x18\x00\x83\x01\x00Z\x1a\x00WnC\x00\x04e\x1b\x00k\n\x00rc\x02\x01\x01\x01e\t\x00\x83\x00\x00\x01e\x05\x00d\x0c\x00\x17e\x07\x00\x17d\r\x00\x17e\x05\x00\x17d\x0e\x00\x17e\x07\x00\x17d\x18\x00\x17GHe\x01\x00j\x0f\x00\x83\x00\x00\x01n\x01\x00Xe\x13\x00e\r\x00d\x19\x00\x17d\x1a\x00\x83\x02\x00Z\x1c\x00e\x1c\x00j\x1d\x00d\x1b\x00\x83\x01\x00\x01e\x1c\x00j\x1d\x00d\x1c\x00\x83\x01\x00\x01e\x1c\x00j\x1d\x00d\x1d\x00\x83\x01\x00\x01e\x1c\x00j\x1d\x00d\x1e\x00e\x1e\x00e\x1a\x00\x83\x01\x00\x17d\x1f\x00\x17\x83\x01\x00\x01e\x1c\x00j\x1f\x00\x83\x00\x00\x01e\t\x00\x83\x00\x00\x01e\x04\x00d\x0c\x00\x17e\x07\x00\x17d \x00\x17e\x04\x00\x17d\x0e\x00\x17e\x06\x00\x17d!\x00\x17e\x07\x00\x17e\r\x00\x17d"\x00\x17GHd\x01\x00S(#\x00\x00\x00i\xff\xff\xff\xffNs\x05\x00\x00\x00\x1b[34ms\x05\x00\x00\x00\x1b[31ms\x05\x00\x00\x00\x1b[32ms\x04\x00\x00\x00\x1b[0ms\x07\x00\x00\x00\x1b[33;5mc\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00C\x00\x00\x00s\xfb\x00\x00\x00t\x00\x00j\x01\x00d\x01\x00\x83\x01\x00\x01t\x02\x00d\x02\x00\x17GHt\x03\x00d\x03\x00\x17GHt\x02\x00d\x02\x00\x17GHt\x04\x00d\x04\x00\x17d\x05\x00d\x06\x00\x14\x17d\x07\x00\x17GHt\x04\x00d\x08\x00\x17t\x05\x00\x17d\t\x00\x17t\x03\x00\x17d\n\x00\x17t\x04\x00\x17d\x0b\x00\x17GHt\x04\x00d\x08\x00\x17t\x05\x00\x17d\x0c\x00\x17t\x03\x00\x17d\r\x00\x17t\x04\x00\x17d\x0e\x00\x17GHt\x04\x00d\x08\x00\x17t\x05\x00\x17d\x0f\x00\x17t\x03\x00\x17d\x10\x00\x17t\x04\x00\x17d\x08\x00\x17GHt\x04\x00d\x08\x00\x17t\x05\x00\x17d\x11\x00\x17t\x03\x00\x17d\x12\x00\x17t\x04\x00\x17d\x13\x00\x17GHt\x04\x00d\x08\x00\x17t\x05\x00\x17d\x14\x00\x17t\x03\x00\x17d\x15\x00\x17t\x04\x00\x17d\x16\x00\x17GHt\x04\x00d\x04\x00\x17d\x05\x00d\x06\x00\x14\x17d\x17\x00\x17GHd\x00\x00S(\x18\x00\x00\x00Nt\x05\x00\x00\x00clears$\x00\x00\x00     +-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+s$\x00\x00\x00     |C|o|m|p|i|l|e| |M|a|r|s|h|a|l|s\x02\x00\x00\x000{i\'\x00\x00\x00t\x01\x00\x00\x00=s\x02\x00\x00\x00}0t\x01\x00\x00\x00|s\x0b\x00\x00\x00 Coded by: t\n\x00\x00\x00xNot_Founds\x15\x00\x00\x00                    |s\x0b\x00\x00\x00 Contact : s\x10\x00\x00\x00+62823-8637-2115s\x0f\x00\x00\x00              |s\x0b\x00\x00\x00 Email   : s\x1e\x00\x00\x00febryafriansyah@programmer.nets\x0b\x00\x00\x00 Website : s\x1a\x00\x00\x00http://hatakecnk.noads.bizs\x05\x00\x00\x00    |s\x0b\x00\x00\x00 Github  : s\x1c\x00\x00\x00https://github.com/hatakecnks\x03\x00\x00\x00  |s\x03\x00\x00\x00}0\n(\x06\x00\x00\x00t\x02\x00\x00\x00ost\x06\x00\x00\x00systemt\x01\x00\x00\x00Rt\x01\x00\x00\x00Wt\x01\x00\x00\x00Yt\x01\x00\x00\x00B(\x00\x00\x00\x00(\x00\x00\x00\x00(\x00\x00\x00\x00s\x07\x00\x00\x00<debby>t\x06\x00\x00\x00banner\t\x00\x00\x00s\x16\x00\x00\x00\x00\x01\r\x01\t\x01\t\x01\t\x01\x15\x01!\x01!\x01!\x01!\x01!\x01s\x11\x00\x00\x00Ex :/sdcard/ex.pys*\x00\x00\x00\x1b[0m[\x1b[31mInput Your File Path\x1b[0m]> \x1b[36ms\x03\x00\x00\x00.pyt\x00\x00\x00\x00t\x01\x00\x00\x00[t\x01\x00\x00\x00!s\x02\x00\x00\x00] s\x12\x00\x00\x00there is an error\ns\x0f\x00\x00\x00ctrl+c detecteds\x0f\x00\x00\x00trying to exit\ni\x03\x00\x00\x00s\x0f\x00\x00\x00ctrl+d detectedt\x01\x00\x00\x00rs\x0f\x00\x00\x00file not exist\ns\x07\x00\x00\x00<debby>t\x04\x00\x00\x00execs\x16\x00\x00\x00file already compiled\ns\x06\x00\x00\x00enc.pyt\x02\x00\x00\x00wbs\x18\x00\x00\x00#Compiled By xNot_Found\ns\'\x00\x00\x00#Github : https://github.com/hatakecnk\ns\x0f\x00\x00\x00import marshal\ns\x13\x00\x00\x00exec(marshal.loads(s\x02\x00\x00\x00))t\x01\x00\x00\x00+s\r\x00\x00\x00file saved : s\x07\x00\x00\x00enc.py\n( \x00\x00\x00t\x07\x00\x00\x00marshalt\x03\x00\x00\x00sysR\x04\x00\x00\x00t\x04\x00\x00\x00timeR\t\x00\x00\x00R\x06\x00\x00\x00t\x01\x00\x00\x00GR\x07\x00\x00\x00R\x08\x00\x00\x00R\n\x00\x00\x00t\t\x00\x00\x00raw_inputt\x04\x00\x00\x00filet\x07\x00\x00\x00replacet\x01\x00\x00\x00ot\n\x00\x00\x00IndexErrort\x04\x00\x00\x00exitt\x11\x00\x00\x00KeyboardInterruptt\x05\x00\x00\x00sleept\x08\x00\x00\x00EOFErrort\x04\x00\x00\x00opent\x04\x00\x00\x00readt\x05\x00\x00\x00strngt\x07\x00\x00\x00IOErrort\x07\x00\x00\x00compilet\x04\x00\x00\x00codet\x05\x00\x00\x00dumpst\x04\x00\x00\x00datat\t\x00\x00\x00TypeErrort\x07\x00\x00\x00fileoutt\x05\x00\x00\x00writet\x04\x00\x00\x00reprt\x05\x00\x00\x00close(\x00\x00\x00\x00(\x00\x00\x00\x00(\x00\x00\x00\x00s\x07\x00\x00\x00<debby>t\x08\x00\x00\x00<module>\x02\x00\x00\x00sZ\x00\x00\x000\x01\x06\x01\x06\x01\x06\x01\x06\x01\x06\x02\t\r\x03\x01\x07\x01\t\x01\x0c\x01\x16\x01\r\x01!\x01\r\x01\r\x01!\x01!\x01\r\x01\r\x01\r\x01!\x01!\x01\r\x01\x0e\x02\x03\x01\x19\x01\r\x01\x07\x01!\x01\x0e\x01\x03\x01\x12\x01\x13\x01\r\x01\x07\x01!\x01\x0e\x02\x13\x01\r\x01\r\x01\r\x01\x1b\x01\n\x01\x07\x01

如何使GitHub上的字节码像上述两个示例一样工作?也就是说,它返回了python代码。

编辑:

如果有人要帮助我,我在这里发布了一些小技巧。

根据版本使用此代码:

对于 uncompyle6版本2.2.0 ,请使用此代码

import sys
from sys import stdout
import uncompyle6
from uncompyle6.main import *
import marshal
x = marshal.loads('BYTECODE')
uncompyle6.main.uncompyle(2.7, x, sys.stdout)

,对于 uncompyle6版本3.4.0 ,请使用此代码

import sys
from sys import stdout
import uncompyle6
from uncompyle6.main import *
import marshal
x = marshal.loads('BYTECODE')
uncompyle6.main.decompile(2.7, x, sys.stdout)

在这里您可以使用在线工具Python 2.7编译器检查sample的工作代码。

如何安装 uncompyle6

pip install uncompyle6

为什么从bytecode.txt粘贴了字节码后为什么我只能得到此信息

然后处理器仍然忙吗?此字节码不返回python代码(只是冻结)

# Python bytecode 2.7
# Decompiled from: Python 2.7.16 (default, Mar 20 2019, 12:15:19)
# [GCC 7.4.0]
# Embedded file name: <script>

是否有办法扭转此bytecode?可以使用其他方法或脚本...

0 个答案:

没有答案