Decompile compiled python binaries (exe, elf) - Retreive from .pyc
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Bug bounty tip: prijavite se za Intigriti, premium bug bounty platformu koju su kreirali hakeri, za hakere! Pridružite nam se na https://go.intigriti.com/hacktricks danas, i počnite da zarađujete nagrade do $100,000!
Iz ELF kompajliranog binarnog fajla možete dobiti .pyc sa:
U python exe binarnom kompajliranom možete dobiti .pyc pokretanjem:
Za .pyc podatke ("kompilirani" python) trebali biste početi pokušavati da izvučete originalni python kod:
Budite sigurni da binarni fajl ima ekstenziju ".pyc" (ako ne, uncompyle6 neće raditi)
Tokom izvršavanja uncompyle6 mogli biste naići na sledeće greške:
Da biste to popravili, potrebno je da dodate ispravan magični broj na početku generisanog fajla.
Magični brojevi se razlikuju u zavisnosti od verzije pythona, da biste dobili magični broj za python 3.8, potrebno je da otvorite python 3.8 terminal i izvršite:
The magic number in this case for python3.8 is 0x550d0d0a
, then, to fix this error you will need to add at the beginning of the .pyc file the following bytes: 0x0d550a0d000000000000000000000000
Kada ste dodali taj magični zaglavlje, greška bi trebala biti ispravljena.
This is how a correctly added .pyc python3.8 magic header will look like:
Druge greške kao što su: class 'AssertionError'>; co_code should be one of the types (<class 'str'>, <class 'bytes'>, <class 'list'>, <class 'tuple'>); is type <class 'NoneType'>
mogu se pojaviti.
To verovatno znači da niste ispravno dodali magični broj ili da niste koristili ispravan magični broj, pa se pobrinite da koristite ispravan (ili pokušajte novi).
Proverite dokumentaciju o prethodnim greškama.
python-exe-unpacker alat služi kao kombinacija nekoliko alata dostupnih u zajednici, dizajniranih da pomognu istraživačima u raspakivanju i decompiling izvršnih datoteka napisanih u Pythonu, posebno onih kreiranih sa py2exe i pyinstaller. Uključuje YARA pravila za identifikaciju da li je izvršna datoteka zasnovana na Pythonu i potvrđuje alat za kreiranje.
Uobičajen problem koji se javlja uključuje nepotpunu Python bytecode datoteku koja je rezultat procesa raspakivanja sa unpy2exe ili pyinstxtractor, koja zatim ne može biti prepoznata od strane uncompyle6 zbog nedostatka verzionog broja Python bytecode-a. Da bi se to rešilo, dodata je opcija za dodavanje, koja dodaje neophodni verzioni broj Python bytecode-a, olakšavajući proces decompiling-a.
Primer problema:
Ако нисте успели да извучете python "оригинални" код следећи претходне кораке, онда можете покушати да извучете асамблер (али није веома описан, па покушајте да поново извучете оригинални код). У овде сам нашао веома једноставан код за дисасемблирање .pyc бинарног (срећно са разумевањем токова кода). Ако је .pyc из python2, користите python2:
Da počnemo, pokažaćemo vam kako se payloadi mogu kompajlirati u py2exe i PyInstaller.
Instalirajte py2exe paket sa http://www.py2exe.org/
Za payload (u ovom slučaju, nazvaćemo ga hello.py), koristite skriptu kao što je prikazano na Slici 1. Opcija “bundle_files” sa vrednošću 1 će sve spojiti, uključujući Python interpreter, u jedan exe.
Kada je skripta spremna, izdaćemo komandu “python setup.py py2exe”. Ovo će kreirati izvršni fajl, baš kao na Slici 2.
Instalirajte PyInstaller koristeći pip (pip install pyinstaller).
Nakon toga, izdaćemo komandu “pyinstaller –onefile hello.py” (podsećanje da je ‘hello.py’ naš payload). Ovo će sve spojiti u jedan izvršni fajl.
Bug bounty tip: prijavite se za Intigriti, premium bug bounty platformu koju su kreirali hakeri, za hakere! Pridružite nam se na https://go.intigriti.com/hacktricks danas, i počnite da zarađujete nagrade do $100,000!
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)