مقدمة في الهندسة العكسية: أدوات وتقنيات بسيطة

x32x01
  • بواسطة x32x01 ||
الهندسة العكسية (Reverse Engineering) هي عملية تحليل برنامج أو ملف أو جهاز علشان نفهم تركيبته الداخلية، إزاي بيشتغل، وإزاي نكشف عن ميزات مخفية أو ثغرات. الهدف ممكن يكون تعليمي، لتحسين التوافق (compatibility)، أو لاكتشاف ثغرات أمنيّة. العملية دي بتوائم أصحاب البرمجة، مهندسي الأمن، ومحترفي الاختراق الأخلاقي.

ليه تتعلّم الهندسة العكسية؟ 🔍

  • لفهم برامج قديمة أو بلا مصادر (source code).
  • لاكتشاف وإصلاح ثغرات أمنية قبل ما يستغلها حد.
  • عشان تتعلم تفاصيل عمل الأنظمة والـ CPU والـ API بطريقة عملية.
  • مفيدة جدًا للتعامل مع البرمجيات الخبيثة (malware analysis) أو لتحسين أداء برامجك.

الأدوات الأساسية في الهندسة العكسية 🧰

في أدوات كتير لكن في أدوات أساسية لازم تكون عندك:
  • strings - تظهر النصوص الواضحة داخل ملف ثنائي.
  • objdump - تفكيك (disassemble) الكود الثنائي إلى تعليمات آلية.
  • Ghidra - إطار عمل مجاني من NSA لتحليل الثنائيات وإعادة بناء الكود (decompiler).
  • IDA Pro - أداة قوية (مدفوعة) مع تحليل تفاعلي.
  • radare2 - أداة مفتوحة المصدر للعمل من الطرفية.
  • Capstone / Keystone - مكتبات تفكيك/تجميع (disassembly/assembly) ضمن سكربتات.

خطوات عملية لتحليل ملف ثنائي (من السهل للمبتدئ) 🛠️

  1. اجمع معلومات أساسية عن الملف: نوعه، هل هو ELF على لينوكس ولا PE على ويندوز؟
  2. استخدم strings تشوف إذا فيه نصوص أو رسائل واضحة.
  3. افتح الملف في Ghidra أو IDA لفهم هياكله (functions, imports).
  4. استخدم objdump -d أو Radare2 لتفكيك التعليمات ومعرفة تدفق البرنامج.
  5. لو لقيت دوال مش مفهومة، جرب كتابة سكربت صغير باستخدام Capstone لتحليلها.

مثال بسيط باستخدام الطرفية:
Bash:
# اعرض النصوص داخل الملف
strings sample_binary

# تفكيك كل الدوال إلى تعليمات آلية
objdump -d sample_binary > disasm.txt

مثال عملي: من كود C إلى تفكيك بسيط 🧪

خلّي عندك ملف C بسيط:
C:
// hello.c
#include <stdio.h>

int main() {
    printf("Hello, Reverse Engineering!\n");
    return 0;
}

ترجم الملف: gcc -o hello hello.c
وبعدين فكّك: objdump -d hello | less
هتلاقي تعليمات آلية (assembly) بتوضح ازاي الـ printf تم استدعائها. نفس الفكرة تتوسع لبرامج أكبر - بتترجم التعليمات للغة أقرب للبشر وتبدأ تفهم منين الوظائف الأساسية.

التعامل مع الدوال المستوردة (Imports) 🔗

لما تلاقي دوال واردة (مثل printf, LoadLibrary) فده دليل قوي على الوظائف اللي البرنامج بيعتمد عليها. في Ghidra أو IDA هتلاقي Import Table واضح يساعدك تحدد نقاط الدخول.

كيف تستخدم Ghidra للـ Decompilation (إعادة بناء الكود) 🧠

Ghidra بتديك view للكود بلغة قريبة من C بدل assembly. الخطوات:
  1. افتح المشروع وأضف الملف الثنائي.
  2. شغّل التحليل التلقائي (Auto Analyze).
  3. افتح الدوال اللي تهمك وشوف الـ Decompiled view.
  4. عدل التسميات (Rename) وتابع المتغيرات علشان يفهم الكود أكتر.
Ghidra مفيد لأنه يوفر تحليل متقدم مجاني - جربه لو أنت مبتدئ ومش عايز تدفع على IDA.

نصايح عملية لتسريع التعلم ⚡

  • ابدأ ببرامج صغيرة وبسيطة - فهم الأساسيات أهم من الغوص في برامج معقّدة.
  • استخدم الـ VM (آلة افتراضية) أو sandbox لما تحلل برمجيات مش موثوقة.
  • اقرأ وثائق المعالجات (Intel/AMD ARM) علشان تفهم تعليمات assembly.
  • اتعلم أدوات الـ debugging زي gdb وWinDbg، لأن خطوة تتبع التنفيذ runtime مهمة جدًا.

مثال على استخدام radare2 (سريع وعملي) 🐍

فتح ملف في radare2:
Bash:
r2 -A hello
# داخل r2 تقدر تكتب
afl      # لعرض الدوال
pdf @ main  # لعرض دالة main بالتفصيل
radare2 قوي لكن منحنى تعلّمه فيه تحدي، مع الوقت هتوصل تستخدمه بكفاءة.

نصائح أمان قبل ما تبدأ 🔐

  • دايمًا حلّل الملفات في بيئة معزولة (VM) لما تكون غير موثوق فيها.
  • لا تنشر أدوات استغلال أو استغلالات جاهزة - استخدم المهارات للاختبار الأخلاقي وصلاح الأغراض القانونية.
  • احترم القوانين: في بلدان كتير فيه قوانين تمنع الوصول غير المصرح به للبرمجيات.

خطوات متقدمة: تحليل Malware بشكل بسيط 🦠

تحليل برمجيات خبيثة محتاج مراحل:
  1. Static Analysis - بدون تشغيل الملف: strings, objdump, Ghidra.
  2. Dynamic Analysis - شغّل الملف في sandbox واستخدم أدوات مراقبة الشبكة والملفات.
  3. Behavior Analysis - لاحظ ماذا يفعل البرنامج وقت التشغيل: يفتح ملفات؟ يرسل بيانات؟ يغير إعدادات؟
مثال: استخدم tcpdump أو Wireshark لمراقبة حركة الشبكة أثناء تشغيل العينة داخل بيئة معزولة.

سكربت صغير بلغة Python لاستخدام Capstone لتفكيك بايتات 🔧

هذا مثال بسيط يوضح إزاي تفك بايتات x86:
Python:
from capstone import *

CODE = b"\x55\x48\x8b\x05\xb8\x13\x00\x00"
md = Cs(CS_ARCH_X86, CS_MODE_64)
for i in md.disasm(CODE, 0x1000):
print("0x%x:\t%s\t%s" %(i.address, i.mnemonic, i.op_str))
السكريبت بيطبع تعليمات assembly من بايتات خام - ده مفيد لو عايز تعمل تحليل آلي أو تبني أدوات صغيرة.

أفضل مصادر للتعلّم (سهل التطبيق) 📚

  • دروس فيديو عملية على يوتيوب توضيحية خطوة بخطوة.
  • توثيق أدوات زي Ghidra، Radare2، Capstone.
  • كتب متقدمة بعد ما تتقن الأساسيات، لكن ابدأ دائمًا بالتطبيق العملي.

خاتمة وماذا تفعل بعد كده؟ ✅

لو انت جديد: ابدأ بتجربة strings وobjdump على برامج بسيطة، بعدين اتقدّم لـ Ghidra وradare2. مع الوقت هتتعلم تقرأ الassembly أسرع وهتفهم هيكل البرامج المعقدة. أهم حاجة الممارسة المستمرة وحماية نفسك قانونيًا وفنيًا.
 
المواضيع ذات الصلة
x32x01
الردود
0
المشاهدات
983
x32x01
x32x01
الدخول أو التسجيل السريع
نسيت كلمة مرورك؟
إحصائيات المنتدى
المواضيع
1,828
المشاركات
2,026
أعضاء أكتب كود
473
أخر عضو
mohammedalfateh
عودة
أعلى