Decompile compiled python binaries (exe, elf) - Retreive from .pyc
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: sign up for Intigriti, a premium bug bounty platform created by hackers, for hackers! Join us at https://go.intigriti.com/hacktricks today, and start earning bounties up to $100,000!
From Compiled Binary to .pyc
एक ELF संकलित बाइनरी से आप .pyc प्राप्त कर सकते हैं:
In a python exe binary compiled आप .pyc प्राप्त कर सकते हैं:
From .pyc to python code
For the .pyc data ("compiled" python) you should start trying to extract the original python code:
सुनिश्चित करें कि बाइनरी में एक्सटेंशन ".pyc" है (यदि नहीं, तो uncompyle6 काम नहीं करेगा)
uncompyle6 को निष्पादित करते समय आपको निम्नलिखित त्रुटियाँ मिल सकती हैं:
त्रुटि: अज्ञात जादुई संख्या 227
इसको ठीक करने के लिए आपको जनित फ़ाइल के प्रारंभ में सही जादुई संख्या जोड़ने की आवश्यकता है।
जादुई संख्याएँ पायथन संस्करण के साथ भिन्न होती हैं, पायथन 3.8 की जादुई संख्या प्राप्त करने के लिए आपको पायथन 3.8 टर्मिनल खोलने और निष्पादित करने की आवश्यकता होगी:
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
एक बार जब आप उस जादुई हेडर को जोड़ देंगे, तो त्रुटि ठीक हो जानी चाहिए।
This is how a correctly added .pyc python3.8 magic header will look like:
Error: Decompiling generic errors
अन्य त्रुटियाँ जैसे: class 'AssertionError'>; co_code should be one of the types (<class 'str'>, <class 'bytes'>, <class 'list'>, <class 'tuple'>); is type <class 'NoneType'>
प्रकट हो सकती हैं।
इसका मतलब शायद यह है कि आपने सही तरीके से जादुई संख्या नहीं जोड़ी है या आपने सही जादुई संख्या का उपयोग नहीं किया है, इसलिए सुनिश्चित करें कि आप सही संख्या का उपयोग करें (या एक नई संख्या आजमाएँ)।
पिछली त्रुटि दस्तावेज़ की जाँच करें।
Automatic Tool
The 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 बाइटकोड संस्करण संख्या को जोड़ता है, जिससे डिकंपाइलिंग प्रक्रिया को सुगम बनाता है।
समस्या का उदाहरण:
Analyzing python assembly
यदि आप पिछले चरणों का पालन करते हुए python "मूल" कोड निकालने में असमर्थ रहे, तो आप assembly निकालने की कोशिश कर सकते हैं (लेकिन यह बहुत वर्णनात्मक नहीं है, इसलिए फिर से मूल कोड निकालने की कोशिश करें)। यहाँ मैंने .pyc बाइनरी को disassemble करने के लिए एक बहुत सरल कोड पाया (कोड प्रवाह को समझने में शुभकामनाएँ)। यदि .pyc python2 से है, तो python2 का उपयोग करें:
Python to Executable
To start, we’re going to show you how payloads can be compiled in py2exe and PyInstaller.
To create a payload using py2exe:
py2exe पैकेज को http://www.py2exe.org/ से इंस्टॉल करें।
Payload के लिए (इस मामले में, हम इसे hello.py नाम देंगे), Figure 1 में दिए गए स्क्रिप्ट का उपयोग करें। “bundle_files” विकल्प जिसका मान 1 है, सब कुछ एक exe में बंडल करेगा जिसमें Python interpreter भी शामिल है।
एक बार स्क्रिप्ट तैयार हो जाने के बाद, हम कमांड “python setup.py py2exe” जारी करेंगे। यह executable बनाएगा, ठीक Figure 2 की तरह।
To create a payload using PyInstaller:
PyInstaller को pip का उपयोग करके स्थापित करें (pip install pyinstaller)।
इसके बाद, हम कमांड “pyinstaller –onefile hello.py” जारी करेंगे (याद रखें कि ‘hello.py’ हमारा payload है)। यह सब कुछ एक निष्पादन योग्य में संकुचित कर देगा।
संदर्भ
बग बाउंटी टिप: साइन अप करें Intigriti के लिए, एक प्रीमियम बग बाउंटी प्लेटफार्म जो हैकर्स द्वारा, हैकर्स के लिए बनाया गया है! आज ही https://go.intigriti.com/hacktricks पर हमारे साथ जुड़ें, और $100,000 तक की बाउंटी कमाना शुरू करें!
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE) GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
Last updated