
يحقن الأكواد في ملفات ELF القابلة للتنفيذ بعد البناء

drow هي أداة سطر أوامر تُستخدم لحقن الكود وتعليق نقطة الدخول لملفات ELF القابلة للتنفيذ (بعد البناء). تأخذ ملفات ELF القابلة للتنفيذ غير المعدلة كمدخل وتصدر ملف ELF معدل يحتوي على حمولة مضمنة يوفرها المستخدم وتُنفذ في وقت التشغيل.
يتخذ Drow الخطوات التالية لإنشاء ملف ELF المُصحح الجديد:
sh_size لرأس القسم الأخير (في المقطع) و p_memsz/p_filesz لرأس البرنامج بحجم الحمولة التي يوفرها المستخدمsh_offset لرؤوس الأقسام و p_offset لرؤوس البرامج (تحريك الأقسام والمقاطع لأسفل لإفساح مجال للحمولة و "مقطع التمهيد الصغير")e_shoff, e_phoff, إلخ)e_entry في رأس ELF (إزاحة نقطة دخول ELF) للإشارة إلى الكود المحقونبالإضافة إلى حقن الحمولة التي يوفرها المستخدم، يقوم drow بحقن مقطع كود صغير يتم إضافته في بداية الحمولة. هذا المقطع مصمم للاستدعاء إلى الحمولة. إذا كانت الحمولة مكتوبة للعودة إلى المستدعي، بعد عودة الحمولة، يقوم المقطع بعد ذلك باستدعاء ذيل (tailcall) إلى _start، لاستعادة التنفيذ حتى يعمل البرنامج كما هو مقصود.
قم بتثبيت gcc و scons. ثم قم بتشغيل scons من جذر الدليل.
بالإضافة إلى بناء drow، يقوم هذا المشروع أيضًا ببناء حمولة لينكس x86-64 باسم rappers_delight.bin والتي تقوم ببساطة بالطباعة إلى stdout. يمكن استخدام هذا للاختبار. حاليًا، يعمل drow فقط مع ملفات ELF64 التي تستهدف x86-64.
هناك الكثير من الأعمال مفتوحة المصدر التي تم إنجازها في هذا المجال. أشجعك على الاطلاع أيضًا على المشاريع والمنشورات المرتبطة التالية: