Decompile compiled python binaries (exe, elf) - Retreive from .pyc
Hata ödülü ipucu: Intigriti'ye kaydolun, hackerlar tarafından oluşturulan bir premium hata ödülü platformu! Bugün bize katılın https://go.intigriti.com/hacktricks 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 binary derlenmiş dosyasında, .pyc dosyasını çalıştırarak elde edebilirsiniz:
.pyc'den python koduna
.pyc verileri ("derlenmiş" python) için orijinal python kodunu çıkarmaya çalışmalısınız:
Binary'ın uzantısının ".pyc" olduğundan emin olun (değilse, uncompyle6 çalışmayacaktır)
uncompyle6 çalıştırılırken aşağıdaki hataları bulabilirsiniz:
Hata: Bilinmeyen sihirli numara 227
Bu sorunu düzeltmek için oluşturulan dosyanın başına doğru sihirli numarayı eklemeniz gerekir.
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 sihirli sayı 0x550d0d0a
olacaktır, ardından, bu hatayı düzeltmek için .pyc dosyasının başına şu baytları eklemeniz gerekecek: 0x0d550a0d000000000000000000000000
O sihirli başlığı ekledikten sonra, hata düzeltilmiş olmalıdır.
İşte doğru bir şekilde eklenmiş .pyc python3.8 sihirli başlığının görünümü:
Hata: Genel hataların dekompilasyonu
Diğer hatalar şuna benzer olabilir: class 'AssertionError'>; co_code should be one of the types (<class 'str'>, <class 'bytes'>, <class 'list'>, <class 'tuple'>); is type <class 'NoneType'>
.
Bu muhtemelen, sihirli numarayı doğru bir şekilde eklememiş olmanızdan kaynaklanıyor ya da doğru sihirli numarayı kullanmadığınız anlamına geliyor, bu yüzden doğru olanı kullandığınızdan emin olun (ya da yeni bir tane deneyin).
Önceki hata belgelerini kontrol edin.
Otomatik Araç
python-exe-unpacker aracı, Python ile yazılmış yürütülebilir dosyaları açma ve dekompilasyon araçlarından oluşan topluluk tarafından sunulan birkaç aracın birleşimi olarak araştırmacılara yardımcı olmak üzere tasarlanmıştır, özellikle py2exe ve pyinstaller ile oluşturulanlar. Bu, bir yürütülebilir dosyanın Python tabanlı olup olmadığını tanımlamak için YARA kurallarını içerir ve oluşturma aracını doğrular.
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şleminden kaynaklanan eksik bir Python bayt kodu dosyasıdır, bu da ardından uncompyle6 tarafından eksik bir Python bayt kodu sürüm numarası nedeniyle tanınmaz. Bu sorunu çözmek için, gerekli Python bayt kodu sürüm numarasını ekleyen bir ön ek seçeneği eklenmiştir, bu da dekompilasyon işlemini kolaylaştırır.
Sorunun örneği:
Python derlemesini analiz etme
Eğer önceki adımları takip ederek python "orijinal" kodu çıkartamadıysanız, o zaman derlemeyi çıkarmayı deneyebilirsiniz (ancak çok açıklayıcı değil, bu yüzden tekrar orijinal kodu çıkarmayı deneyin). Burada çok basit bir kod buldum .pyc ikili dosyasını çözümlemek için (kod akışını anlamak için iyi şanslar). .pyc python2'den ise, python2 kullanın:
Python'dan Yürütülebilir Dosyaya
Başlamak için, size yüklerin py2exe ve PyInstaller ile derlenebileceğini göstereceğiz.
py2exe kullanarak bir yük oluşturmak için:
http://www.py2exe.org/ adresinden py2exe paketini yükleyin.
Yük için (bu durumda, ona hello.py adını vereceğiz), Şekil 1'deki gibi bir betik kullanın. "bundle_files" seçeneği, 1 değeriyle, Python yorumlayıcısını da içeren her şeyi bir exe dosyasına paketleyecektir.
Betik hazır olduğunda, "python setup.py py2exe" komutunu veririz. Bu, Şekil 2'deki gibi yürütülebilir dosyayı oluşturacaktır.
PyInstaller kullanarak bir yük oluşturmak için:
PyInstaller'ı pip kullanarak yükleyin (pip install pyinstaller).
Bundan sonra, "pyinstaller --onefile hello.py" komutunu vereceğiz (hatırlatma: 'hello.py' yükümüzdür). Bu, her şeyi tek bir yürütülebilir dosyaya paketleyecektir.
Referanslar
Hata ödülü ipucu: Intigriti'ye kaydolun, hackerlar tarafından oluşturulan bir premium hata ödülü platformu! Bugün bize katılın https://go.intigriti.com/hacktricks ve 100.000 $'a kadar ödüller kazanmaya başlayın!
Last updated