Voltron adalah toolkit UI debugger yang dapat diperluas yang ditulis dengan Python. Hal ini bertujuan untuk meningkatkan pengalaman pengguna berbagai debugger (LLDB, GDB, VDB dan WinDbg) dengan mengaktifkan lampiran tampilan utilitas yang dapat mengambil dan menampilkan data dari host debugger. Dengan menjalankan tampilan ini di TTY lain, Anda dapat membuat antarmuka pengguna debugger yang disesuaikan dengan kebutuhan Anda.
Voltron tidak bertujuan untuk menjadi segalanya bagi semua orang. Ini bukan pengganti grosir untuk CLI debugger Anda. Sebaliknya, ini bertujuan untuk melengkapi pengaturan yang ada dan memungkinkan Anda memperluas debugger CLI sebanyak atau sesedikit yang Anda suka. Jika Anda hanya ingin melihat isi register di jendela bersama debugger Anda, Anda bisa melakukannya. Jika Anda ingin tampil maksimal dan memiliki sesuatu yang lebih mirip OllyDbg, Anda juga dapat melakukannya.
Tampilan bawaan disediakan untuk:
Pengaturan penulis terlihat seperti ini:
Perintah debugger apa pun dapat dipecah menjadi tampilan dan disorot dengan lexer Pygments yang ditentukan:
Tangkapan layar lainnya ada di sini.
Voltron mendukung LLDB, GDB, VDB dan WinDbg/CDB (melalui PyKD) dan berjalan di macOS, Linux dan Windows.
Dukungan WinDbg masih terbilang baru, silakan buka masalah jika Anda mengalami masalah.
Arsitektur berikut ini didukung:
lldb | gdb | vdb | anginbg | |
---|---|---|---|---|
x86 | ✓ | ✓ | ✓ | ✓ |
x86_64 | ✓ | ✓ | ✓ | ✓ |
lengan | ✓ | ✓ | ✓ | ✗ |
lengan64 | ✓ | ✗ | ✗ | ✗ |
powerpc | ✗ | ✓ | ✗ | ✗ |
Catatan: Hanya turunan macOS dan Debian yang didukung penuh oleh skrip instalasi. Mudah-mudahan ini tidak gagal di distro Linux lain, tetapi tidak akan mencoba menginstal dependensi paket. Jika Anda menggunakan distro lain, lihat install.sh
untuk mengetahui dependensi apa yang mungkin perlu Anda instal sebelum menjalankannya.
Unduh sumbernya dan jalankan skrip instalasi:
$ git clone https://github.com/snare/voltron
$ cd voltron
$ ./install.sh
Secara default, skrip instalasi akan diinstal ke direktori site-packages
pengguna. Jika Anda ingin menginstal ke dalam sistem site-packages
, gunakan tanda -s
:
$ ./install.sh -s
Anda juga dapat menginstal ke dalam lingkungan virtual (hanya untuk LLDB) seperti ini:
$ ./install.sh -v /path/to/venv -b lldb
Jika Anda menggunakan Windows tanpa shell, mengalami masalah saat menginstal, atau lebih memilih untuk menginstal secara manual, silakan lihat dokumentasi instalasi manual.
Jika debugger Anda memiliki skrip init ( .lldbinit
untuk LLDB atau .gdbinit
untuk GDB) konfigurasikan debugger tersebut untuk memuat Voltron saat dimulai dengan mencari sumber skrip titik masuk entry.py
. Jalur lengkapnya ada di dalam paket voltron
. Misalnya, di macOS mungkin /Library/Python/2.7/site-packages/voltron/entry.py . Skrip install.sh
akan menambahkan ini ke file .gdbinit
atau .lldbinit
Anda secara otomatis jika mendeteksi GDB atau LLDB di jalur Anda.
LLDB:
command script import /path/to/voltron/entry.py
GDB:
source /path/to/voltron/entry.py
Mulai debugger Anda dan inisialisasi Voltron secara manual jika perlu.
Pada LLDB versi terbaru Anda tidak perlu menginisialisasi Voltron secara manual:
$ lldb target_binary
Pada versi LLDB yang lebih lama, Anda perlu memanggil voltron init
setelah Anda memuat inferior:
$ lldb target_binary
(lldb) voltron init
GDB:
$ gdb target_binary
VDB:
$ ./vdbbin target_binary
> script /path/to/voltron/entry.py
WinDbg/CDB hanya didukung dijalankan melalui Bash dengan userland Linux. Penulis mengujinya dengan Git Bash dan ConEmu. PyKD dan Voltron dapat dimuat dalam satu perintah saat meluncurkan debugger:
$ cdb -c '.load C:pathtopykd.pyd ; !py --global C:pathtovoltronentry.py' target_binary
Di terminal lain (saya menggunakan panel iTerm) mulai salah satu tampilan UI. Di LLDB, WinDbg dan GDB, tampilan akan segera diperbarui. Di VDB mereka tidak akan memperbarui sampai yang lebih rendah berhenti (pada breakpoint, setelah satu langkah, dll):
$ voltron view register
$ voltron view stack
$ voltron view disasm
$ voltron view backtrace
Tetapkan breakpoint dan jalankan inferior Anda.
(*db) b main
(*db) run
Ketika debugger mencapai titik henti sementara, tampilan akan diperbarui untuk mencerminkan keadaan register, tumpukan, memori, dll saat ini. Tampilan diperbarui setelah setiap perintah dijalankan di CLI debugger, menggunakan mekanisme "stop hook" debugger. Jadi setiap kali Anda melangkah, atau melanjutkan dan mencapai titik henti sementara, tampilan akan diperbarui.
Lihat wiki di github.
T. Mengapa saya mendapatkan ImportError
saat memuat Voltron?
J. Anda mungkin menginstal beberapa versi Python dan menginstal Voltron menggunakan versi yang salah. Lihat petunjuk instalasi lebih detail.
T. GEF? PEDA? PwnDbg? gdbinit fG?
A. Semua ekstensi super hebat untuk GDB. Alat-alat ini terutama menyediakan serangkaian perintah tambahan untuk tugas eksploitasi, namun masing-masing juga menyediakan tampilan "konteks" dengan tampilan register, tumpukan, kode, dll, seperti Voltron. Alat-alat ini mencetak tampilan konteksnya di konsol debugger setiap kali debugger berhenti. Voltron mengambil pendekatan berbeda dengan menyematkan implan server RPC di debugger dan mengaktifkan lampiran tampilan dari terminal lain (atau bahkan browser web, atau sekarang menyinkronkan dengan Binary Ninja), yang memungkinkan pengguna membangun antarmuka multi-jendela yang lebih bersih untuk debugger mereka. Voltron bekerja dengan baik bersama semua alat ini. Anda cukup menonaktifkan tampilan konteks di ekstensi pilihan GDB Anda dan menghubungkan beberapa tampilan Voltron, sambil tetap mendapatkan semua manfaat dari perintah berguna yang ditambahkan oleh alat ini.
Lihat pelacak masalah di github untuk informasi lebih lanjut atau untuk mengirimkan masalah.
Jika Anda mengalami ImportError
saat memuat Voltron, pastikan Anda telah mengikuti petunjuk instalasi untuk platform Anda.
Pada versi LLDB yang lebih lama, perintah voltron init
harus dijalankan secara manual setelah memuat target debug, karena target harus dimuat sebelum kait Voltron dapat dipasang. Voltron akan mencoba mendaftarkan event handlernya secara otomatis, dan akan memberi tahu pengguna jika voltron init
diperlukan.
Informasi lebih lanjut tentang dukungan WinDbg/CDB di sini.
Penulis terutama menggunakan Voltron dengan versi LLDB terbaru di macOS. Kami akan mencoba menguji semuanya pada sebanyak mungkin platform dan arsitektur sebelum rilis, namun LLDB/macOS/x64 akan menjadi kombinasi yang paling sering digunakan. Semoga Voltron tidak membakar hewan peliharaan Anda, tapi YMMV.
Lihat file LISENSI.
Jika Anda menggunakan ini dan tidak membencinya, belikan saya bir di konferensi suatu saat nanti. Lisensi ini juga berlaku untuk kontributor lain - richo pasti berhak mendapatkan beberapa gelas bir atas kontribusinya.
Terima kasih kepada mantan perusahaan saya, Assurance dan Azimuth Security, karena telah memberi saya waktu untuk mengerjakan ini.
Alat peraga untuk richo atas semua kontribusinya pada Voltron.
Gdbinit fG! adalah inspirasi asli untuk proyek ini.
Terima kasih kepada Willi karena telah menerapkan dukungan VDB.
Voltron sekarang menggunakan Capstone untuk pembongkaran serta mekanisme pembongkaran internal host debugger. Capstone adalah disassembler multi-arsitektur yang kuat, open source, yang menjadi dasar pembuatan alat rekayasa balik dan debugging generasi berikutnya. Coba lihat.
Terima kasih kepada grazfather atas kontribusinya yang berkelanjutan.