XDA adalah alat untuk membongkar instruksi dan memulihkan batas fungsi biner yang dilucuti. Hal ini didasarkan pada pembelajaran transfer menggunakan encoder Transformer dengan tujuan pemodelan bahasa bertopeng [1, 2, 3]. Ini mengungguli alat-alat canggih (misalnya, IDA Pro, Ghidra, dan RNN dua arah [4]). Silakan temukan detailnya di makalah kami: XDA: Pembongkaran yang Akurat dan Kuat dengan Pembelajaran Transfer
@inproceedings{pei2021xda,
title={XDA: Accurate, Robust Disassembly with Transfer Learning},
author={Pei, Kexin and Guan, Jonas and King, David Williams and Yang, Junfeng and Jana, Suman},
year={2021},
booktitle={Proceedings of the 2021 Network and Distributed System Security Symposium (NDSS)}
}
Kami merekomendasikan penggunaan conda
untuk mengatur lingkungan dan menginstal paket yang diperlukan.
Pertama, buat lingkungan conda,
conda create -n xda python=3.7 numpy scipy scikit-learn colorama
dan aktifkan lingkungan conda:
conda activate xda
Kemudian, instal Pytorch terbaru (anggap Anda memiliki GPU):
conda install pytorch torchvision torchaudio cudatoolkit=11.0 -c pytorch
Terakhir, masuk ke direktori root xda: misalnya path/to/xda
, dan instal XDA:
pip install --editable .
Buat subdirektori checkpoints
dan checkpoints/pretrain_all
di path/to/xda
mkdir -p checkpoints/pretrain_all
Unduh parameter bobot kami yang telah dilatih sebelumnya dan masukkan checkpoints/pretrain_all
Kami juga menyediakan model yang telah disempurnakan untuk Anda mainkan langsung pada pemulihan batas fungsi. Model yang telah disempurnakan dilatih pada biner yang dikompilasi oleh MSVC x64. Buat subdirektori checkpoints/finetune_msvs_funcbound_64
di path/to/xda
mkdir -p checkpoints/finetune_msvs_funcbound_64
Unduh parameter bobot kami yang telah disempurnakan dan masukkan checkpoints/finetune_msvs_funcbound_64
.
Kami telah memasukkan beberapa contoh data dari korpus BAP yang dikompilasi oleh MSVC x64 di data-raw/msvs_funcbound_64_bap_test
. Ada dua kolom dalam file data. Kolom pertama adalah semua byte mentah biner, dan kolom kedua adalah label yang menunjukkan bahwa itu adalah fungsi awal (F), fungsi akhir (R), atau bukan keduanya.
Untuk memprediksi batas fungsi dalam file-file ini, jalankan:
python scripts/play/play_func_bound.py
Skrip ini akan memuat bobot yang telah disesuaikan yang Anda masukkan ke checkpoints/finetune_msvs_funcbound_64
dan memprediksi batas fungsi. Hal ini juga akan dibandingkan dengan kebenaran di lapangan dan hasil dari IDA.
Kami menyediakan contoh file pelatihan/pengujian prapelatihan dan penyempurnaan di data-src/
data-src/pretrain_all
berisi sampel byte mentah dari biner yang dilucuti untuk pra-pelatihandata-src/funcbound
berisi sampel byte mentah dengan batasan fungsi Kami telah menyediakan model terlatih pada sejumlah besar biner. Namun jika Anda ingin melakukan pra-latihan pada data yang Anda kumpulkan sendiri, Anda dapat menyiapkan file sampel yang mirip dengan format di data-src/pretrain_all
(gabungkan semua byte dari semua biner, dan batasi dengan baris baru n
untuk memastikan setiap baris tidak melebihi panjang maksimal yang diterima model). Demikian pula, jika Anda ingin menyiapkan sendiri penghalusan data, pastikan Anda mengikuti format yang ditunjukkan di data-src/funcbound
.
Kami harus melakukan binerisasi data agar siap untuk dilatih. Untuk melakukan binerisasi data pelatihan untuk pra-pelatihan, jalankan:
./scripts/pretrain/preprocess-pretrain-all.sh
Data pelatihan biner yang siap untuk prapelatihan akan disimpan di data-bin/pretrain_all
Untuk melakukan binerisasi data pelatihan untuk penyesuaian, jalankan:
./scripts/finetune/preprocess.sh
Data pelatihan biner yang siap untuk disempurnakan (untuk batas fungsi) akan disimpan di data-bin/funcbound
Jika Anda menggunakan biner parsing Anda sendiri untuk prapelatihan, dan Anda sudah melakukan binerisasi biner tersebut di data-bin/pretrain_all
, jalankan:
./scripts/pretrain/pretrain-all.sh
Untuk menyempurnakan model, jalankan:
./scripts/finetune/finetune.sh
Skrip memuat parameter bobot yang telah dilatih sebelumnya dari checkpoints/pretrain_all/
dan menyempurnakan model.
birnn/
Untuk evaluasi kecepatan, saya telah memasang skrip di https://github.com/CUMLSec/XDA/blob/main/scripts/play/speed_eval.py
[1] Vaswani, Ashish, dkk. "Hanya perhatian yang kamu butuhkan." Kemajuan dalam sistem pemrosesan informasi saraf. 2017.
[2] Devlin, Yakub, dkk. "Bert: Pra-pelatihan transformator dua arah yang mendalam untuk pemahaman bahasa." arXiv pracetak arXiv:1810.04805 (2018).
[3] Liu, Yinhan, dkk. "Roberta: Pendekatan pra-pelatihan bert yang dioptimalkan dengan kuat." arXiv pracetak arXiv:1907.11692 (2019).
[4] Shin, Eui Chul Richard, Lagu Fajar, dan Reza Moazzezi. "Mengenali fungsi dalam biner dengan jaringan saraf." Simposium Keamanan USENIX ke-24. 2015.