我正在使用pyi-archive_viewer从用pyinstaller编译的ELF可执行文件中提取主要.pyc文件。该可执行文件称为“ mal”,我将输出另存为mal.pyc。
我已经从pyi-archive_viewer中更正了mal.pyc输出文件的幻数。 到“ 03 F3 0D 0A”。
[ { '$match': { '$and': [...Array, { '$text': [Object] }] } },
{ '$addFields': { sortFieldTextRelevance: [Object] } }]
我已经运行了命令'uncompyle6 -o。 mal.pyc”,我收到以下错误。
00000000: 03f3 0d0a 0000 0000 0002 0000 0040 0000 .............@..
00000010: 0073 2b01 0000 6400 0064 0100 6c00 006d .s+...d..d..l..m
00000020: 0100 5a01 0001 6400 0064 0200 6c02 0054 ..Z...d..d..l..T
00000030: 6400 0064 0300 6c03 006d 0400 5a04 006d d..d..l..m..Z..m
00000040: 0500 5a05 0001 6400 0064 0400 6c06 005a ..Z...d..d..l..Z
00000050: 0600 6400 0064 0400 6c07 005a 0700 6400 ..d..d..l..Z..d.
00000060: 0064 0400 6c08 005a 0800 6400 0064 0400 .d..l..Z..d..d..
00000070: 6c09 005a 0900 6400 0064 0400 6c0a 005a l..Z..d..d..l..Z
00000080: 0a00 6400 0064 0400 6c0b 005a 0b00 6400 ..d..d..l..Z..d.
00000090: 0064 0400 6c0c 005a 0c00 6400 0064 0400 .d..l..Z..d..d..
我想这是因为.pyc损坏了吗?谁能建议我哪里出错了?
更新: 问题在于我要确定魔术数字。
我已经使用脚本python_exe_unpack.py https://github.com/countercept/python-exe-unpacker,它具有-p选项,可以像我手动完成的那样为您自动附加魔术数字。
这是python_exe_unpack脚本中的函数
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/xdis/load.py", line 150, in load_module
co = marshal.loads(bytecode)
ValueError: bad marshal data (unknown type code)
Traceback (most recent call last):
File "/usr/local/bin/uncompyle6", line 10, in <module>
sys.exit(main_bin())
File "/usr/local/lib/python2.7/dist- packages/uncompyle6/bin/uncompile.py", line 163, in main_bin
**options)
File "/usr/local/lib/python2.7/dist-packages/uncompyle6/main.py", line 146, in main
decompile_file(infile, outstream, showasm, showast, showgrammar)
File "/usr/local/lib/python2.7/dist-packages/uncompyle6/main.py", line 63, in decompile_file
source_size) = load_module(filename, code_objects)
File "/usr/local/lib/python2.7/dist-packages/xdis/load.py", line 163, in load_module
% (filename, kind, msg))
ImportError: Ill-formed bytecode file mal.pyc
<type 'exceptions.ValueError'>; bad marshal data (unknown type code)
因此,所有操作都在'03f3 0d0a'之前>
该函数成功执行,并以明文形式吐出.py文件。
在手动执行操作时我可能会出错,我尝试使用其他十六进制编辑器但结果相同。如您在我之前的文件头输出中所看到的,魔术数字是否匹配?我要做的就是替换前8个字节,保存并退出。