Bagaimana cara men-debug skrip Python plugin Ghidra di IDE?
Saya ingin men-debug skrip plugin Ghidra yang ditulis dengan python menggunakan IDE seperti Eclipse. Saya telah menginstal Pydev dan plugin GhidraDev (dari Ghidra buka skrip di Eclipse untuk menginstal plugin secara otomatis).
Dengan skrip plugin dibuka di Eclipse, saya akan menetapkan breakpoint (misalnya pada print stmt di bawah), lalu klik Debug> GhidraScripts untuk meluncurkan Ghidra, dan akhirnya secara manual memulai skrip (lihat contoh skrip di bawah). Saya melihat utas dan dapat menghentikan utas skrip dari Eclipse, tetapi titik putus tidak pernah tercapai.
Saya sudah mencoba GhidraScripts (Headless) dan peluncuran GhidraScript berbasis GUI, namun tidak ada istirahat saya.
# Hello Function Script
# @author mechgt
# @category _NEW_
# @keybinding
# @menupath
# @toolbar
import ghidra
import time
# Iterate through functions, parsing and printing each
function = getFirstFunction()
while function is not None:
print("Function: {} Address: {}".format(function.getName(), function.getEntryPoint()))
time.sleep(3)
function = getFunctionAfter(function)
Bagaimana saya bisa mendapatkan fungsionalitas debugging untuk skrip Ghidra Python?
CATATAN: Masalah debugging Eclipse / Ghidra / PyDev muncul terkait dengan kemungkinan bug: https://github.com/NationalSecurityAgency/ghidra/issues/1707
Jawaban
Saya sendiri tidak menggunakan Eclipse untuk Ghidra, tetapi sejauh yang saya periksa, seharusnya juga mendukung ini. Saya dapat mengonfirmasi bahwa pendekatan ini (debugging jarak jauh ditambah rintisan Python) bekerja dengan baik dengan PyCharm.
Debugging Jarak Jauh dengan pydevd
Ide dasarnya adalah menggunakan debugging jarak jauh dengan pydevdatau yang serupa.https://stackoverflow.com/a/41492711/13220684 menjelaskan penggunaan dasar.
Masalah dengan ini adalah Anda harus menginstal pydevddi dalam lingkungan Ghidra Jython. Berikut ini diadaptasi darihttps://github.com/VDOO-Connected-Trust/ghidra-pyi-generator#python-packages
# Create a virtualenv for Ghidra packages.
# It is important to use Python2.7 for this venv!
# If you want, you can skip this step and use your default Python installation.
mkvirtualenv ghidra
# Create Jython's site-pacakges directory.
jython_site_packages="~/.local/lib/jython2.7/site-packages"
mkdir -p $jython_site_packages # Create a PTH file to point Jython to Python's site-packages directories. # Again, this has to be Python2.7. # Outside a virtualenv, use python -c "import site; print(site.getusersitepackages()); print(site.getsitepackages()[-1])" > $jython_site_packages/python.pth
# If using virtualenv, use the following instead
python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())" > $jython_site_packages/python.pth
# Use pip to install packages for Ghidra
pip install pydevd
Sekarang seharusnya mungkin untuk import pydevddi dalam skrip Ghidra Python (atau bahkan REPL terintegrasi).
Saya tidak ingat apakah plugin GhidraDev untuk eclipse menyediakan penyelesaian tab untuk ghidramodul di dalam skrip Python, tetapi pengaturan ini cukup umum sehingga Anda tidak perlu menggunakan Eclipse lagi jika Anda lebih memilih IDE lain untuk Python.
IDE hanya perlu mendukung debugging jarak jauh melalui pydevd. Saya juga sangat merekomendasikan penggunaanhttps://github.com/VDOO-Connected-Trust/ghidra-pyi-generator jika Anda menggunakan IDE lain untuk memberikan informasi jenis, tanda tangan metode, dan docstrings dari Ghidra API ke IDE.
Solusi Lain
Secara pribadi saya menggunakan sebagian besar ghidra_bridgedan jenis rintisan yang disebutkan sebelumnya untuk Python dengan Ghidra. Karena ghidra_bridgemerupakan antarmuka RPC lengkap, Anda dapat menulis skrip Python 3 dengan dukungan IDE penuh dan menjalankannya melalui IDE. ghidra_bridgekemudian menangani koneksi ke lingkungan Ghidra Python dan memproksikan semua objek yang relevan. Dengan tipe stub, IDE hanya memperlakukan skrip sebagai skrip Python generik dan ghidramodul seperti modul Python 3 lainnya.