XDA هي أداة لتفكيك التعليمات واستعادة حدود الوظائف للثنائيات المجردة. يعتمد على نقل التعلم باستخدام برنامج ترميز المحولات مع هدف نمذجة اللغة المقنعة [1، 2، 3]. فهو يتفوق على أحدث الأدوات (مثل IDA Pro وGhidra وRNN ثنائي الاتجاه [4]). يرجى الاطلاع على التفاصيل في ورقتنا: XDA: تفكيك دقيق وقوي مع نقل التعلم
@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)}
}
نوصي باستخدام conda
لإعداد البيئة وتثبيت الحزم المطلوبة.
أولاً، قم بإنشاء بيئة كوندا،
conda create -n xda python=3.7 numpy scipy scikit-learn colorama
وتفعيل بيئة كوندا:
conda activate xda
ثم قم بتثبيت أحدث إصدار من Pytorch (بافتراض أن لديك وحدة معالجة الرسومات):
conda install pytorch torchvision torchaudio cudatoolkit=11.0 -c pytorch
أخيرًا، أدخل الدليل الجذر لـ xda: على سبيل المثال، path/to/xda
، وقم بتثبيت XDA:
pip install --editable .
قم بإنشاء الدليل الفرعي checkpoints
ونقاط checkpoints/pretrain_all
في path/to/xda
mkdir -p checkpoints/pretrain_all
قم بتنزيل معلمات الوزن المدربة مسبقًا لدينا وقم بوضع checkpoints/pretrain_all
كما نقدم لك النموذج المضبوط لتتمكن من اللعب مباشرة على استعادة حدود الوظيفة. يتم تدريب النموذج الدقيق على الثنائيات التي تم تجميعها بواسطة MSVC x64. قم بإنشاء الدليل الفرعي checkpoints/finetune_msvs_funcbound_64
في path/to/xda
mkdir -p checkpoints/finetune_msvs_funcbound_64
قم بتنزيل معلمات الوزن المضبوطة لدينا ووضعها في checkpoints/finetune_msvs_funcbound_64
.
لقد وضعنا بعض نماذج البيانات من مجموعة BAP التي تم تجميعها بواسطة MSVC x64 في data-raw/msvs_funcbound_64_bap_test
. هناك عمودين في ملفات البيانات. العمود الأول عبارة عن كافة وحدات البايت الأولية للثنائي، والعمود الثاني هو التسمية التي تشير إلى أنه بداية الوظيفة (F)، أو نهاية الوظيفة (R)، أو لا شيء.
للتنبؤ بحدود الوظيفة في هذه الملفات، قم بتشغيل:
python scripts/play/play_func_bound.py
ستقوم هذه البرامج النصية بتحميل الأوزان الدقيقة التي تضعها في checkpoints/finetune_msvs_funcbound_64
وتتنبأ بحدود الوظيفة. كما سيتم مقارنتها بالحقيقة الأرضية ونتائج المؤسسة الدولية للتنمية.
نحن نقدم نماذج من ملفات التدريب/الاختبار للتدريب المسبق والضبط الدقيق في data-src/
data-src/pretrain_all
على عينة من البايتات الأولية من الثنائيات التي تم تجريدها للتدريب المسبقdata-src/funcbound
على عينة من وحدات البايت الأولية ذات حدود الوظائف لقد قدمنا بالفعل نماذج تم تدريبها مسبقًا على عدد كبير من الثنائيات. لكن إذا كنت ترغب في التدريب المسبق على البيانات المجمعة الخاصة بك، فيمكنك إعداد نماذج الملفات المشابهة للتنسيق الموجود في data-src/pretrain_all
(قم بتسلسل كل البايتات من كافة الثنائيات، وحددها بسطر جديد n
للتأكد من أن كل سطر لا يتجاوز الحد الأقصى للطول الذي يقبله النموذج). وبالمثل، إذا كنت تريد إعداد بيانات الضبط بنفسك، فتأكد من اتباع التنسيق الموضح في data-src/funcbound
.
يتعين علينا تحويل البيانات إلى صيغة ثنائية لجعلها جاهزة للتدريب. لتحويل بيانات التدريب إلى ثنائي للتدريب المسبق، قم بتشغيل:
./scripts/pretrain/preprocess-pretrain-all.sh
سيتم تخزين بيانات التدريب الثنائية الجاهزة للتدريب المسبق في data-bin/pretrain_all
لدمج بيانات التدريب من أجل الضبط الدقيق، قم بتشغيل:
./scripts/finetune/preprocess.sh
سيتم تخزين بيانات التدريب الثنائية الجاهزة للضبط الدقيق (لحدود الوظيفة) في data-bin/funcbound
إذا كنت تستخدم الثنائيات التي تم تحليلها للتدريب المسبق، وقمت بالفعل بتحويلها إلى ثنائيات في data-bin/pretrain_all
، فقم بتشغيل:
./scripts/pretrain/pretrain-all.sh
لتحسين النموذج، قم بتشغيل:
./scripts/finetune/finetune.sh
تقوم البرامج النصية بتحميل معلمات الوزن المُدربة مسبقًا من checkpoints/pretrain_all/
وضبط النموذج.
birnn/
لتقييم السرعة، قمت بوضع برنامج نصي على https://github.com/CUMLSec/XDA/blob/main/scripts/play/speed_eval.py
[1] فاسواني، أشيش، وآخرون. "الاهتمام هو كل ما تحتاجه." التقدم في أنظمة معالجة المعلومات العصبية. 2017.
[2] ديفلين، جاكوب، وآخرون. "بيرت: التدريب المسبق للمحولات العميقة ثنائية الاتجاه لفهم اللغة." arXiv طبعة أولية arXiv:1810.04805 (2018).
[3] ليو، ينهان، وآخرون. "روبرتا: نهج التدريب المسبق الأمثل بقوة لبيرت." arXiv طبعة أولية arXiv:1907.11692 (2019).
[4] شين، إيوي تشول ريتشارد، دون سونغ، ورضا معزيزي. "التعرف على الوظائف في الثنائيات مع الشبكات العصبية." الندوة الأمنية الرابعة والعشرون لـ USENIX. 2015.