- Reverse engineering dengan menggunakan large language model
1. Pengenalan LLM4Decompile dan Decompile-Eval
- Tujuan kami adalah membuat dan merilis LLM open source pertama yang didedikasikan untuk dekompilasi, serta membangun benchmark dekompilasi pertama yang berfokus pada kemampuan kompilasi ulang dan eksekusi ulang untuk mengevaluasi kemampuannya.
- Satu juta sampel kode C yang dikumpulkan dari AnghaBench dikompilasi menjadi kode assembly menggunakan GCC, lalu digunakan untuk membangun dataset pasangan assembly-source sebesar 4 miliar token.
- Dengan dataset ini, model DeepSeek-Coder, salah satu code LLM terdepan, di-fine-tune, dan benchmark evaluasi Decompile-Eval dibangun berdasarkan soal HumanEval dan sampel pengujian.
- Evaluasi dilakukan dari dua sudut pandang: apakah kode hasil dekompilasi dapat berhasil dikompilasi ulang, dan apakah semua assertion dalam test case dapat dilalui.
2. Hasil evaluasi
Metrik
- Kemampuan kompilasi ulang dan kemampuan eksekusi ulang adalah metrik penting untuk memverifikasi efektivitas proses dekompilasi.
- Jika kode hasil dekompilasi dapat dikompilasi ulang, hal itu memberikan bukti kuat atas integritas sintaksis.
- Karena sintaks saja tidak menjamin kesetaraan semantik dengan program asli, kemampuan eksekusi ulang menjadi ukuran penting untuk menilai akurasi semantik.
- Kemampuan kompilasi ulang dan eksekusi ulang merepresentasikan pemulihan sintaks dan pelestarian semantik, yang sangat penting untuk dekompilasi yang andal dan dapat digunakan.
3. Cara menggunakan model
- LLM4Decompile mencakup model dengan 1,3 miliar hingga 33 miliar parameter, dan model-model ini tersedia di Hugging Face.
- Contoh model: llm4decompile-1.3b, llm4decompile-6.7b, llm4decompile-33b, llm4decompile-6.7b-nsp, llm4decompile-6.7b-uo
- Model NSP dilatih dengan kode assembly, dan rata-rata kemampuan eksekusi ulangnya sekitar 0,17.
- Model UO dilatih tanpa pengetahuan awal tentang tingkat optimasi (O0~O3), dan rata-rata kemampuan eksekusi ulangnya sekitar 0,21.
- Contoh penggunaan model: kompilasi kode C menjadi biner, disassembly biner menjadi instruksi assembly, lalu gunakan LLM4Decompile untuk menerjemahkan instruksi assembly ke C.
4. Cara menggunakan Decompile-Eval
- Data disimpan dalam format daftar JSON di
llm4decompile/decompile-eval/decompile-eval.json.
- Disediakan cara menjalankan evaluasi pada single GPU dan single process, serta cara menggunakan TGI (10x lebih cepat, mendukung multi-GPU dan multi-process).
5. Sedang berlangsung
- LLM4Binary: berencana menyertakan dataset yang lebih besar untuk pre-training model dengan kode assembly dan kode C.
- Decompiler-ALL: rencana untuk mendukung lebih banyak bahasa/platform dan konfigurasi (misalnya, dekompilasi banyak fungsi).
6. Lisensi
Opini GN⁺
- LLM4Decompile menawarkan pendekatan inovatif dibandingkan metode dekompilasi biner yang sudah ada, terutama dengan memanfaatkan large language model untuk memungkinkan dekompilasi yang lebih akurat dan efisien.
- Teknologi ini bisa sangat berguna di bidang keamanan perangkat lunak, dan dapat membantu analisis malware maupun pemeliharaan sistem legacy.
- Fakta bahwa kemampuan eksekusi ulang kode hasil dekompilasi belum sempurna menunjukkan bahwa teknologi ini masih memiliki ruang untuk perbaikan. Diperlukan riset tambahan untuk meningkatkan akurasi dan efisiensinya di lingkungan nyata.
- Alat yang sudah ada dengan fungsi serupa mencakup decompiler komersial dan open source seperti Ghidra atau IDA Pro, tetapi LLM4Decompile menawarkan pendekatan baru berbasis machine learning.
- Saat mengadopsi teknologi ini, perlu mempertimbangkan kualitas dan cakupan data pelatihan, akurasi model, kecepatan eksekusi, dan sebagainya. Keuntungan yang bisa diperoleh adalah akurasi dan fleksibilitas tinggi, tetapi kompleksitas model skala besar serta kebutuhan sumber daya komputasi dapat menjadi kekurangan.
1 komentar
Opini Hacker News
Opini tentang hasil "re-executability":
Pertanyaan tentang keandalan hasil dekompilasi:
Kasus penggunaan yang sangat baik untuk fine-tuning LLM:
Ketertarikan pada pelatihan modul dekompilasi berbasis pengembang:
Ketertarikan pada use case ideal decompiler dan pembuatan dataset:
Perkenalan proyek decompiler berbasis LLM yang sedang dikerjakan secara pribadi:
Kekhawatiran tentang benchmark tanpa perbandingan dengan pendekatan berbasis AI:
Ketertarikan pada perbedaan besar antara skor recompilability dan re-executability:
Rasa ingin tahu tentang perbandingan dengan decompiler non-LLM lain:
Rasa ingin tahu tentang model 6b yang berkinerja lebih baik daripada model 33b: