
نهج متعدد البنى قائم على الرسوم البيانية مدعوم بتعلم الآلة للكشف عن أدوات ROP
LCSAJdump هو إطار تحليل ثابت مصمم لاكتشاف أدوات البرمجة الموجهة بالعودة (ROP) والبرمجة الموجهة بالقفز (JOP). على عكس الماسحات التقليدية، فإن LCSAJdump غير معتمد على بنية المعالج (architecture-agnostic) ويستخدم نهجًا قائمًا على الرسوم البيانية لكشف الثغرات غير المرئية للأدوات الخطية الشائعة.
تستخدم ماسحات ROP التقليدية نهج "النافذة المنزلقة" الخطي على وحدات البايت القابلة للتنفيذ في الملف الثنائي. تفشل هذه الطريقة منهجيًا في تحديد الأدوات الظليلة (Shadow Gadgets) : سلاسل التنفيذ التي تعبر كتل الذاكرة غير المتجاورة المرتبطة بقفزات غير مشروطة أو فروع شرطية.
يتجاوز LCSAJdump هذا القيد عن طريق إعادة بناء رسم بياني لتدفق التحكم (Control-Flow Graph - CFG) من خلال تحليل LCSAJ (تسلسل الكود الخطي والقفز). من خلال نمذجة الملف الثنائي كرسم بياني موجه للكتل الأساسية، يحدد الأداة:
.text إلى كتل LCSAJ أساسية ويعيد بناء علاقات التدفق من خلال رسم بياني عكسي لتدفق التحكم مبني خصيصًا (تمثيل تجاور خفيف الوزن، بدون اعتماد على مكتبات رسوم بيانية ثقيلة).--depth من القفزات، مما يقلل بشكل كبير من الذاكرة ووقت البناء في الملفات الثنائية الكبيرة (مثل libc) مع إنتاج نتائج متطابقة.(انظر المعايير).
تم تصميم LCSAJdump ليكون عامًا. البنيات المدعومة حاليًا:
config.py.pip install lcsajdump
git clone [https://github.com/Chris1sFlaggin/LCSAJdump.git](https://github.com/Chris1sFlaggin/LCSAJdump.git)
cd LCSAJdump
pip install -r requirements.txt
يقدم LCSAJdump واجهة سطر أوامر قوية لتحليل دقيق للملفات الثنائية:
التحليل القياسي (RISC-V الافتراضي):
python LCSAJdump.py <path_to_binary>
تحليل متقدم (تحديد البنية وملف الإخراج):
lcsajdump -a riscv64 -d 15 -k 10 -l 20 -o gadgets.txt <path_to_binary>
تصدير بصيغة JSON مع مرشح الأحرف السيئة:
lcsajdump -a x86_64 -d 20 -k 5 -b "000a0d" --json -o gadgets.json <path_to_binary>
ملاحظة: استخدم
-oبعد--jsonلحفظ JSON في ملف. بدون--json، يحفظ-oنصًا عاديًا.
حفظ الإخراج كنص عادي:
lcsajdump -a riscv64 -d 15 -k 10 -l 20 -o gadgets.txt <path_to_binary>
تحليل جميع الأقسام القابلة للتنفيذ:
lcsajdump --all-exec -d 25 -k 10 -l 30 <path_to_binary>
فرض الترتيب الخوارزمي الصارم (تجاوز التعلم الآلي):
lcsajdump --algo <path_to_binary>
يعتمد LCSAJdump على مجموعة اختبارات صارمة تم التحقق منها بشكل تدريجي موجودة في دليل benchmarkTests/.
من خلال 14 تكرارًا رئيسيًا لهندسة الميزات الدلالية، تعلم النموذج الهجين التمييز بين الأدوات بناءً على الآثار الجانبية الفعلية للذاكرة (المستخرجة عبر التنفيذ الرمزي لـ angr) بدلاً من الإرشادات النحوية البحتة.
عند التقييم باستخدام التحقق المتقاطع ذو الـ 5 أضعاف المراعي للمجموعات (الملفات الثنائية للاختبار لم تُرَ مطلقًا أثناء التدريب)، يحقق المُرتب NDCG@1 = 0.914 ± 0.047 و NDCG@10 = 0.922 ± 0.052، مما يعني أن الأدوات الأكثر فائدة توضع باستمرار في أعلى الإخراج. ينجح المحرك ذو المرحلتين في إعطاء الأولوية لتسلسلات إخراج المكدس النظيفة واستدعاءات ret2csu، بينما يعاقب بشدة القفزات ذات الإزاحة الثابتة المعرضة للانهيار والتي تخدع الماسحات الثابتة التقليدية.
تم تنظيم المستودع لدعم كل من المستخدمين النهائيين وباحثي التعلم الآلي.
lcsajdump/ml_study/ على خط الأنابيب الكامل المستخدم لتدريب النماذج:
build_dataset.py: يستخرج الميزات الهيكلية والدلالية من مجموعة من الملفات الثنائية لمسابقات CTF.train_model.py: يدرب نموذج LightGBM LambdaRank ويخرج نماذج .pkl.kfold_cv.py: يتحقق من صحة مجموعة البيانات باستخدام التحقق المتقاطع ذو الـ K-Fold.الإطار مفتوح لتنفيذات جديدة. لإضافة بنية جديدة:
lcsajdump/core/config.py.ARCH_PROFILES، مع تعريف ذاكريات القفز، ذاكريات العودة، والسجلات للبنية المطلوبة (مثال x86_64).تم إصدار هذا المشروع بموجب ترخيص MIT. راجع ملف LICENSE للحصول على التفاصيل.
قم بزيارة صفحة الويب الخاصة بالمشروع: صفحة LCSAJdump على الويب
| العَلَم | النوع | الافتراضي | الوصف |
|---|
-a, --arch | TEXT | auto | البنية المستهدفة (auto, riscv64, x86_64, arm64). يتم الكشف عنها تلقائيًا من رأس ELF. |
-d, --depth | INTEGER | 20 | أقصى عمق بحث في كتل LCSAJ. يتحكم في طول السلسلة. |
-k, --darkness | INTEGER | 5 | حد التقليم — أقصى عدد زيارات لكل عقدة. أعلى = أدوات أكثر، مسح أبطأ. |
-l, --limit | INTEGER | 10 | أقصى عدد للأدوات لعرضها في الإخراج. |
-s, --min-score | INTEGER | 0 | الحد الأدنى للدرجة الإرشادية لظهور الأداة في النتائج. |
-i, --instructions | INTEGER | 15 | أقصى عدد للتعليمات الموجودة في عقدة LCSAJ واحدة. |
-v, --verbose | عَلَم | — | تمكين الإخراج المفصل لنتائج مفصلة لكل أداة. |
-o, --output | PATH | — | كتابة الإخراج إلى ملف. نص عادي افتراضيًا؛ استخدم مع --json لإخراج JSON. |
-b, --bad-chars | TEXT | — | بايتات سداسية عشرية لتصفية عناوين الأدوات (مثال "000a0d"). |
--json | عَلَم | — | إخراج الأدوات كـ JSON منظم. ادمج مع -o للحفظ في ملف. |
--all-exec | عَلَم | — | تحليل جميع الأقسام القابلة للتنفيذ، وليس فقط .text. |
-al, --algo | عَلَم | — | استخدام الترتيب الخوارزمي الصارم (تجاوز التعلم الآلي). |
--version | عَلَم | — | إظهار الإصدار المثبت والخروج. |
--help | عَلَم | — | إظهار رسالة المساعدة والخروج. |