Decompile compiled python binaries (exe, elf) - Retreive from .pyc
Last updated
Last updated
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)
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!
Bir ELF derlenmiş ikili dosyasından .pyc'yi alabilirsiniz:
Bir python exe ikili dosyasında .pyc almak için şunu çalıştırabilirsiniz:
.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:
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:
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.
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.
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:
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:
Başlamak için, payload'ların py2exe ve PyInstaller ile nasıl derleneceğini göstereceğiz.
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'ı 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.
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!
AWS Hacking öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE) GCP Hacking öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)