0Pricing
Ethical Hacking Academy · درس

الذاكرة والمكدس

كيفية عمل التجاوزات

الذاكرة والمكدس درس مجاني في Ethical Hacking Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Ethical Hacking Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Ethical Hacking Academy 4 دروس في المجموع.

تخطيط ذاكرة العملية

عند تشغيل برنامج، يمنحه نظام التشغيل تخطيطًا للذاكرة يضم مناطق مميزة: text (التعليمات البرمجية)، وdata/BSS (المتغيرات العامة)، وheap (التخصيص الديناميكي)، وstack.

غالبًا ما تستغل فيضانات المخزن المؤقت المكدس، لذا فإن فهمه أمر أساسي.

ما هو المكدس؟

إن stack منطقة من الذاكرة تُستخدم لاستدعاءات الدوال. وتخزّن المتغيرات المحلية ومعاملات الدوال وعناوين العودة.

ينمو المكدس نحو الأسفل في x86: إذ يؤدي دفع البيانات إلى تحريك مؤشر المكدس نحو عناوين أقل. ويهم هذا الاتجاه عند حدوث فيضان.

إطارات المكدس

ينشئ كل استدعاء لدالة stack frame. ويحتوي الإطار عادةً على المتغيرات المحلية وsaved base pointer (EBP) وreturn address (EIP المحفوظ).

يخبر عنوان العودة وحدة المعالجة المركزية بالمكان الذي تتابع منه التنفيذ بعد انتهاء الدالة. والتحكم فيه هو جوهر استغلال فيضان المكدس.

السجلات الأساسية

في x86 ذي 32 بت، السجلات المهمة هي:

  • ESP: مؤشر المكدس، أي قمته.
  • EBP: المؤشر الأساسي، ومرساة الإطار الحالي.
  • EIP: مؤشر التعليمات، أي عنوان التعليمة التالية.

إذا تحكمت في EIP، فأنت تتحكم في مسار التنفيذ.

ما هو المخزن المؤقت؟

إن buffer كتلة ثابتة الحجم من الذاكرة، مثل مصفوفة محارف محلية. ويتوقع البرنامج أن تلائم البيانات حجمها.

إذا نسخ البرنامج بيانات تتجاوز سعة المخزن المؤقت من دون التحقق من الطول، فإن البيانات الزائدة تتسرب إلى الذاكرة المجاورة.

char buffer[64];
strcpy(buffer, user_input); // no bounds check

تجاوز سعة الذاكرة

يحدث تجاوز سعة المخزن المؤقت عندما يتجاوز الإدخال حجم المخزن المؤقت ويكتب فوق البيانات المجاورة في المكدس.

وبما أن EBP المحفوظ وعنوان العودة يقعان مباشرة بعد المخازن المؤقتة المحلية، فقد يؤدي إدخال كبير بما يكفي إلى الكتابة فوق عنوان العودة واختطاف مسار التحكم.

الدوال الخطرة

تنشأ حالات التجاوز عادةً من دوال C غير الآمنة التي لا تتحقق من الطول:

  • strcpy وstrcat وsprintf وgets.

تقبل البدائل الأكثر أمانًا مثل strncpy أو snprintf حدًا للحجم، لكن الشيفرة القديمة مليئة بالدوال الخطرة.

gets(buffer); // never use: no length limit at all

ما الذي يتيحه لك الكتابة فوق EIP

عندما تعود الدالة المعرضة للخطر، تزيل وحدة المعالجة المركزية عنوان العودة، الذي أصبح الآن تحت تحكم المهاجم، إلى EIP، ثم تقفز إليه.

إذا جعلت EIP يشير إلى شيفرة الآلة التي حقنتها بنفسك، أي shellcode، فستنفذها وحدة المعالجة المركزية بامتيازات البرنامج.

عنونة الترتيب little-endian

تستخدم x86 ترتيب little-endian؛ إذ تُخزَّن القيم متعددة البايتات بدءًا من البايت الأقل أهمية. وللكتابة فوق عنوان العودة بالقيمة 0x080414C3، تكتب البايتات بترتيب عكسي.

يُعد الخطأ في ترتيب البايتات من الأخطاء الشائعة لدى المبتدئين، ويؤدي إلى فشل عمليات الاستغلال دون ظهور سبب واضح.

address 0x080414C3 -> bytes \xc3\x14\x04\x08

وسائل الحماية الحديثة

تضيف الأنظمة الحديثة وسائل حماية تجعل الاستغلال أكثر تعقيدًا:

  • DEP/NX: تضع علامة على المكدس باعتباره غير قابل للتنفيذ.
  • ASLR: تعشوئ عناوين الذاكرة.
  • حواجز المكدس: تكتشف عمليات الكتابة فوق البيانات قبل العودة.

تركز هذه الدورة على الحالة التقليدية، مع تعطيل وسائل الحماية، لتعليم الأساسيات.

لماذا لا يزال هذا مهمًا

رغم أن وسائل الحماية الحديثة تجعل حالات تجاوز سعة المكدس التقليدية أصعب، تظل الأساسيات ضرورية. فكثيرًا ما تفتقر الأنظمة المضمنة وأجهزة IoT والبرمجيات القديمة إلى هذه الحمايات تمامًا.

كما أن إتقان الحالة الأساسية هو prerequisite لتقنيات متقدمة مثل ROP التي تتجاوز وسائل التخفيف الحديثة.

تحقق سريع

تذكّر القيمة التي يريد المهاجم التحكم فيها في النهاية.

مراجعة

أصبحت الآن تفهم الأسس التالية:

  • يخزن المكدس المتغيرات المحلية وEBP المحفوظ وعنوان العودة، وينمو إلى أسفل.
  • تُعد ESP وEBP وEIP سجلات x86 الأساسية؛ والتحكم في EIP يعني التحكم في التنفيذ.
  • تسبب الدوال غير الآمنة مثل strcpy وgets حالات تجاوز السعة.
  • تستخدم x86 ترتيب little-endian؛ وتشمل وسائل الحماية الحديثة DEP وASLR وحواجز المكدس.

ستختبر في الخطوة التالية برنامجًا للعثور على إزاحة الانهيار.

الأسئلة الشائعة

هل درس «الذاكرة والمكدس» مجاني؟

نعم — نص درس «الذاكرة والمكدس» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Ethical Hacking Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Ethical Hacking Academy 4 دروس في المجموع.

ماذا ستتعلم في «الذاكرة والمكدس»؟

كيفية عمل التجاوزات تتمرن على Ethical Hacking Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Ethical Hacking Academy؟

لا تُشترط خبرة سابقة. Ethical Hacking Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «الذاكرة والمكدس»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Ethical Hacking Academy هذا؟

نعم. كل درس في Ethical Hacking Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. الذاكرة والمكدس
  2. الاختبار العشوائي بحثًا عن الأعطال
  3. التحكم في EIP
  4. Shellcode والاستغلال
← العودة إلى Ethical Hacking Academy