0x1. Introduction to Reverse Engineering
مقدمة
منذ الطفولة، يمتلك الإنسان فضولاً فطرياً لمعرفة “كيف تعمل الأشياء؟”. هذا الفضول هو ما يدفع الطفل لكسر لعبته المفضلة ليرى المحرك الصغير بداخلها. في عالم التكنولوجيا المتقدم، يتحول هذا الفضول إلى تخصص هندسي دقيق وحاسم يُعرف باسم الهندسة العكسية (Reverse Engineering).
قد لا يكون أغلب مستخدمي الحاسوب قد سمعوا بالهندسة العكسية من قبل، ربما لأنها غير شائعة كثيراً بعكس ما هو الحال مع عالم الاختراق “الهاكينج”، أو ربما لأنهم يعرفونها بمصطلحها الآخر ألا وهو “الكراكينج” (Cracking).
ويختلف الكثيرون في تعريف الهندسة العكسية، لكن باختصار يمكننا القول:
الهندسة العكسية: هي عملية تحليل شيء ما لفهم آلية عمله.
وبالتالي تُقسم الهندسة العكسية إلى قسمين رئيسيين:
- هندسة عكسية للبرمجيات: Reverse Code Engineering (RCE)
- هندسة عكسية للعتاد (الهاردوير): Hardware Reverse Engineering (HRE)
ونحن في هذه الورشة بصدد التحدث والتعمق في الـ RCE.
ما الحاجة إلى الهندسة العكسية أصلاً؟
يختلف هذا باختلاف المهندس العكسي وأهدافه:
1. منظور المبرمج (المطور)
إذا كنت أنت كاتب البرنامج، فغالباً ستود تنقيح برنامجك (Debugging) بغرض اكتشاف الأخطاء أو مسبباتها. وبعد اكتشاف الأخطاء وتصحيحها، قد ترغب في معرفة مدى قوة حماية البرنامج، أي مدى قابليته للكسر على أيدي الكراكرز (Crackers). فتقوم أنت في هذه الحالة، بهندسة برنامجك عكسياً بغرض حمايته من الكسر.
2. منظور الكراكر (Cracker)
تختلف دوافع الكراكرز إلى تعلم الهندسة العكسية حسب الأشخاص أو الفرق:
- التحدي: اتخاذها كأداة لتحدي الحمايات وطرق التمويه.
- المعرفة للجميع: مشاركة الآخرين بما توصلوا إليه من تقنيات.
- كسر الاحتكار: إعانة المستخدمين للحصول على برامج باهظة الثمن.
- التخريب: اتخاذها كأداة للتخريب على خلفية مادية (ككسر برنامج شركة منافسة) أو أسباب أخرى.
🚁 لتبسيط المفهوم: سيناريو الطائرة المسيرة
لا يوجد مثال أوضح من عالم الأسلحة لتبسيط هذا المفهوم المعقد.
تخيل هذا السيناريو: سقطت طائرة استطلاع بدون طيار (Drone) متطورة جداً في أراضيك، وهي سليمة نسبياً. هذه الطائرة هي عبارة عن “صندوق أسود” (Blackbox) بالنسبة لك؛ أنت ترى النتيجة النهائية (طائرة تطير، تتجسس، وتتخفى)، لكنك لا تملك الخرائط الهندسية، أو كود البرمجيات الذي يدير محركاتها، أو نظام اتصالاتها المشفر.
شكل (1): التعامل مع التكنولوجيا المجهولة كصندوق أسود.
في هذا السيناريو، الهدف من الهندسة العكسية ليس تدمير الطائرة، بل فهمها حتى تتمكن من:
- بناء أنظمة دفاعية مضادة لها.
- استنساخ التكنولوجيا لصالحك.
- إيجاد نقاط ضعف لتعطيلها مستقبلاً.
ما هي الهندسة العكسية بشكل دقيق؟
الهندسة العكسية هي عملية تحليل نظام ما (ميكانيكي، إلكتروني، أو برمجي) لتحديد مكوناته والعلاقات فيما بينها، واستخدام هذا التحليل لإعادة إنشاء تمثيل للنظام يوضح كيفية عمله (مثل المخططات أو الكود المصدر).
في سياق البرمجيات (وهي الأكثر شيوعاً اليوم)، أنت تبدأ بملف تنفيذي جاهز للتشغيل (.exe أو ELF) ولا تملك الكود المصدر (Source Code) الذي كتبه المبرمجون (مثل C/C++). هدفك هو: تحويل هذا الملف الثنائي المعقد (Machine Code) إلى لغة يفهمها البشر لفهم آلية عمل الكود بشكل مفصل (Functionality).
⚙️ مراحل الهندسة العكسية
سواء كان الهدف سلاحاً ميكانيكياً كالبندقية، أو إلكترونياً كالبرمجيات الخبيثة، تمر العملية بأربع مراحل أساسية:
1. الاستطلاع والملاحظة (Reconnaissance)
قبل لمس أي شيء، يتم رصد سلوك الهدف:
- في الأسلحة: كيف يتم تذخيرها؟ ما هو معدل إطلاق النار؟ ما نوع الذخيرة؟
- في البرمجيات: يتم تشغيل البرنامج ومراقبة سلوكه (اتصالاته بالشبكة، الملفات التي ينشئها، وكيفية استهلاكه للذاكرة).
2. التفكيك (Disassembly)
- في الأسلحة: فك البندقية قطعة قطعة، مسماراً بمسمار، لفهم الآلية الميكانيكية للزناد وبيت النار.
- في البرمجيات: استخدام أدوات تسمى المُجمّعات (Disassemblers) لتحويل كود الآلة (0 و 1) إلى لغة التجميع (Assembly Language)، وهي لغة منخفضة المستوى تصف بدقة العمليات التي ينفذها المعالج.
3. التحليل والفهم (Analysis)
هنا يبدأ العمل الذهني الشاق، حيث يتم ربط القطع المفككة ببعضها لفهم المنطق العام:
في الأسلحة: فهم أن الشكل المعين لقطعة التلقيم هو ما يسمح بالرماية الآلية.
شكل (2): تحليل الميكانيكية للعتاد والأجزاء الصلبة.في البرمجيات: محاولة تتبع مسار البيانات (Control Flow) داخل الأكواد للوصول إلى “الخوارزمية” الأساسية، مثل العثور على خوارزمية التشفير.
شكل (3): تحليل تدفق الكود والمنطق البرمجي.
4. إعادة البناء (Decompilation)
الوصول إلى أعلى مستوى من الفهم، حيث يتم تحويل لغة التجميع إلى لغة برمجة عالية المستوى (مثل C) باستخدام المُفككات (Decompilers)، مما يسمح بفهم المنطق البرمجي بشكل أقرب للغة البشر.
خاتمة
الهندسة العكسية ليست مجرد معرفة بكيفية استخدام أدوات مثل الـ Disassemblers والـ Debuggers، بل هي عقلية (Mindset). إنها تتطلب صبراً هائلاً، وقدرة على حل الألغاز المعقدة، ومعرفة عميقة جداً بكيفية عمل أجهزة الكمبيوتر، وأنظمة التشغيل، والمعالجات.
من خلال فهم كيفية “تفكيك” التكنولوجيا، يكتسب المهندس العكسي القدرة على بناء تكنولوجيا أفضل وأكثر أماناً، تماماً مثلما يتعلم صانع الدروع دراسة “القذائف”.