ImportError: Ошибка файла байт-кода с неправильной формой при декомпиляции файла .pyc с использованием uncompyle6 - PullRequest
0 голосов
/ 04 июля 2019

Я использую pyi-archive_viewer для извлечения основного файла .pyc из моего исполняемого файла ELF, скомпилированного с помощью pyinstaller.Executbale называется 'mal', я сохраняю вывод как mal.pyc.

Я исправил магические числа выходного файла mal.pyc из pyi-archive_viewer в '03 F3 0D 0A '.

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..

Я выполнил команду 'uncompyle6 -o.mal.pyc 'и я получаю следующую ошибку.

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)

Я предполагаю, что это связано с повреждением .pyc?Кто-нибудь может подсказать, где я ошибаюсь?

ОБНОВЛЕНИЕ: Проблема заключается в том, что я исправляю магические числа.

Я использовал скрипт python_exe_unpack.py https://github.com/countercept/python-exe-unpacker и у него есть -pопция, которая автоматически добавляет магическое число для вас ТОЧНО, как я сделал это вручную.

Вот функция из скрипта python_exe_unpack

if is_prepend_magic:
    magic = b'\x03\xf3\x0d\x0a' # Default magic for python 2.7
    with edited_pyc as prepend_pyc:
        pyc_data = open(main_pyc, 'rb')
        prepend_pyc.write(magic) # Magic bytes
        prepend_pyc.write(b'\0' * 4) # Time stamp
        prepend_pyc.write(pyc_data.read())
        pyc_data.close()

Так что все это делает, предваряя '03f3 0d0a'

Функция выполнена успешно и выдает файл .py в виде открытого текста.

Где я мог ошибиться, если делал это вручную, я пробовал другой редактор шестнадцатеричных кодов, но тот же результат.Как видно из моего предыдущего заголовка файла, магические числа совпадают?Все, что я делаю, это заменяю первые 8 байтов, сохраняю и выхожу.

...