تقييم الموضوع :
  • 1 أصوات - بمعدل 5
  • 1
  • 2
  • 3
  • 4
  • 5
من أين ابداً بتعلم الهندسة العكسية | Reverse Engineering
#1
السلام عليكم
يوجد العديد من الأسئلة حول كيفية البدأ بهذا المجال، كيف ابدأ، كيف اصبح محلل برامج ضارة، كيف يمكنني كسر البرامج الحديثة، كيف يمكنني تحليل الحمايات والتخلص منها، كيف يمكني تحليل برنامج وايجاد خلل به.....ألخ
في هذا الموضوع سأضع بعض التلميحات والروابط المفيدة للمبتدئين و المواد التي يوصى بها لكل مبتدأ

موضوع الهندسة العكسية (RE) واسع جدًا. يمكنك الهندسة العكسية لكل انواع البرامج و لجميع أنواع المنصات (وندوز، لينكس، ماك، اندرويد، iOS وغيرها المئات من الانظمة الاخرى التي ربما لم تسمع بها من قبل). يمكنك حتى الهندسية العكسية للهاردوير فالهندسة العكسية لا تقتصر على السوفتوير فقط. ولكن في هذا الموضوع سأركز على المنصات فرع السوفتوير وهو الفرع الذي على الاغلب ستكون مهتم به وستبدأ به.

لماذا أتعلم الهندسة العكسية؟
تتيح لك الهندسة العكسية الاطلاع على ما وراء الكواليس ومعرفة كيف تحدث الاشياء خلف الستار، تشبع رغبتك وشغفك بمعرفة خبايا واسرار الاشياء وبعد فهمها يمكنك التلاعب بها للقيام بما لم تصمم للقيام به.

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

لها العديد من الاستخدامات:
  • الهندسة العكسية للبرامج الضارة - malware analysis
  • التحقيق الجنائي - digital forensics and Incident response
  • ايجاد خلل امني وتطوير الثغرات - vulnerability research and exploit development
  • اكتشاف سرقة الكود - plagiarism detection (بعض الشركات ترفع قضايا على شركات اخرى تتهمها بسرقة كودها البرمجي)
  • المحاكاة - emulation (الهندسة العكسية للنظام وكتابة محاكي له يعتبر من انشط افرع الهندسة العكسية في مجتمعات الالعاب فكثير من الالعاب التي تنشر على منصات اخرى يتم هندستها عكسيا لتلعب على منصات اخرى)
  • تحوير الالعاب القديمة لتعلب على الاجهزة الحديثة
  • تحوير البرامج القديمة لكي تعمل على الانظمة الحديثة
  • ارجاع الكود البرمجي للبرامج - source code recovery
  • اكتشاف اسرار الانظمة وكتابة توثيق لها ( خاصة اكتشاف بعض الـ API والتي تكون غير موثقة او اكتشاف quirks في النظام او كتابة توثيق لجزء معين من النظام)
  • تحليل البرامج التجارية وكسر حماياتها
  • تحليل الحمايات ومعرفة طريقة عملها وتجاوزها
  • الهندسة العكسية للأغراض العسكرية - تستخدم الهندسة العكسية في تحليل انظمة الدول المعادية واكتشاف اسرارها ( كحالة تحليل نظام طائرة بدون طيار بعد اسقاطها او انظمة مضادات الصواريخ او الطائرات وغيرها من الانظمة العسكرية الكثيرة)
  • الهندسة العكسية لاسرار الشركات الاخرى ( ابرز مثال هو شركة AMD وكيف قامت بعمل هندسة عكسية لمعالج INTEL وكذلك بعض الشركات الصينية التي تقوم بالهندسة العكسية لهاردوير بعض الاجهزة وانتاج نسخ مشابهه للاصلية)
  • تحوير الالعاب واضافة اشياء جديدة لها
  • والعديد من الاستخدامات الاخرى
كم من الوقت يلزمني؟
الامر يعتمد عليك فلا يوجد وقت محدد فعلاً، ولكن يمكن تقصير المدة عن طريق المثابرة والصبر وتخصيص وقت محدد من كل يوم لتعلم هذا العلم، يمكن تشبيه الامر بتعلم لغة جديدة (كالصينية مثلاً) تحتاج الى تعلم أساسيات اللغة اولاً ومن ثم التطبيق ثم التطبيق ثم التطبيق الى ان تصل لمرحة تشعر انك واثق من لغتك الصينية ويمكنك التكلم والكتابة بها من دون صعوبة، نفس الامر ينطبق على الهندسة العكسية، تعلم الاساسيات وبعدها اقرأ أي شيء يأتي أمامك وطبق وطبق وطبق وحاول البدأ مع برامج مخصصة للتعلم (crackme) وبعدها يمكنك التوجه للبرامج الحديثة بعدما تشعر انك واثق من قدرتك على تحليل البرامج والحمايات الحديثة.

ما هي لغات البرمجة التي يجب ان أتعلمها؟
معرفتك بالبرمجة امر مهم قبل بدأ مشوارك بالهندسة العكسية ولغة البرمجة تعتمد على هدفك او المنصة التي تنوي العمل عليها.
هل ترغب بالعمل على منصة ويندوز|لينكس|ماك ام الهواتف الذكية ام الانظمة المضمنه والمتحكمات الدقيقة؟
اذا كان الجواب ويندوز|لينكس|ماك فهل هدفك برامج الـnative اما لا.
  • اذا كنت تتعامل مع برامج الـnative فلغة سي او سي++ (او دلفي اذا كنت تتعامل مع دلفي) مع اسمبلي معالجات انتل (X32 - X64)
  • اذا لم تكن تتعامل مع برامج الـnative فهدفك هو اللغة التي كتب بها هذا البرنامج الهدف فاذا كان مكتوب بـ سي شارب فهدفك هو سي شارب او جافا فهدفك هو تعلم جافا...الخ
هدفك الهواتف الذكية؟
تعلم لغة اسمبلي ARM فمعالجات ARM هي المستخدمة هنا وليست معالجات انتل
هدفك:
  • iOS
  • Android
    • هدفك الـ kernel والـdrivers تعلم لغة سي + اسمبلي ARM
    • هدفك البرامج العادية تعلم جافا + اسمبلي ARM
الانظمة المضمنه والمتحكمات الدقيقة؟
تعلم سي بما انها اللغة المسيطرة في هذا المجال + لغة اسمبلي المعالج الذي يستخدمة جهازك ( PowerPC ، ARM ، MIPS ، AVR ، ... الخ)

تعلم لغة سكربت امر ضروري لانها تساعدك ببرمجة سكربت بسرعة يقوم بالمهام التي تريدها من دون تعقيدات لغات مثل سي/سي++/دلفي او جافا والتي تحتاج وقت لكي تحول فكرتك لكود، انصح بلغة بايثون فهي سهلة ومستخدمة بكثرة في مجال الحماية بشكل عام والهندسة العكسية بشكل خاص وتوجد مئات المكتبات التي تخص الهندسة العكسية اما مكتوب ببايثون او توفر لك API ببايثون.
ما هي الطريقة المثلى لتعلم الهندسة العكسية؟
لا يوجد طريقة او وصفة سحرية فكل شخص له طريقتة في التعلم ولكن الهندسة العكسية تحتاج الى الكثير من التطبيق (والصبر)، لذلك يفضل ان تحاول ان تكتب برامج صغيرة وحاول النظر الى لغة الاسمبلي الناتجة عن برنامجك وافهم كيف تحول منطق برنامجك الى كود اسمبلي، جد تحدي وحاول كسرة ولا تنظر للحل الى بعد ان تنقطع بك السبل من البحث والمحاولات، شاهد شرح وطبق جرب ان تتوقف في منتصف الشرح لتطبق وتحاول الحل بنفسك جرب البحث بجوجل في حال واجهت صعوبة وبعدها اكمل الشرح وانتبه كيف يتم الحل، اكتب الكثير من الملاحظات عندما تتعلم فهي ستفيدك كما ان كتابة ما شاهدت سترسخ المعلومة لديك.
حاول ان تجد التحدي عندما تتعلم، تحدى نفسك واستمتع، لا تحاول ارهاق نفسك وبالتالي الملل سيجد طريقة لك وستترك الامر.
( يمكنك النظر لاسمبلي برنامج اما عن طريق disassembler مثل IDA pro (او حتى منقح اوdebugger مثل ollydbg او x64dbg) او من خلال موقع godbolt.org الذي يحوي compiler لاكثر من نظام ولاكثر من منصة وهو يوفر لك التحويل للغة اسمبلي x32 و x64 و ARM و MIPS و AVR وغيرها العديد، كما يوفر ميزة ربط تعليمات الاسمبلي بما يقابلها من الكود البرمجي)

ما هو الـ compiler وما هو الـ decompiler وما هو الـ disassembler ما هو الـ debugger؟
بطريقة مختصرة:
الاول يحول لك الكود الذي كتبته الى كود اسمبلي ومن ثم الى كود يفهمه الحاسوب وهذا الكود هو لغة الاله
يوجد انواع من الـ compiler ولكن ما يهمنا هو اثنان
الاول هو ما يحول الكود الى لغة الالة مباشرة ( لغة سي وسي++ ودلفي وغيرها من لغات الـ native)
الثاني هو virtual machine يقوم بتحويل كودك الى لغة وسيطلة هي Bytecode ثم بعدها الى لغة الاله ( جافا ابرز مثال عن هذا النوع)
ستتعلم المزيد خلال طريق تعلمك.
اما الثاني فيحاول ان يقوم بعكس العملية ليقوم بتحويل لغة الالة الى كود اي بصنع كود شبة مطابق للكود الذي كتبته.

اما الثالث فهو يحول لك لغة الاله الى كود اسمبلي يفهمة الانسان.

اما الرابع فيسمح لك بالاطلاع على البرنامج في الذاكرة عند تشغيلة والتعديل عليه.

ما هي المصادر التي يمكنني ان اتعلم منها؟

عربية؟
هذا المنتدى بأكمله
+
صفحة المبتدئين | كتاب الفريق الأول | كتاب الفريق الثاني | مجلة الفريق | كتاب لغة التجميع و المعالجات الدقيقة تأليف يحي عبد الله محمد/جامعة السودان المفتوحة

انكليزية؟

كتب: كورسات: تريد ان تطبق وتصقل مهارتك؟
يوجد لدينا قسم خاص بذلك: تمارين وحلول - Crack me
كما توجد مواقع اخرى: (لا تقم بتنفيذ برنامج غريب على نظامك الاساسي قم باستخدام نظام وهمي)
(بعض هذه المواقع تحوي malware وهي خاصة لمن يرغب بتعلم تحليل الـ malware)


هل تحتاج ادوات للبدأ؟
جميع الادوات التي تحتاجها محدثة باستمرار وخالية من الفيروسات تجدها في هذا القسم: البرامج و أدوات الهندسة العكسية - RCE Tools

هل لديك سؤال حول شيء معين يخص الهندسة العكسية؟
هذا القسم يوفر لك ميزة الحصول على اجوبة لأسئلتك ---> الأسئلة والإستفسارات، حلول المشاكل و تبادل الخبرات Expert Exchange Newbie Questions Answers

----------------
اتمنى اني لم انسى شيئاً، اذا لديك اقتراح او شيء لتضيفه قم بوضعة في التعليقات Heart
سبحان الله وبحمده، سبحان الله العظيم
تم الشكر بواسطة: TeRcO , XNirvanaX , mohmaed
#2
تسلم اخي الكريم "Gu-sung18"
على مجهودك الرائع, دليل منسق و منظم
لا تبخل علينا بمزيد من مواضيعك
Blush
بأمثالك نرتقي Smile
تم الشكر بواسطة: Gu-sung18
#3
جزاك الله خيرا
تم الشكر بواسطة: Gu-sung18
#4
وعليكم السلام

ولكن المبتدئ دائما مستعجل في التعلم وهذا ما يشتت أفكاره ويصبح ينتقل من موضوع إلى موضوع حتى يضيع 
فالقليل من يستطيع التعلم بمفرده

الحمد لله المنتدى به الكثير من الخبراء وهم يبذلون جهدا مشكورين عليه،وما أريد قوله وهو يجب أن يكون هناك معلم 
وأقترح أن يكون في إكتشاف الأخطاء في البرامج أو الثغرات فالكثير مهتم بهذا المجال وخاصه اليوم ولكل شخص مقصده هناك من يسعى وراء المال بإكتشاف الثغرات وهناك من يريد تعلم الهكر ووو

أتمنى من يملكون معلومات في مجال ما أن تكون الدروس تطبيقية أي عملية وليست نظرية فلا يهم الوقت المهم الإستمرار في الدروس وعدم الشعور بالفشل لقلة المتتبعين فكل يوم أو شهر تجد من هو مهتم
فأتمنى من كل من يملك معلومات أن لا يتركها رهينه عنده وليضعها فلا أحد سيخلد في هذه الدنيا ولا يدري ماتى يغادر عن هذا المنتدى
فأرجو أن نجد دروس عملية وتطبيقية موجوده داخل هذا المنتدى
تم الشكر بواسطة: Gu-sung18
#5
إقتباس :ولكن المبتدئ دائما مستعجل في التعلم وهذا ما يشتت أفكاره ويصبح ينتقل من موضوع إلى موضوع حتى يضيع 
فالقليل من يستطيع التعلم بمفرده

هذه مشكلة كلنا نعاني منها ولكن يجب على الشخص الجلوس وقراءة المادة والتعلم فلا توجد طريقة سحرية ولا يوجد معلم يأخذ بيد الطالب ويعلمه خطوة بخطوة، افضل وسيلة هي محاولة ايجاد المتعة عند التعلم كالهندسة العكسية للالعاب مثلاً.
 
إقتباس :أتمنى من يملكون معلومات في مجال ما أن تكون الدروس تطبيقية أي عملية وليست نظرية فلا يهم الوقت المهم الإستمرار في الدروس وعدم الشعور بالفشل لقلة المتتبعين فكل يوم أو شهر تجد من هو مهتم

(ما سأكتبه هو ما يدور في خاطري فحسب ويعبر عن وجهة نظري وهو ليس موجه لشخص  بعينه بل للاعضاء ككل)
بصراحة قلة النشاط قاتله وتجعل الشخص يمل، وفكرة انك تكتب وبعد شهور قد تجد من يرد على موضوعك ليناقش امر محبط، نريد نشاط يا شباب، فكما الطالب يريد ان يتعلم بسرعة ولا يمكنه التعلم وحدة لسبب رئيسي وهو التشتت والملل فمن يكتب ايظا يريد نقاش حامي لكي لا يمل هو الاخر، من يكتب لا يريد كلمات مثل شكرا ومتابع وغيرها بل يريد نقاش لكي يزيد خبرته هو الاخر.
بالنسبة للدروس التطبيقية
الاخ عبد الحميد بدأ بترجمة كورس لتعلم اسمبلي 32 بت ولكنه ترك الامر بسبب قلة النشاط وانعدام النقاش في وقتها، في تلك الفترة انا بدات اترجم كورس لتعلم اسمبلي ARM ونشرت 3 دروس من اصل 7 وبسبب انعدام النشاط ونظري لموضوع الاخ عبدالحميد أصابني الاحباط ولاني قررت عدم ترجمة باقي الدروس قمت بحذف الدروس الـ3 التي نشرتها.
كذلك ترجمت كورس (وهذا اكملت ترجمته ونشرته) يخص الهندسة العكسية لتطبيقات iOS ولا يوجد نقاش فيه

بعض الاعضاء القدامى رجعوا للمنتدى ولكنهم تركوه بسبب قلة النشاط، الامر تكافلي (Symbiosis) فالكاتب يقضي وقتة لكي يكتب وينشر معلوماته ويصرف طاقته الذهنية بالمجان وكل ما يريد هو نقاش جاد كمكافئه على جهدة ووقته.
سبحان الله وبحمده، سبحان الله العظيم
تم الشكر بواسطة: SpeedSofT
#6
السلام عليكم ورحمة الله وبركاته
كلامك صحيح أخي الكريم , ولكن نحن محتاجين لدورة حتى نفهم جيدا هذا العلم 
أنا حملت أكثر من 6 جيجا من الدروس على مختلف اللغات ولكن بحاجة لشرح مفصل
يوم أمس بدأت اقرأ في الكتاب الذي نشرته لغة التجميع و المعالجات الدقيقة أرى بأنه جيد
والله محتاجين للإهتمام
تم الشكر بواسطة:


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم