Decompile compiled python binaries (exe, elf) - Retreive from .pyc
Bug bounty ipucu: Intigriti'ye kaydolun, hackers tarafından, hackers için oluşturulmuş premium bir bug bounty platformu! Bugün https://go.intigriti.com/hacktricks adresine katılın ve $100,000'a kadar ödüller kazanmaya başlayın!
Derlenmiş İkili Dosyadan .pyc'ye
Bir ELF derlenmiş ikili dosyasından .pyc'yi alabilirsiniz:
Bir python exe ikili dosyasında .pyc almak için şunu çalıştırabilirsiniz:
From .pyc to python code
.pyc verileri ("derlenmiş" python) için orijinal python kodunu çıkarmaya çalışmaya başlamalısınız:
Kesin olun ki, ikili dosyanın uzantısı ".pyc" (değilse, uncompyle6 çalışmayacak)
uncompyle6 çalıştırırken aşağıdaki hatalarla karşılaşabilirsiniz:
Hata: Bilinmeyen sihirli sayı 227
Bu sorunu çözmek için oluşturulan dosyanın başına doğru sihirli numarayı eklemeniz gerekiyor.
Sihirli numaralar python sürümüne göre değişir, python 3.8'in sihirli numarasını almak için bir python 3.8 terminali açmanız ve şunu çalıştırmanız gerekecek:
Bu durumda python3.8 için magic number 0x550d0d0a
'dır, bu hatayı düzeltmek için .pyc dosyasının başına aşağıdaki baytları eklemeniz gerekecek: 0x0d550a0d000000000000000000000000
Oluşturduğunuzda bu magic başlığı, hata düzeltilmiş olmalıdır.
Doğru bir şekilde eklenmiş .pyc python3.8 magic header şu şekilde görünecektir:
Hata: Genel hataların dekompile edilmesi
Diğer hatalar şunlar gibi: class 'AssertionError'>; co_code bir türlerden biri olmalıdır (<class 'str'>, <class 'bytes'>, <class 'list'>, <class 'tuple'>); tür <class 'NoneType'>
görünebilir.
Bu muhtemelen büyülü numarayı doğru eklemediğiniz veya doğru büyülü numarayı kullanmadığınız anlamına gelir, bu yüzden doğru olanı kullandığınızdan emin olun (veya yeni bir tane deneyin).
Önceki hata belgelerini kontrol edin.
Otomatik Araç
python-exe-unpacker aracı, Python'da yazılmış, özellikle py2exe ve pyinstaller ile oluşturulmuş yürütülebilir dosyaların açılması ve dekompile edilmesi konusunda araştırmacılara yardımcı olmak için tasarlanmış birkaç toplulukta mevcut aracın bir kombinasyonu olarak hizmet eder. Python tabanlı bir yürütülebilir dosyanın tanımlanması ve oluşturma aracının doğrulanması için YARA kuralları içerir.
ImportError: Dosya adı: 'unpacked/malware_3.exe/pycache/archive.cpython-35.pyc' mevcut değil
Karşılaşılan yaygın bir sorun, unpy2exe veya pyinstxtractor ile açma işlemi sonucunda oluşan eksik bir Python bayt kodu dosyasıdır; bu da eksik bir Python bayt kodu sürüm numarası nedeniyle uncompyle6 tarafından tanınmamaktadır. Bunu çözmek için, gerekli Python bayt kodu sürüm numarasını ekleyen bir ön ek seçeneği eklenmiştir, bu da dekompile etme sürecini kolaylaştırır.
Sorunun örneği:
Python montajını analiz etme
Eğer önceki adımları takip ederek python "orijinal" kodunu çıkaramadıysanız, o zaman montajı çıkarmayı deneyebilirsiniz (ama çok açıklayıcı değil, bu yüzden orijinal kodu tekrar çıkarmayı deneyin). Burada .pyc ikili dosyasını dağıtmak için çok basit bir kod buldum (kod akışını anlamakta iyi şanslar). Eğer .pyc python2'den ise, python2 kullanın:
Python'dan Çalıştırılabilir Dosyaya
Başlamak için, payload'ların py2exe ve PyInstaller ile nasıl derleneceğini göstereceğiz.
py2exe kullanarak bir payload oluşturmak için:
http://www.py2exe.org/ adresinden py2exe paketini yükleyin.
Payload için (bu durumda, hello.py adını vereceğiz), Şekil 1'deki gibi bir script kullanın. "bundle_files" seçeneği 1 değeri ile, Python yorumlayıcısı da dahil olmak üzere her şeyi tek bir exe dosyasında birleştirecektir.
Script hazır olduğunda, “python setup.py py2exe” komutunu vereceğiz. Bu, Şekil 2'deki gibi çalıştırılabilir dosyayı oluşturacaktır.
PyInstaller kullanarak bir payload oluşturmak için:
PyInstaller'ı pip ile kurun (pip install pyinstaller).
Daha sonra “pyinstaller –onefile hello.py” komutunu vereceğiz (hatırlatma: ‘hello.py’ bizim payload'ımızdır). Bu, her şeyi tek bir çalıştırılabilir dosyada birleştirecektir.
Referanslar
Bug bounty ipucu: kaydolun Intigriti'ye, hackler tarafından, hackler için oluşturulmuş premium bir bug bounty platformu! Bugün https://go.intigriti.com/hacktricks adresine katılın ve $100,000'a kadar ödüller kazanmaya başlayın!
Last updated