مغامرة مثيرة: إنشاء برنامج C ذاتي التعديل

2025-05-25

تشرح هذه المقالة كيفية إنشاء برنامج C قادر على تعديل كود نفسه أثناء التشغيل. يشرح الكاتب أولاً كيفية تخزين كود البرنامج في الذاكرة وكيفية استخدام دالة `mprotect()` لتغيير أذونات مقطع الكود لجعله قابلاً للكتابة. ثم، من خلال تعديل القيمة المباشرة لتعليمة `addl`، يوضح الكاتب كيفية تغيير مخرجات البرنامج. وأخيراً، يذهب الكاتب إلى أبعد من ذلك، باستخدام `memcpy()` لنسخ كود shell إلى مقطع الكود الخاص بالبرنامج، مما يؤدي إلى تنفيذ أمر shell بنجاح أثناء التشغيل. العملية برمتها مليئة بالتحديات التقنية، وتتطلب فهماً جيداً لغة التجميع x86_64.