أساسيات الهندسة العكسية واستغلال الثنائيات
مقدمة إلى الهندسة العكسية واستغلال الملفات الثنائية.
أساسيات الهندسة العكسية واستغلال الثنائيات درس مجاني في Cyber Security Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Cyber Security Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Cyber Security Academy 4 دروس في المجموع.
لمحة عن الهندسة العكسية وPwn
تتعامل فئتان متقاربتان في CTF مع البرامج المترجمة:
- الهندسة العكسية (rev) — تحلل ملفًا ثنائيًا لفهم ما يفعله، وغالبًا لاستعادة فحص كلمة مرور أو منطق مخفي يطبع الـflag.
- Pwn (استغلال الملفات الثنائية) — تجد خطأً في سلامة الذاكرة داخل ملف ثنائي قيد التشغيل، وتستغله لاختطاف التنفيذ، وغالبًا لتشغيل shell على خدمة بعيدة تحتوي على الـflag.
تركز Rev على الفهم، بينما تركز pwn على الكسر. وتتطلب كلتاهما إلمامًا بالمفاهيم منخفضة المستوى.
نظرة أولى على ملف ثنائي
لا تفتح ملفًا ثنائيًا عميانًا في أداة تفكيك. افحصه مبدئيًا باستخدام أدوات سريعة لسطر الأوامر لمعرفة نوعه وبنيته وأي سلاسل نصية واضحة فيه.
# Identify file type and architecture
file ./challenge
# Pull human-readable strings (flags are sometimes left in plaintext)
strings ./challenge
# Check which security mitigations are enabled
checksec --file=./challengeالتحليل الساكن مقابل الديناميكي
تحلل الملفات الثنائية بطريقتين متكاملتين:
- التحليل الساكن — اقرأ الشيفرة دون تشغيلها، باستخدام أداة تفكيك أو أداة فك ترجمة مثل Ghidra أو عرض التفكيك. سترى مسار التحكم كاملًا، لكن عليك استنتاج قيم وقت التشغيل.
- التحليل الديناميكي — شغّل البرنامج تحت مصحح أخطاء مثل GDB، وراقب القيم الفعلية في السجلات والذاكرة. سترى ما يحدث بالضبط، لكن فقط على المسار الذي تنفذه.
يتنقل اللاعبون المتمرسون بين الطريقتين: يقرأون ساكنًا لتكوين نظرية، ثم يؤكدونها ديناميكيًا بالتنفيذ خطوةً خطوة.
قراءة التفكيك
لإجراء الهندسة العكسية، تقرأ لغة التجميع. لا تحتاج إلى كتابتها بطلاقة، لكن يجب أن تتعرف على الأنماط التالية:
- cmp / test متبوعتان بقفزة (
je،jne) تمثلان مقارنة وتفرعًا — وغالبًا ما تكون هذه هي عملية التحقق من كلمة المرور. - call تستدعي دالة؛ وتكون الوسائط قد وُضعت في السجلات أو على المكدس قبل ذلك مباشرة.
- mov تنقل البيانات بين السجلات والذاكرة والثوابت.
عندما تجد cmp تقارن بإدخالك، يتبعها تفرع إلى رسالة نجاح، فقد وجدت عملية التحقق. استعد الآن القيمة المتوقعة أو تجاوزها.
أدوات فك الترجمة تسرّع عملك
تحوّل أدوات فك الترجمة الحديثة لغة التجميع إلى C تقريبي، وهو أسرع بكثير في القراءة من التعليمات الخام. قد يبدو فحص كلمة المرور بعد فك ترجمته كالتالي:
// Decompiler output (approximate)
if (strcmp(user_input, "s3cr3t_p4ss") == 0) {
puts("Correct! Here is your flag:");
print_flag();
} else {
puts("Wrong.");
}كيف يبدأ إفساد الذاكرة
تستغل تحديات Pwn برامج تقرأ الإدخال في مخزن مؤقت ثابت الحجم دون التحقق من طوله. يخزن المكدس المتغيرات المحلية وعنوان الإرجاع المحفوظ الذي يخبر المعالج إلى أين ينتقل عند انتهاء الدالة.
إذا تجاوز الإدخال سعة مخزن محلي مؤقت، فيمكنه الكتابة فوق عنوان الإرجاع المحفوظ. ومن يتحكم في عنوان الإرجاع يتحكم في وجهة التنفيذ التالية.
// Vulnerable: no bound on how much is read into buf
void vuln() {
char buf[64];
gets(buf); // reads until newline, ignores buf size
}تجاوز سعة مخزن المكدس المؤقت التقليدي
أبسط أساليب pwn هو الكتابة فوق عنوان الإرجاع للقفز إلى دالة لم ينوِ البرنامج استدعاءها — وهي win() مخفية تطبع الـflag.
الخطوات:
- اعثر على الإزاحة الدقيقة من بداية المخزن المؤقت إلى عنوان الإرجاع؛ وتوفر أداة نمط دوري هذه القيمة بسرعة.
- اعثر على عنوان الدالة المستهدفة.
- أرسل حشوًا حتى تصل إلى الإزاحة، ثم اكتب فوق عنوان الإرجاع بعنوان الهدف.
# Build the input with a Python exploit library
from pwn import *
p = process('./challenge')
offset = 72 # bytes to reach the return address
win_addr = 0x401176 # address of the win() function
p.sendline(b'A' * offset + p64(win_addr))
p.interactive()وسائل الحماية الحديثة
تفعّل الملفات الثنائية الحقيقية وسائل دفاع تمنع عمليات تجاوز السعة الساذجة. يجب أن تتعرف عليها باستخدام checksec:
- حواجز المكدس — قيمة سرية توضع قبل عنوان الإرجاع؛ فإذا تغيرت، يُنهي البرنامج عمله. يجب تسريبها أولًا.
- NX (No-eXecute) — يكون المكدس غير قابل للتنفيذ، لذلك لا يمكنك تشغيل shellcode موضوع فيه.
- ASLR / PIE — تُعشّى العناوين في كل تشغيل، لذلك تحتاج إلى تسريب عنوان قبل أن تتمكن من التصويب.
- RELRO — يحمي جدول الإزاحة العام من الكتابة فوقه.
تدفعك كل وسيلة حماية إلى استخدام تقنيات أكثر تقدمًا.
البرمجة الموجّهة بالإرجاع (ROP)
عندما يمنعك NX من تشغيل شيفرتك الخاصة، تعيد البرمجة الموجّهة بالإرجاع استخدام الشيفرة الموجودة أصلًا في الملف الثنائي.
تصل بين تسلسلات قصيرة من التعليمات تُسمّى gadgets، وينتهي كل منها بـret، لتنفيذ الإجراءات خطوةً خطوة — مثل تحميل سجل واستدعاء دالة مكتبة لتشغيل shell. تبني السلسلة على المكدس، بحيث تقفز كل ret إلى gadget التالي.
تمثل ROP جسرًا من عمليات تجاوز السعة المبتدئة إلى الاستغلال الواقعي، حيث نادرًا ما تكون شيفرة المهاجم قابلة للتنفيذ مباشرة.
ثغرات سلسلة التنسيق
من أساسيات pwn الأخرى ثغرة سلسلة التنسيق، حيث تُمرّر مدخلات المستخدم مباشرةً بوصفها وسيطة التنسيق إلى دالة طباعة.
// Vulnerable: user controls the format string
printf(user_input); // dangerous
// Safe: user input is data, not format
printf("%s", user_input); // correctلماذا يتعلم المدافعون هذا
تتعلم استغلال أخطاء الذاكرة بدقة حتى تتمكن من منعها. وتشمل الدروس الدفاعية العملية ما يلي:
- لا تستخدم أبدًا دوال إدخال غير محدودة الطول مثل
getsأوstrcpy؛ استخدم بدائل تتحقق من الطول. - أبقِ وسائل الحماية مفعّلة: حواجز المكدس، وNX، وASLR/PIE الكامل، وRELRO الكامل افتراضيًا.
- فضّل اللغات الآمنة للذاكرة عندما يسمح نموذج التهديد بذلك.
- تعامل مع أي قيمة يتحكم بها المستخدم تصل إلى سلسلة تنسيق أو عملية نسخ إلى مخزن مؤقت بوصفها اكتشافًا خطيرًا أثناء مراجعة الشيفرة.
اختبار سريع
اختبر مدى فهمك لأساسيات الهندسة العكسية وpwn.
مراجعة
لديك الآن خريطة للهندسة العكسية وpwn:
- أجرِ فرزًا مبدئيًا لكل ملف ثنائي باستخدام
fileوstringsوchecksecقبل التحليل المتعمق. - اجمع بين التحليل الساكن (أداة التفكيك/أداة فك الترجمة) والتحليل الديناميكي (مصحح الأخطاء) لفهم المنطق.
- تبدأ Pwn بتجاوز سعة مخزن المكدس المؤقت والكتابة فوق عنوان الإرجاع؛ وترفع وسائل الحماية (حواجز المكدس وNX وASLR/PIE وRELRO) مستوى التحدي.
- تتغلب ROP على NX بإعادة استخدام gadgets الموجودة؛ وتنشأ ثغرات سلسلة التنسيق من وسائط تنسيق غير موثوقة.
- تتحول كل تقنية أيضًا إلى درس دفاعي يساعدك على كتابة شيفرة أكثر أمانًا ومراجعتها.
بعد ذلك، ستبني مجموعة أدوات وتتعلم كتابة تقارير حلولك.
الأسئلة الشائعة
هل درس «أساسيات الهندسة العكسية واستغلال الثنائيات» مجاني؟
نعم — نص درس «أساسيات الهندسة العكسية واستغلال الثنائيات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Cyber Security Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Cyber Security Academy 4 دروس في المجموع.
ماذا ستتعلم في «أساسيات الهندسة العكسية واستغلال الثنائيات»؟
مقدمة إلى الهندسة العكسية واستغلال الملفات الثنائية. تتمرن على Cyber Security Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Cyber Security Academy؟
لا تُشترط خبرة سابقة. Cyber Security Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «أساسيات الهندسة العكسية واستغلال الثنائيات»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Cyber Security Academy هذا؟
نعم. كل درس في Cyber Security Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- فئات مسابقات CTF وعقليتها
- تحديات الويب والتشفير
- أساسيات الهندسة العكسية واستغلال الثنائيات
- الأدوات وكتابة الحلول