Decompile compiled python binaries (exe, elf) - Retreive from .pyc
Bug bounty wenk: meld aan vir Intigriti, 'n premium bug bounty platform geskep deur hackers, vir hackers! Sluit by ons aan by https://go.intigriti.com/hacktricks vandag, en begin verdien bounties tot $100,000!
Van Gecompileerde Binêre na .pyc
Van 'n ELF gecompileerde binêre kan jy die .pyc kry met:
In 'n python exe binêre gecompileer kan jy die .pyc kry deur te loop:
Van .pyc na python kode
Vir die .pyc data ("gecompileerde" python) moet jy begin probeer om die oorspronklike python kode te onttrek:
Maak seker dat die binêre die uitbreiding ".pyc" het (as nie, gaan uncompyle6 nie werk nie)
Terwyl jy uncompyle6 uitvoer, mag jy die volgende foute teëkom:
Fout: Onbekende magiese nommer 227
Om dit reg te maak, moet jy die korrekte magiese nommer aan die begin van die gegenereerde lêer byvoeg.
Magiese nommers verskil met die python weergawe, om die magiese nommer van python 3.8 te kry, sal jy 'n python 3.8 terminal moet oopmaak en uitvoer:
Die magic number in hierdie geval vir python3.8 is 0x550d0d0a
, dan, om hierdie fout reg te stel, sal jy moet byvoeg aan die begin van die .pyc file die volgende bytes: 0x0d550a0d000000000000000000000000
Sodra jy daardie magic header bygevoeg het, behoort die fout reggestel te wees.
So sal 'n korrek bygevoegde .pyc python3.8 magic header lyk:
Fout: Decompileer generiese foute
Ander foute soos: class 'AssertionError'>; co_code moet een van die tipes wees (<class 'str'>, <class 'bytes'>, <class 'list'>, <class 'tuple'>); is tipe <class 'NoneType'>
mag verskyn.
Dit beteken waarskynlik dat jy nie korrek die magiese nommer bygevoeg het nie of dat jy nie die korrekte magiese nommer gebruik het nie, so maak verseker jy gebruik die korrekte een (of probeer 'n nuwe een).
Kyk na die vorige fout dokumentasie.
Outomatiese Gereedskap
Die python-exe-unpacker gereedskap dien as 'n kombinasie van verskeie gemeenskap-beskikbare gereedskap wat ontwerp is om navorsers te help om uitvoerbare lêers wat in Python geskryf is, spesifiek dié wat met py2exe en pyinstaller geskep is, uit te pak en te decompileer. Dit sluit YARA-reëls in om te identifiseer of 'n uitvoerbare lêer op Python gebaseer is en bevestig die skeppingsgereedskap.
ImportError: Lêernaam: 'unpacked/malware_3.exe/pycache/archive.cpython-35.pyc' bestaan nie
'n Algemene probleem wat ondervind word, behels 'n onvolledige Python bytecode-lêer wat ontstaan uit die uitpakproses met unpy2exe of pyinstxtractor, wat dan nie deur uncompyle6 erken word nie weens 'n ontbrekende Python bytecode weergawe nommer. Om dit aan te spreek, is 'n prepend opsie bygevoeg, wat die nodige Python bytecode weergawe nommer byvoeg, wat die decompileerproses vergemaklik.
Voorbeeld van die probleem:
Analyzing python assembly
As jy nie in staat was om die python "oorspronklike" kode te onttrek nie, kan jy probeer om die assembly te onttrek (maar dit is nie baie beskrywend nie, so probeer om die oorspronklike kode weer te onttrek). In hier het ek 'n baie eenvoudige kode gevind om die .pyc binêre te ontbind (sterkte met die verstaan van die kodevloei). As die .pyc van python2 is, gebruik python2:
Python na Uitvoerbare
Om te begin, gaan ons jou wys hoe payloads in py2exe en PyInstaller saamgestel kan word.
Om 'n payload te skep met py2exe:
Installeer die py2exe-pakket van http://www.py2exe.org/
Vir die payload (in hierdie geval, sal ons dit hello.py noem), gebruik 'n skrif soos die een in Figuur 1. Die opsie “bundle_files” met die waarde van 1 sal alles insluit, insluitend die Python-interpretator, in een exe.
Sodra die skrif gereed is, sal ons die opdrag “python setup.py py2exe” gee. Dit sal die uitvoerbare skep, net soos in Figuur 2.
Om 'n payload te skep met PyInstaller:
Installeer PyInstaller met pip (pip install pyinstaller).
Daarna sal ons die opdrag “pyinstaller –onefile hello.py” gee (’n herinnering dat ‘hello.py’ ons payload is). Dit sal alles in een uitvoerbare lêer saamvoeg.
Verwysings
Bug bounty wenk: meld aan vir Intigriti, 'n premium bug bounty platform geskep deur hackers, vir hackers! Sluit vandag by ons aan by https://go.intigriti.com/hacktricks en begin om belonings tot $100,000 te verdien!
Last updated