
SAFE: تمثيلات وظائف ذاتية الانتباه لمقارنة الثنائيات
هذا البرنامج هو نتاج بحثنا الأكاديمي. انظر ورقتنا على arXiv: arxiv
إذا استخدمت هذا الكود، يرجى الاستشهاد بورقتنا الأكاديمية على النحو التالي:
@inproceedings{massarelli2018safe,
title={SAFE: Self-Attentive Function Embeddings for Binary Similarity},
author={Massarelli, Luca and Di Luna, Giuseppe Antonio and Petroni, Fabio and Querzoni, Leonardo and Baldoni, Roberto},
booktitle={Proceedings of 16th Conference on Detection of Intrusions and Malware & Vulnerability Assessment (DIMVA)},
year={2019}
}
تحتاج إلى تثبيت radare2 في نظامك.
لإنشاء تضمين لدالة:
git clone https://github.com/gadiluna/SAFE.git
pip install -r requirements
chmod +x download_model.sh
./download_model.sh
python safe.py -m data/safe.pb -i helloworld.o -a 100000F30
بمجرد حصولك على تضمينين embedding_x و embedding_y يمكنك حساب التشابه بين الدوال المقابلة كما يلي:
from sklearn.metrics.pairwise import cosine_similarity
sim=cosine_similarity(embedding_x, embedding_y)
يحتاج SAFE إلى القليل من المعلومات ليعمل. اثنان أساسيان: نموذج يخبر SAFE كيف يحول تعليمات التجميع إلى متجهات (نموذج i2v) ونموذج يخبر SAFE كيف يحول دالة ثنائية إلى متجه. كلا النموذجين يمكن تحميلهما باستخدام الأمر
./download_model.sh
يقوم المحمل بتحميل النموذج ووضعه في مجلد data. يجب أن يكون هيكل المجلد بعد التحميل كالتالي.
safe/-- githubcode
\
\--data/-----safe.pb
\
\---i2v/
يحتوي ملف safe.pb على نموذج SAFE المستخدم لتحويل الدوال الثنائية إلى متجهات. يحتوي مجلد i2v على نموذج i2v.
يحتوي هذا القسم على تفاصيل ضرورية لإعادة تجاربنا، إذا كنت مستخدمًا لـ SAFE يمكنك تخطيه.
هذا هو نموذج TensorFlow المُجمّد والمدرّب لمعمارية AMD64. يمكنك استيراده في مشروعك باستخدام:
import tensorflow as tf
with tf.gfile.GFile("safe.pb", "rb") as f:
graph_def = tf.GraphDef()
graph_def.ParseFromString(f.read())
with tf.Graph().as_default() as graph:
tf.import_graph_def(graph_def)
sess = tf.Session(graph=graph)
انظر الملف: neural_network/SAFEEmbedder.py
يحتوي مجلد i2v على ملفين. مصفوفة حيث كل صف هو تضمين لتعليمة تجميع. ملف json يحتوي على قاموس يربط تعليمات التجميع بأرقام الصفوف في المصفوفة أعلاه. انظر الملف: asm_embedding/InstructionsConverter.py
إذا كنت تريد تدريب النموذج باستخدام مجموعات البيانات الخاصة بنا، عليك أولاً استخدام:
python3 downloader.py -td
سيؤدي هذا إلى تحميل مجموعات البيانات في مجلد data. لاحظ أن مجموعات البيانات مضغوطة لذا عليك فك ضغطها بنفسك. ستكون هذه البيانات قواعد بيانات sqlite. لبدء التدريب استخدم neural_network/train.sh. يمكن تحديد قاعدة البيانات بتغيير المعامل في train.sh. إذا كنت تريد معلومات عن مجموعة البيانات، انظر ورقتنا.
إذا كنت تريد إنشاء مجموعة البيانات الخاصة بك، يمكنك استخدام البرنامج النصي ExperimentUtil في مجلد dataset creation.
إذا كنت تريد استخدام محرك بحث الكود الثنائي SAFE، يمكنك استخدام البرنامج النصي ExperimentUtil لإنشاء قاعدة المعرفة. ثم يمكنك البحث من خلالها باستخدام البرنامج النصي في function_search
في كودنا نستخدم godown لتحميل البيانات من Google Drive. نشكر circulosmeos، منشئ godown.
نشكر Davide Italiano على المناقشات المفيدة.