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: jiandikishe kwa Intigriti, jukwaa la bug bounty la premium lililotengenezwa na hackers, kwa hackers! Jiunge nasi kwenye https://go.intigriti.com/hacktricks leo, na uanze kupata zawadi hadi $100,000!
Kutoka kwa ELF binary iliyokusanywa unaweza kupata .pyc kwa:
Katika python exe binary iliyokusanywa unaweza kupata .pyc kwa kukimbia:
Kwa data ya .pyc ("imeundwa" python) unapaswa kuanza kujaribu kutoa kanuni asili ya python:
Hakikisheni kwamba binary ina kiambatisho ".pyc" (ikiwa sio, uncompyle6 haitafanya kazi)
Wakati wa kutekeleza uncompyle6 unaweza kukutana na makosa yafuatayo:
Ili kurekebisha hili unahitaji kuongeza nambari sahihi ya uchawi mwanzoni mwa faili lililotengenezwa.
Nambari za uchawi zinatofautiana kulingana na toleo la python, ili kupata nambari ya uchawi ya python 3.8 unahitaji kufungua terminal ya python 3.8 na kutekeleza:
Nambari ya mchawi katika kesi hii kwa python3.8 ni 0x550d0d0a
, kisha, ili kurekebisha kosa hili unahitaji kuongeza katika mwanzoni mwa .pyc file byte zifuatazo: 0x0d550a0d000000000000000000000000
Mara tu umepata kuongeza kichwa hicho cha mchawi, kosa linapaswa kurekebishwa.
Hivi ndivyo kichwa cha .pyc python3.8 magic header kilichoongezwa kwa usahihi kitakavyokuwa:
Makosa mengine kama: class 'AssertionError'>; co_code should be one of the types (<class 'str'>, <class 'bytes'>, <class 'list'>, <class 'tuple'>); is type <class 'NoneType'>
yanaweza kuonekana.
Hii huenda inamaanisha kwamba hujazi vizuri nambari ya kichawi au kwamba huja tumia nambari ya kichawi sahihi, hivyo hakikisha unatumia ile sahihi (au jaribu mpya).
Angalia hati za makosa ya awali.
Zana ya python-exe-unpacker inatumika kama mchanganyiko wa zana kadhaa zinazopatikana katika jamii zilizoundwa kusaidia watafiti katika kufungua na ku-decompile executable zilizoandikwa kwa Python, haswa zile zilizoundwa na py2exe na pyinstaller. Inajumuisha sheria za YARA kubaini ikiwa executable ni ya msingi wa Python na kuthibitisha zana iliyotumika kuunda.
Tatizo la kawaida linalokabiliwa linahusisha faili isiyo kamili ya bytecode ya Python inayotokana na mchakato wa ufunguo na unpy2exe au pyinstxtractor, ambayo kisha inashindwa kutambuliwa na uncompyle6 kutokana na kukosekana kwa nambari ya toleo la bytecode ya Python. Ili kushughulikia hili, chaguo la kuongezea limeongezwa, ambalo linaongeza nambari muhimu ya toleo la bytecode ya Python, kurahisisha mchakato wa ku-decompile.
Mfano wa tatizo:
Ikiwa hujaweza kutoa "kanuni" ya python kufuatia hatua zilizopita, basi unaweza kujaribu kutoa mkusanyiko (lakini siyo wa kueleweka sana, hivyo jaribu kutoa tena kanuni ya asili). Katika hapa nilipata kanuni rahisi sana ya kufanya disassembly ya .pyc binary (bahati njema katika kuelewa mtiririko wa kanuni). Ikiwa .pyc ni kutoka python2, tumia python2:
Ili kuanza, tutakuonyesha jinsi payloads zinavyoweza kukusanywa katika py2exe na PyInstaller.
Sakinisha pakiti ya py2exe kutoka http://www.py2exe.org/
Kwa payload (katika kesi hii, tutaiita hello.py), tumia script kama ile katika Mchoro 1. Chaguo “bundle_files” lenye thamani ya 1 litakusanya kila kitu ikiwa ni pamoja na mfasiri wa Python katika exe moja.
Mara tu script ikikamilika, tutatoa amri “python setup.py py2exe”. Hii itaunda executable, kama ilivyo katika Mchoro 2.
Sakinisha PyInstaller kwa kutumia pip (pip install pyinstaller).
Baada ya hapo, tutatoa amri “pyinstaller –onefile hello.py” (kumbuka kwamba ‘hello.py’ ni payload yetu). Hii itakusanya kila kitu kuwa executable moja.
Bug bounty tip: jiandikishe kwa Intigriti, jukwaa la bug bounty la kiwango cha juu lililotengenezwa na hackers, kwa hackers! Jiunge nasi kwenye https://go.intigriti.com/hacktricks leo, na anza kupata zawadi hadi $100,000!
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)