Decompile compiled python binaries (exe, elf) - Retreive from .pyc
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2585115637-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FhAv2kYoPrT3n8552GaQU%252Fuploads%252Fgit-blob-ce4fbfd491ab398bd58639023728b416b0758bc1%252Fi3.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=21bc315d&sv=1)
Порада з баг-баунті: зареєструйтесь на Intigriti, преміум платформі для баг-баунті, створеній хакерами для хакерів! Приєднуйтесь до нас на https://go.intigriti.com/hacktricks сьогодні та почніть заробляти винагороди до $100,000!
Від скомпільованого бінарника до .pyc
З ELF скомпільованого бінарника ви можете отримати .pyc за допомогою:
В python exe binary, скомпільованому, ви можете отримати .pyc, запустивши:
Від .pyc до коду python
Для даних .pyc ("скомпільований" python) ви повинні почати намагатися витягти оригінальний код python:
Переконайтеся, що бінарний файл має розширення ".pyc" (якщо ні, uncompyle6 не буде працювати)
Під час виконання uncompyle6 ви можете зіткнутися з наступними помилками:
Помилка: Невідомий магічний номер 227
Щоб виправити це, вам потрібно додати правильний магічний номер на початку згенерованого файлу.
Магічні номери варіюються в залежності від версії python, щоб отримати магічний номер python 3.8, вам потрібно відкрити термінал python 3.8 і виконати:
Магічне число в цьому випадку для python3.8 - це 0x550d0d0a
, тоді, щоб виправити цю помилку, вам потрібно додати на початку .pyc файлу наступні байти: 0x0d550a0d000000000000000000000000
Якщо ви додали цей магічний заголовок, помилка повинна бути виправлена.
Ось як правильно доданий .pyc python3.8 магічний заголовок виглядатиме:
Помилка: Декомпіляція загальних помилок
Інші помилки такі як: class 'AssertionError'>; co_code повинен бути одним з типів (<class 'str'>, <class 'bytes'>, <class 'list'>, <class 'tuple'>); є тип <class 'NoneType'>
можуть з'явитися.
Це, ймовірно, означає, що ви неправильно додали магічний номер або що ви не використали правильний магічний номер, тому переконайтеся, що ви використовуєте правильний (або спробуйте новий).
Перевірте документацію попередніх помилок.
Автоматичний інструмент
python-exe-unpacker tool служить комбінацією кількох доступних інструментів спільноти, призначених для допомоги дослідникам у розпаковуванні та декомпіляції виконуваних файлів, написаних на Python, зокрема тих, що створені за допомогою py2exe та pyinstaller. Він включає правила YARA для ідентифікації, чи є виконуваний файл на основі Python, і підтверджує інструмент створення.
ImportError: Ім'я файлу: 'unpacked/malware_3.exe/pycache/archive.cpython-35.pyc' не існує
Звичайна проблема, з якою стикаються, пов'язана з неповним файлом байт-коду Python, що виникає внаслідок процесу розпакування з unpy2exe або pyinstxtractor, який потім не розпізнається uncompyle6 через відсутній номер версії байт-коду Python. Щоб вирішити цю проблему, було додано опцію prepend, яка додає необхідний номер версії байт-коду Python, полегшуючи процес декомпіляції.
Приклад проблеми:
Аналіз python assembly
If you weren't able to extract the python "original" code following the previous steps, then you can try to extract the assembly (but it isn't very descriptive, so try to extract again the original code).In here I found a very simple code to disassemble the .pyc binary (good luck understanding the code flow). If the .pyc is from python2, use python2:
Python to Executable
Щоб почати, ми покажемо вам, як вантажі можуть бути скомпільовані в py2exe та PyInstaller.
Щоб створити вантаж за допомогою py2exe:
Встановіть пакет py2exe з http://www.py2exe.org/
Для вантажу (в цьому випадку ми назвемо його hello.py) використовуйте скрипт, подібний до того, що на Рисунку 1. Опція “bundle_files” зі значенням 1 об'єднає все, включаючи інтерпретатор Python, в один exe.
Коли скрипт буде готовий, ми виконаємо команду “python setup.py py2exe”. Це створить виконуваний файл, так само як на Рисунку 2.
Щоб створити корисне навантаження за допомогою PyInstaller:
Встановіть PyInstaller за допомогою pip (pip install pyinstaller).
Після цього ми виконаємо команду “pyinstaller –onefile hello.py” (нагадування, що ‘hello.py’ - це наше корисне навантаження). Це об'єднає все в один виконуваний файл.
References
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2585115637-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FhAv2kYoPrT3n8552GaQU%252Fuploads%252Fgit-blob-ce4fbfd491ab398bd58639023728b416b0758bc1%252Fi3.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=21bc315d&sv=1)
Bug bounty tip: зареєструйтесь на Intigriti, преміум платформі для баг-баунті, створеній хакерами для хакерів! Приєднуйтесь до нас на https://go.intigriti.com/hacktricks сьогодні та почніть заробляти винагороди до $100,000!
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Last updated