Decompile compiled python binaries (exe, elf) - Retreive from .pyc
Last updated
Last updated
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Wskazówka dotycząca bug bounty: zarejestruj się w Intigriti, premium platformie bug bounty stworzonej przez hackerów, dla hackerów! Dołącz do nas na https://go.intigriti.com/hacktricks już dziś i zacznij zarabiać nagrody do 100 000 USD!
Z ELF skompilowanego binarnego możesz uzyskać .pyc za pomocą:
W skompilowanym python exe binary możesz uzyskać .pyc uruchamiając:
Dla danych .pyc ("skompilowany" python) powinieneś zacząć próbować wyodrębnić oryginalny kod python:
Upewnij się, że plik binarny ma rozszerzenie ".pyc" (jeśli nie, uncompyle6 nie zadziała)
Podczas wykonywania uncompyle6 możesz napotkać następujące błędy:
Aby to naprawić, musisz dodać odpowiedni magic number na początku wygenerowanego pliku.
Magic number różni się w zależności od wersji pythona, aby uzyskać magic number dla python 3.8, musisz otworzyć terminal python 3.8 i wykonać:
Liczba magiczna w tym przypadku dla python3.8 to 0x550d0d0a
, następnie, aby naprawić ten błąd, musisz dodać na początku .pyc file następujące bajty: 0x0d550a0d000000000000000000000000
Gdy dodasz ten nagłówek magiczny, błąd powinien być naprawiony.
Tak będzie wyglądał poprawnie dodany .pyc python3.8 magic header:
Inne błędy takie jak: class 'AssertionError'>; co_code powinien być jednym z typów (<class 'str'>, <class 'bytes'>, <class 'list'>, <class 'tuple'>); jest typu <class 'NoneType'>
mogą się pojawić.
To prawdopodobnie oznacza, że nie dodałeś poprawnie magicznego numeru lub że nie użyłeś poprawnego magicznego numeru, więc upewnij się, że używasz poprawnego (lub spróbuj nowego).
Sprawdź dokumentację wcześniejszych błędów.
Narzędzie python-exe-unpacker służy jako połączenie kilku dostępnych w społeczności narzędzi zaprojektowanych w celu pomocy badaczom w rozpakowywaniu i dekompilacji plików wykonywalnych napisanych w Pythonie, szczególnie tych stworzonych za pomocą py2exe i pyinstaller. Zawiera zasady YARA do identyfikacji, czy plik wykonywalny jest oparty na Pythonie i potwierdza narzędzie do jego stworzenia.
Powszechnym problemem jest niekompletny plik bajtowy Pythona wynikający z procesu rozpakowywania za pomocą unpy2exe lub pyinstxtractor, który następnie nie jest rozpoznawany przez uncompyle6 z powodu brakującego numeru wersji bajtowego Pythona. Aby to naprawić, dodano opcję prepend, która dołącza niezbędny numer wersji bajtowego Pythona, ułatwiając proces dekompilacji.
Przykład problemu:
Jeśli nie udało Ci się wyodrębnić "oryginalnego" kodu Pythona, postępując zgodnie z poprzednimi krokami, możesz spróbować wyodrębnić assembler (ale nie jest to zbyt opisowe, więc spróbuj ponownie wyodrębnić oryginalny kod). W tutaj znalazłem bardzo prosty kod do deasemblacji binarnego pliku .pyc (powodzenia w zrozumieniu przepływu kodu). Jeśli .pyc pochodzi z python2, użyj python2:
Aby zacząć, pokażemy, jak ładunki mogą być kompilowane w py2exe i PyInstaller.
Zainstaluj pakiet py2exe z http://www.py2exe.org/
Dla ładunku (w tym przypadku nazwiemy go hello.py), użyj skryptu jak w Rysunku 1. Opcja “bundle_files” z wartością 1 połączy wszystko, w tym interpreter Pythona, w jeden plik exe.
Gdy skrypt będzie gotowy, wydamy polecenie “python setup.py py2exe”. To stworzy plik wykonywalny, tak jak na Rysunku 2.
Zainstaluj PyInstaller za pomocą pip (pip install pyinstaller).
Następnie wydamy polecenie “pyinstaller –onefile hello.py” (przypomnienie, że ‘hello.py’ to nasz ładunek). To połączy wszystko w jeden plik wykonywalny.
Bug bounty tip: zarejestruj się w Intigriti, premium platformie bug bounty stworzonej przez hackerów, dla hackerów! Dołącz do nas na https://go.intigriti.com/hacktricks już dziś i zacznij zarabiać nagrody do 100 000 USD!
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)