
أداة استرداد الأنواع القائمة على N-gram للثنائيات، تقوم باسترداد الهياكل وتوقيعات الدوال من الكود المُفكك بإنتاجية عالية ونتائج ثقة قابلة للتنفيذ لخطوط الأنابيب الآلية.
نقدم XTRIDE، وهو نهج محسّن يعتمد على n-gram (راجع STRIDE) لاسترداد الأنواع في الملفات الثنائية مع التركيز على العملية: حيث تتيح الإنتاجية المحسّنة للغاية ودرجات الثقة القابلة للتنفيذ النشر في خطوط الأنابيب الآلية. عند مقارنتها بأحدث ما توصلت إليه تقنيات استرداد الهياكل، تحقق طريقتنا أداءً مشابهاً مع كونها أسرع بمقدار يتراوح بين 70 و 2300 مرة.
أداة CLI في ./bin تتطلب تثبيت مكتبة الإصدار 1.8.4 أو أحدث لـ hdf5 (وفقًا لوثائق الصندوق (crate)). البناء بأحدث إصدار يفشل على MacOS، نوصي بتثبيت hdf5 v1.10، على سبيل المثال باستخدام:
brew install [email protected]
cargo run --release -- create-dataset -i ../new_dataset/ -o ./
cargo run --release -- build-vocab ./xtride_plus_train.jsonl xtride_plus.vocab -t type
bin/src/db_creation.rs).
cargo run --release -- build-all-dbs -t type -k 5 --flanking -o xtride_plus_dbs/ ./xtride_plus_train.jsonl xtride_plus.vocab
cargo run --release -- evaluate --threshold-sweep ./xtride_plus_test.jsonl xtride_plus.vocab ./out_xtride.json --flanking --db-dir ./xtride_plus_dbs
استخدم recover لتشغيل استرداد الأنواع بأفضل جهد على قائمة دالة واحدة مفككة (إدخال نص عادي).
var*، param*، stack*، iVar*، sub_*)cargo run --release -- recover ./decompiled_function.c \
--vocab ./xtride_plus.vocab \
--db-dir ./xtride_plus_dbs \
--flanking \
--top-k 5 \
--fn-vocab <path>: مسار قاموس مفردات الدوال الصريح (إذا تم حذفه، يحاول recover استخدام <vocab_stem>.fn.vocab)--strip: تمكين وضع الشريط الكامل القديم (توافق خلفي مع DIRT / STRIDE، استخدم بحذر)--threshold <float>: إخفاء التنبؤات أقل من حد النتيجة (1.0 يعطل التصفية)--top-k <int>: عدد المرشحين المعروضين لكل رمز (الافتراضي: 5)الدرجات المعروضة هي درجات ترتيب من نوع الثقة من خط أنابيب النموذج. إنها مفيدة للترتيب النسبي والتصفية، وليست احتمالات معايرة. يقدم الملخص الرموز المكتشفة، والرموز المصفاة، والرموز التي لا تحتوي على مخرجات نموذجية.
نقوم بتضمين البيانات المعالجة مسبقًا لتكرار نماذج $XTRIDE_{PLUS}$ الموصوفة في ورقتنا البحثية في دليل ./data. يمكن استخدام ملفات JSONL مباشرة لاستخراج قاموس مفردات وتدريب النموذج (الخطوات 3 وما بعدها، اختر تكوين 16-db في bin/src/db_creation.rs). على الرغم من أن مجموعة بيانات التدريب تتضمن كمية كبيرة من البيانات من مجموعة واسعة من الملفات الثنائية، نود التأكيد على أن قابلية تعميم الأساليب القائمة على n-gram محدودة. نوصي دائمًا بإضافة عينات خاصة بالمجال إلى مجموعة البيانات، اعتمادًا على المكان الذي تخطط لاستخدام النموذج فيه.
تحتوي مجموعة البيانات المقدمة على عينات تكون:
محاولة تشغيل الاستدلال على عينات تنحرف عن هذا التوزيع ستؤدي على الأرجح إلى تنبؤات غير قابلة للاستخدام.
يتم تضمين مزيد من المعلومات حول كيفية استخراج البيانات لمجموعات بيانات جديدة أو إعادة التدريب والتقييم على مجموعة بيانات DIRT في وثائق تحضير مجموعة البيانات.
تعرض وحدة retyper تطبيقًا مرجعيًا للتكامل العميق لنظام استرداد الأنواع XTRIDE مع مفكك الترجمة. يتم حجز الوظيفة خلف علامة ميزة ويمكن تفعيلها باستخدام cargo build --features retyper.
نستخدم إطار BIAS من Binarly لتحليل البرامج والذي تم نشره كجزء من VulHunt. يتميز الإطار بنظام كتابة معبّر يتكامل بسلاسة مع fork من الخلفية المفككة لـ Ghidra المستخدمة لرفع التمثيلات المستردة داخليًا إلى لغة C زائفة. قمنا بتوسيع هذا fork وواجهة ffi الخاصة به بواجهات تسمح بتعديل أنواع المتغيرات مباشرة في المفكك. وهذا يتيح التطبيق المباشر للأنواع المستنتجة ضمن سياق المفكك، بما في ذلك نشر أنواع الحقول وما شابه ذلك.
| قبل: | بعد: |
![]() | ![]() |
لمزيد من المعلومات والأمثلة، راجع منشور مدونتنا.
بشكل عام، يتطلب أي تكامل مع مفكك الترجمة طبقة ترجمة من التنبؤات النصية (من قاموس المفردات) إلى تمثيل خاص بالأداة. التنسيق المستخدم في DIRT معبر بما يكفي للسماح بذلك ولكنه يتطلب حلاً متكررًا للأنواع (على سبيل المثال، في الهياكل) وحسابًا يدويًا للإزاحات والأحجام (جميع المعلومات الضرورية موجودة، بما في ذلك التعليقات التوضيحية للحشو). بالنسبة لوحدة retyper، يجب أن تكون الأنواع في قاموس المفردات (وبالتالي في مجموعة بيانات التدريب) مسلسلة أنواع BIAS. لا نخطط حاليًا لنشر خط أنابيب كامل لاستخراج البيانات وإنشاء مجموعة البيانات، وبالتالي نعتبر هذا تطبيقًا مرجعيًا وليس دليلاً كاملاً على المفهوم (PoC).
إذا كنت تستخدم الكود أو التقنيات أو النتائج المقدمة مع هذا المستودع والورقة المقابلة، يرجى الاستشهاد بعملنا على النحو التالي:
@inproceedings{Seidel_Practical_Type_Inference_2026,
author = {Seidel, Lukas and Thomas, Sam L. and Rieck, Konrad},
title = {{Practical Type Inference: High-Throughput Recovery of Real-World Structures and Function Signatures}},
series = {The 16th ACM Conference on Data and Application Security and Privacy},
month = jun,
year = {2026},
url = {https://arxiv.org/abs/2603.08225},
}