Demo yang diperbarui segera hadir!
Asisten rekayasa balik (ReVA) adalah proyek untuk membangun asisten AI agnostik disassembler untuk tugas rekayasa balik. Ini mencakup inferensi offline dan online serta arsitektur sederhana.
ReVa berbeda dari upaya lain dalam membangun asisten AI untuk tugas-tugas RE karena menggunakan pendekatan berbasis alat . ReVa bertujuan untuk menyediakan berbagai alat kecil untuk LLM, sama seperti lingkungan RE Anda menyediakan seperangkat alat kecil untuk Anda. ReVa menggabungkan pendekatan ini dengan teknik rantai penalaran untuk memberdayakan LLM dalam menyelesaikan tugas-tugas kompleks.
Masing-masing alat yang diberikan kepada LLM dikonstruksi agar mudah digunakan oleh LLM dan dapat menoleransi berbagai masukan serta mengurangi halusinasi oleh LLM. Kami melakukan ini dengan memberikan skema kepada LLM tetapi menoleransi masukan lain, termasuk deskripsi yang memandu LLM, dan mengarahkan kesalahan yang dapat diperbaiki kembali ke LLM, dan menyertakan keluaran tambahan untuk memandu keputusan LLM berikutnya.
Misalnya, ketika LLM meminta dekompilasi dari alat RE Anda, kami akan menerima alamat mentah dalam hex, alamat mentah dalam basis 10, nama simbol dengan namespace, atau simbol. Jika LLM memberi kami masukan yang buruk, kami melaporkannya ke LLM bersama dengan instruksi untuk memperbaiki masukan tersebut (mungkin mendorongnya untuk menggunakan daftar fungsi misalnya). Untuk mendorong eksplorasi seperti yang dilakukan manusia, kami melaporkan konteks tambahan seperti namespace dan referensi silang bersama dengan dekompilasi. Ini adalah dorongan kecil untuk membuat LLM menjelajahi biner dengan cara yang sama seperti yang dilakukan manusia.
Dengan menggunakan teknik ini Anda dapat mengajukan pertanyaan umum dan mendapatkan jawaban yang relevan. Model ini memprioritaskan informasi dari alat, namun jika tidak ada informasi, model masih dapat merespons pertanyaan umum dari pelatihannya.
Anda dapat mengajukan pertanyaan seperti:
__mod_init
.mmap
?Bagian penting dari rekayasa balik adalah prosesnya. Banyak alat lain yang hanya menanyakan satu pertanyaan kepada LLM, ini berarti sulit untuk menentukan mengapa sesuatu terjadi. Di ReVa kami memecah semua tindakan menjadi bagian-bagian kecil dan memasukkan pemikiran LLM ke dalam output. Hal ini memungkinkan analis untuk memantau tindakan dan alasan LLM, membatalkan dan mengubah perintah jika diperlukan.
RevA didasarkan pada langchain, yang mendukung sejumlah model.
Dukungan bawaan disediakan untuk:
Lihat Konfigurasi untuk informasi lebih lanjut tentang pengaturan penyedia.
Menambahkan server inferensi tambahan mudah dilakukan jika didukung oleh langchain.
Konfigurasi untuk ReVa ada pada opsi CodeBrowser Tool. Buka program dan buka Edit -> Opsi Alat -> ReVa.
Ada opsi untuk:
Ada bagian untuk penyedia.
Secara default, kunci OpenAI dimuat dari variabel lingkungan OPENAI_API_KEY
. Anda juga dapat mengatur kunci Anda di dalam Ghidra. Menyetel kembali kunci ke nilai OPENAI_API_KEY
akan menghapus kunci dari konfigurasi Ghidra dan memuatnya dari lingkungan.
Anda juga dapat memilih modelnya. Secara default gpt-4o
dipilih. Model ini berfungsi paling baik dengan alat dan perintah yang disediakan oleh ReVa.
gpt-4
juga berfungsi dengan baik, tetapi lambat dan memerlukan lebih banyak dorongan dari pengguna untuk menjelajahi biner.
Ollama adalah server inferensi lokal. Server default diatur ke localhost, dengan port default Ollama. Anda dapat mengubahnya ke server jarak jauh jika Anda ingin melakukan inferensi pada mesin jarak jauh. Hal ini berguna bagi organisasi yang menjadi tuan rumah mandiri.
Anda juga dapat memilih model. Model harus sudah dimuat di server. Kinerja yang baik terlihat pada:
mixtral
llama3
phi
RevA memiliki alur kerja dua langkah.
ReVa menggunakan ekstensi untuk alat RE Anda untuk melakukan analisis. Lihat Dukungan Ghidra di bawah.
Untuk mengajukan pertanyaan dan menjalankan inferensi, alat baris perintah disediakan. Jalankan reva-chat
untuk memulai sesi obrolan. Perintah ini akan menemukan Ghidra terbuka Anda dan menyambungkannya. Untuk membuka obrolan baru, jalankan kembali perintah di terminal lain.
Jika Anda memiliki lebih dari satu Ghidra yang terbuka, Anda dapat memilih yang tepat dengan reva-chat --project ${project-name}
, jika tidak disetel, reva-chat
akan menanyakan proyek mana yang ingin Anda sambungkan.
Untuk berkomunikasi antara reva-server
dan ekstensi, gRPC digunakan. Anda dapat membaca lebih lanjut tentang itu (di sini)[./DEVELOPER.md]. Membangun file sumber dari definisi protokol tersebut didorong dari Makefile. Untuk membuat file kode sumber protokol, jalankan perintah ini di root proyek:
make protocol
Pertama instal komponen python, saya suka menggunakan pipx
. Instal dengan sesuatu seperti:
pip install pipx
Di folder reverse-engineering-assistant
, jalankan:
pipx install .
Setelah menginstal proyek python, pipx mungkin memperingatkan Anda bahwa Anda perlu menambahkan folder ke variabel lingkungan PATH Anda. Pastikan folder tersebut (sekarang berisi reva-server
dan reva-chat
) ada dalam variabel PATH Anda. pipx dapat melakukannya untuk Anda dengan perintah ini:
pipx ensurepath
Ekstensi harus dimulai reva-server
, dan Anda harus menjalankan reva-chat
. Jika Anda tidak ingin menambahkannya ke PATH Anda, lihat bagian Konfigurasi untuk mengetahui cara mengatur jalur ke file yang dapat dieksekusi.
Setelah reva-server
dimulai dengan ekstensi, obrolan dapat dimulai dengan:
reva-chat
Paket Python harus diinstal agar ekstensi Ghidra dapat berfungsi!
Ikuti instruksi di plugin ghidra-assistant.
Setelah instalasi, aktifkan ekstensi ReVa Plugin
di alat CodeBrowser (Buka file dan klik: File -> Configure -> Miscellaneous).
Jika Anda ingin ReVa diaktifkan secara default, klik File -> Save Tool untuk menyimpan konfigurasi.
Jika semuanya berfungsi dengan benar, Anda akan melihat menu ReVa di bilah menu Anda.
Anda dapat mengubah konfigurasi plugin di Edit -> Tool Options -> ReVa
.
Setiap kali ReVa melakukan suatu tindakan, ia akan membuat titik pembatalan untuk setiap tindakan. Jika ReVa mengganti nama 5 variabel, ini akan menjadi satu pembatalan.
ReVa menambahkan opsi ke menu Jendela Alat CodeBrowser. Pilih Jendela -> ReVa Action Log untuk membuka jendela ReVa Action Log.
Jendela ini menunjukkan tindakan yang telah dan ingin dilakukan ReVa. Anda dapat menerima atau menolak perubahan dengan mengklik dua kali ikon ✅ atau. Anda juga dapat menuju ke lokasi tindakan akan dilakukan dengan mengklik dua kali alamatnya.
Jika Anda menolak suatu tindakan, ReVa akan diberitahu dan dia akan melanjutkan.
Anda juga dapat mengaktifkan "Izinkan otomatis" di opsi ReVa. Ini secara otomatis akan menerima semua tindakan yang ingin dilakukan ReVa.
ReVa juga menambahkan beberapa elemen pada Ghidra UI. Anda dapat meminta ReVa melakukan sesuatu di jendela obrolan, "Periksa penggunaan variabel di main
secara detail, ganti nama variabel dengan nama yang lebih deskriptif.", atau gunakan sistem menu.
Misalnya Anda dapat mengklik kanan variabel dalam dekompilasi, pilih Reva -> Ganti nama variabel dan ReVa akan melakukan tindakan.
Apakah Anda menyukai pekerjaan saya? Ingin mendukung proyek ini dan lainnya? Tertarik dengan bagaimana proyek ini dirancang dan dibangun? Proyek ini dan banyak proyek lainnya dibuat langsung di aliran saya di https://twitch.tv/cyberkaida !