




السمعة:
السلام عليكم ورحمة الله وبركاته
اليوم بفضل الله كتبت مقال خفيف يوضحلك ماهي الهندسة العكسية
قبل كل شيء ليش المهندس العكسي عنده جنون العظمة المهندس العكسي الحقيقي طبعا يقوم بدراسة علوم الحاسب 3 سنين ويذهب الى التخصص في الهندسة العكسية الذي في المتوسط ياخذ منه 3 سنوات ايضا لتعلمها
أسس
راح نقدم بعض المواضيع الاساسية عن موضوع الهندسة العكسية
المواضيع :
اليوم بفضل الله كتبت مقال خفيف يوضحلك ماهي الهندسة العكسية
قبل كل شيء ليش المهندس العكسي عنده جنون العظمة المهندس العكسي الحقيقي طبعا يقوم بدراسة علوم الحاسب 3 سنين ويذهب الى التخصص في الهندسة العكسية الذي في المتوسط ياخذ منه 3 سنوات ايضا لتعلمها
أسس
راح نقدم بعض المواضيع الاساسية عن موضوع الهندسة العكسية
المواضيع :
- Introduction
- Reverse Engineering Binary
- Reversing Applications
- For Security
- For Software Development
- For Illegitimate Purpose
- Reversing Cryptographic Algorithms
- Digital Rights Management (DRM)
- Auditing Program Binaries
- Reversing in Software Development
- Low-Level Software
- Assembly Language
- Compilers
- Virtual Machines and Bytecodes
- Operating Systems
- The Reversing Process
- System-Level Reversing
- Code-Level Reversing
- The Tools
- System-Monitoring Tools
- Disassemblers
- Debuggers
- Decompilers
Introduction:
ما هي الهندسة العكسية ؟
هي عملية معرفة مخططات أو تصميم معين من اي شيء الهندسة العكسية فقط لا تنطبق على البرامج الرقمية تنطبق على معدات عسكريه الخ.
تاريخيا هي قديمه جدا على كل شيء يحتاج الى الانسان فهمه من طريقة عمله يقوم بفكفكة البرنامج بأكمله وفهم كل شيء فيه ليعيد بنائه او ايجاد بعض نقاط الضعف فيه.
يعني الهندسة العكسية هي أن تقوم بفهم أي شيء من دون الوصول الى مصدر المخطط الخاص به في هذه الحاله نحن نركز على هندسة عكسية على تطبيقات الثنائية.
تعريفها يكون
محاولة فهم جميع مخططات وبنية وطريقة عمله وعمل وظائفه ونيته عن طريق عدم وجود مصدر الكود الخاص به
يمكن ان تكون برامج مدفوعه لا يريد المبرمج الافصاح عن كيفية برمجته او تم فقدان مصدر الكود عن طريق المكان المتواجد به في هارد ديسك او خدمات سحابيه تم ازالتها او اتلافها
النيه تكون حسب الشخص تصنيع مثل هذا المنتج او نشره او ايجاد نقاط ضعف فيه
الهندسة العكسية النقيه او ال reverse engineering pure
هو علم كامل اصعب بكثير من ان تتعلم الهندسة العكسية لهدف معين مثل تعلم
هي عملية معرفة مخططات أو تصميم معين من اي شيء الهندسة العكسية فقط لا تنطبق على البرامج الرقمية تنطبق على معدات عسكريه الخ.
تاريخيا هي قديمه جدا على كل شيء يحتاج الى الانسان فهمه من طريقة عمله يقوم بفكفكة البرنامج بأكمله وفهم كل شيء فيه ليعيد بنائه او ايجاد بعض نقاط الضعف فيه.
يعني الهندسة العكسية هي أن تقوم بفهم أي شيء من دون الوصول الى مصدر المخطط الخاص به في هذه الحاله نحن نركز على هندسة عكسية على تطبيقات الثنائية.
تعريفها يكون
محاولة فهم جميع مخططات وبنية وطريقة عمله وعمل وظائفه ونيته عن طريق عدم وجود مصدر الكود الخاص به
يمكن ان تكون برامج مدفوعه لا يريد المبرمج الافصاح عن كيفية برمجته او تم فقدان مصدر الكود عن طريق المكان المتواجد به في هارد ديسك او خدمات سحابيه تم ازالتها او اتلافها
النيه تكون حسب الشخص تصنيع مثل هذا المنتج او نشره او ايجاد نقاط ضعف فيه
الهندسة العكسية النقيه او ال reverse engineering pure
هو علم كامل اصعب بكثير من ان تتعلم الهندسة العكسية لهدف معين مثل تعلم
- malware analysis
- exploit development
- anti-cheat engineer
هؤلاء الاشخاص يدرسون طرق الاساسية للهندسة العكسية ليس العلم كامل العلم كامل يتطلب مجهود كبير جدا
مثال يوجد العديد من قرصنة البرامج يمكنك ان تقوم بتنزيلها في المجان
يقوم المهندس العكسي بفهم البرامج حسب هدفه وفهم ما يريده مثال في هاذي الحالة ان كان برنامج مدفوع يبحث عن وظيفة تقوم بعمل هذا الموضوع كيف تقوم بتحقق من البرنامج ان كان مدفوع عن طريق برمجي مثل الكونديشين ايف ستيت مينت او من الحوسبه السحابيه
server-side : هو الذي يقوم بتحقق او بعمل امر معين من خلال السيرفر ولا يتدخل البرنامج من نفسه بعمل شيء
client-side : يتم التحقيق من كل شيء عن طريق البرنامج نفسه يكون ك الكاتب المفتوح ظاهر به كل شيء
الافضل بطبع سيرفر سايد لكن يكلف مبالغ اكبر بكثير
: صور للمواقع
مثال للبرامج :
مثال لموضوع المعدات العسكرية :
يوجد العديد والعديد لاستخدامات الهندسة العكسية منها
نسخ البرنامج
تحليل البرامج
العثور على طريقة عمل البرنامج الخبيثة
مثال يوجد العديد من قرصنة البرامج يمكنك ان تقوم بتنزيلها في المجان
يقوم المهندس العكسي بفهم البرامج حسب هدفه وفهم ما يريده مثال في هاذي الحالة ان كان برنامج مدفوع يبحث عن وظيفة تقوم بعمل هذا الموضوع كيف تقوم بتحقق من البرنامج ان كان مدفوع عن طريق برمجي مثل الكونديشين ايف ستيت مينت او من الحوسبه السحابيه
server-side : هو الذي يقوم بتحقق او بعمل امر معين من خلال السيرفر ولا يتدخل البرنامج من نفسه بعمل شيء
client-side : يتم التحقيق من كل شيء عن طريق البرنامج نفسه يكون ك الكاتب المفتوح ظاهر به كل شيء
الافضل بطبع سيرفر سايد لكن يكلف مبالغ اكبر بكثير
: صور للمواقع
مثال للبرامج :

مثال لموضوع المعدات العسكرية :

يوجد العديد والعديد لاستخدامات الهندسة العكسية منها
نسخ البرنامج
تحليل البرامج
العثور على طريقة عمل البرنامج الخبيثة
Reverse Engineering Binary:
البرامج الثنائيه لا ينكر ان كيفية تصميمها داخليا معقد جدا تحتاج الى كثير من الاشياء مثل الكومبايلرز والكومبايلر لوحده هو مجال كامل من يصنعون الكومبايلرز يطلق عليهم اسم
Compiler Developer
لهذا نفضل للمهندسين العكسين وليس الهاوين بتعلم الكومبايلر
لكن عشان نعمل الهندسة العكسية
بنحتاج CPU & 100+ IQ
فقط فهم السي بي يو وكيفية عمله وكيف يقوم بتشغيل البرنامج هذا كافي لتقوم بتفكيك اول برنامج لك لانه المعالج هو من يقوم بتنفيذ تعليمات البرنامج
تعليمات ؟
Instruction’s CPU
نعم يقوم المعالج بتنفيذ التعليمات التي تم تحويلها من الكومبايلرز لتنفيذها كل طبقة من الكومبايلرز هيا معقده واحد التطبقات تقوم بتحويل البرنامج الى Assembly Code ومن ثمها يتم استخدام الينكر لربطها وتتحول الى 010101 من High-level الى Low-level
المعالج لا يفهم ما لغات عالية المستوى مثل ++C يقوم بتحويلها الى لغة اقل ليتم التعامل معاها بشكل افضل
> ملاحظة : لم ارى مبرمجا مخضرم الا وكان يعلم كيفة كتابة اسمبلي
High-Level : اللغات عالية المستوى هي لغات برمجة مصممة للسماح للبشر بكتابة برامج الكمبيوتر والتفاعل مع نظام الكمبيوتر دون الحاجة إلى معرفة محددة بالمعالج أو الأجهزة التي سيتم تشغيل البرنامج عليها.
Low-Level : اللغة منخفضة المستوى، والتي تُعرف غالبًا باسم اللغة الأم للكمبيوتر، هي نوع من لغة البرمجة. إنه قريب جدًا من كتابة تعليمات الآلة الفعلية، ويتعامل مع مكونات أجهزة الكمبيوتر وقيودها. إنه يعمل على التحكم في دلالات تشغيل الكمبيوتر ويوفر القليل أو لا يقدم أي فكرة عن أفكار البرمجة. وعلى النقيض من اللغة عالية المستوى المستخدمة لتطوير البرمجيات، فإن التعليمات البرمجية ذات المستوى المنخفض ليست قابلة للقراءة من قبل الإنسان، وغالبًا ما تكون مشفرة. تعد لغة التجميع ولغة الآلة مثالين على لغات البرمجة منخفضة المستوى.
لغة التجميع هي اسمبلي Assembly
حاليا نحتاج الى المهارات المطلوبه في هذا المجال
1 - الفهم الكامل لأجهزة الكمبيوتر
2 - الفهم الكامل في تطوير البرمجيات
3 - فهم التعليمات البرمجية المستوى المنخفض
4 - حل لغز هذا الكود من خلال عدم توفر لك ماذا يفعل هذا الكود لان عندما يتم تحويل من قبل الكومبايلر الى برنامج يتم فقدان جميع المعلومات مثل اسامي الوظائف الخ يكون لديك تعليمات فقط
5 - تحليل المنطقي هذا التحليل يمكن ان تحصل عليه جيناتيا او تقوم بتطويره لوحدك
Compiler Developer
لهذا نفضل للمهندسين العكسين وليس الهاوين بتعلم الكومبايلر
لكن عشان نعمل الهندسة العكسية
بنحتاج CPU & 100+ IQ
فقط فهم السي بي يو وكيفية عمله وكيف يقوم بتشغيل البرنامج هذا كافي لتقوم بتفكيك اول برنامج لك لانه المعالج هو من يقوم بتنفيذ تعليمات البرنامج
تعليمات ؟
Instruction’s CPU
نعم يقوم المعالج بتنفيذ التعليمات التي تم تحويلها من الكومبايلرز لتنفيذها كل طبقة من الكومبايلرز هيا معقده واحد التطبقات تقوم بتحويل البرنامج الى Assembly Code ومن ثمها يتم استخدام الينكر لربطها وتتحول الى 010101 من High-level الى Low-level
المعالج لا يفهم ما لغات عالية المستوى مثل ++C يقوم بتحويلها الى لغة اقل ليتم التعامل معاها بشكل افضل
> ملاحظة : لم ارى مبرمجا مخضرم الا وكان يعلم كيفة كتابة اسمبلي
High-Level : اللغات عالية المستوى هي لغات برمجة مصممة للسماح للبشر بكتابة برامج الكمبيوتر والتفاعل مع نظام الكمبيوتر دون الحاجة إلى معرفة محددة بالمعالج أو الأجهزة التي سيتم تشغيل البرنامج عليها.
Low-Level : اللغة منخفضة المستوى، والتي تُعرف غالبًا باسم اللغة الأم للكمبيوتر، هي نوع من لغة البرمجة. إنه قريب جدًا من كتابة تعليمات الآلة الفعلية، ويتعامل مع مكونات أجهزة الكمبيوتر وقيودها. إنه يعمل على التحكم في دلالات تشغيل الكمبيوتر ويوفر القليل أو لا يقدم أي فكرة عن أفكار البرمجة. وعلى النقيض من اللغة عالية المستوى المستخدمة لتطوير البرمجيات، فإن التعليمات البرمجية ذات المستوى المنخفض ليست قابلة للقراءة من قبل الإنسان، وغالبًا ما تكون مشفرة. تعد لغة التجميع ولغة الآلة مثالين على لغات البرمجة منخفضة المستوى.
لغة التجميع هي اسمبلي Assembly
حاليا نحتاج الى المهارات المطلوبه في هذا المجال
1 - الفهم الكامل لأجهزة الكمبيوتر
2 - الفهم الكامل في تطوير البرمجيات
3 - فهم التعليمات البرمجية المستوى المنخفض
4 - حل لغز هذا الكود من خلال عدم توفر لك ماذا يفعل هذا الكود لان عندما يتم تحويل من قبل الكومبايلر الى برنامج يتم فقدان جميع المعلومات مثل اسامي الوظائف الخ يكون لديك تعليمات فقط
5 - تحليل المنطقي هذا التحليل يمكن ان تحصل عليه جيناتيا او تقوم بتطويره لوحدك
Reversing Applications:
الحقيقة انو اغلب استخدامات الهندسة العكسية بغرض غير شريف مثل فهم منتجات الشركه المنافسه وعمل على افضل منها او نسخها او لكي فهم عمل مضادات معينة مثل مضادات البرامج الخبيثة الخ وعمل برنامج ضار يتجاوز هذا المضاد ويكون غير مكشوف يوجد لها انواع مثل
1 - For Security : مثل تحليل البرمجيات الخبيثة وعمل لها مضاد
2 - For Software Development : لكي تقوم بفهم وظيفة معينه في البرنامج لكي تقوم بنسخها او عمل واحده افضل منها
3 - For Illegitimate Purpose : لاغراض غير شرعية مثل قرصنة التطبيقات
For Security :
مثال كيف تتمثل احد اهم الخطوات في صناعة مضادات البرامج الخبيثة يقومو بجلب برامج خبيثة قديمه وجديده ويقومو بعكسها وفهم كيفية عملها ليبنو لها مضاد لكي ان وجد مثل هذا السناريو في البرنامج يقوم باعطائك تنبيه وحذفها او استخدامها في ابحاث التشفير مثال يوجد منتج تشفير يمكن ان ياتو بشخص يقوم بعكس هذا المنتج واعطائم تقرير بمستوى التشفير من 10
Malicious Software :
قبل عشرات السنين ظهرت البرامج الخبيثة مثل الديدان واستمرت بالانتشار الى ملايين الاجهزة ولم يكن لها اي دفاع كان يجب عليك انت تحذف هاذي البرامج الخبيثة لوحدك تم استخدام الهندسة العكسية وفهم كيفية عمل هذا البرنامج الضار ونقاط ضعفه بعد ان قامو بتحديد كل شيء حوله قامو ببناء له نظام مضاد للبرامج الضاره تعمل كهذا الشكل او حتى ثغرات امنية
او كيف هذه البرامج تصل الى هذه المعلومات الحساسة في الجهاز او كيفية تقوم بسيطرة على النظام التشغيل كامل والحد منها
الخطوات تتمثل :
1 - فهم البرنامج وكيف يعمل
2 - تقيم الضرر الذي يمكن ان يقوم به
3 - كيفية إزالته
4 - كيف يمكن تجنبه
Reversing Cryptographic Algorithms :
الهدف من التشفير واضح هو سرية المعلومات كيفية تنقل المعلومات بسرية
صورتين :
في نوعين من خوارزميات التشفير :
1 - restricted algorithms : نوع سيء من ناحية الامنية مثل تبديل الحروف الى كم خطوه الى الاسفل او الاعلى من الاسكي كود (ASCII code )
مثل خوارزمية القيصر
2 - key-based algorithms : الخوارزميات القائمة على المفاتيح هي نوع من تقنيات التشفير التي تستخدم جزءًا محددًا من المعلومات، يُعرف بالمفتاح، لتشفير البيانات وفك تشفيرها.
for restricted algorithms
بمجرد الكشف خوارزمية التشفير الموضوع بسيط جدا بصير لفكها ولم تعد امنة
لما المهندسين العكسين على طريقة عمل لها فك تشفير الموضوع بكون منتهي كيف بناء الخوارزمية وكيفية فك تشفيرها
for key-based algorithms
السر الخاص فيها بكون في المفتاح اذا قمت بالعثور على المفتاح الموضوع سينتهي في فك تشفيرها
يمكن ان تكون الخوارزميه علنيه لكن المفتاح الخاص فيها خاص مثل XOR , AES etc…
يوجد عدة طرق كيفية فكها منها :
1 - الحصول على المفتاح
2 - التخمين
3 - البحث عن نقطة ضعف في الخوارزميه نفسها التي يمكن ان تساعدك لاستخراج المفتاح
صورتين :

في نوعين من خوارزميات التشفير :
1 - restricted algorithms : نوع سيء من ناحية الامنية مثل تبديل الحروف الى كم خطوه الى الاسفل او الاعلى من الاسكي كود (ASCII code )
مثل خوارزمية القيصر
2 - key-based algorithms : الخوارزميات القائمة على المفاتيح هي نوع من تقنيات التشفير التي تستخدم جزءًا محددًا من المعلومات، يُعرف بالمفتاح، لتشفير البيانات وفك تشفيرها.
for restricted algorithms
بمجرد الكشف خوارزمية التشفير الموضوع بسيط جدا بصير لفكها ولم تعد امنة
لما المهندسين العكسين على طريقة عمل لها فك تشفير الموضوع بكون منتهي كيف بناء الخوارزمية وكيفية فك تشفيرها
for key-based algorithms
السر الخاص فيها بكون في المفتاح اذا قمت بالعثور على المفتاح الموضوع سينتهي في فك تشفيرها
يمكن ان تكون الخوارزميه علنيه لكن المفتاح الخاص فيها خاص مثل XOR , AES etc…
يوجد عدة طرق كيفية فكها منها :
1 - الحصول على المفتاح
2 - التخمين
3 - البحث عن نقطة ضعف في الخوارزميه نفسها التي يمكن ان تساعدك لاستخراج المفتاح
Digital Rights Management (DRM) :

معظم المواد المحمية بحقوق طبع ونشر الى معلومات رقمية مثل الكتب,الاغاني,الافلام حتى البرامج زمان كانت متوفره ماديا حاليا متوفره رقميا وهذا يوفر نعم كثيره فهو يفيد لمستهلكين والمالكين وهذا يعني المعلومات الرقمية هاذي بتكون من السهل انك تكرارها
بمعنى اذا وصلت هاي الـ دي ار ام الى ايدي المستهلكين يمكن نسخها بسهوله وظهرت شركات مع هاذي القرصنه من خلال دمج تقنيات الـ copy protection في برامجهم لتقوم بمنع المستخدمين من تقليدهم و وتقيد نسخها
هذا تحدي جديد للمهندسين العكسين يجب عليه التغلب على هذه التقنيه التي تقوم بحماية هذا البرنامج، فهم كيفية عملها وكيفية ايقافها الخ
Auditing Program Binaries :
احدى نقاط قوة البرمجيات مفتوحة المصدر هي انها غالبا اكثر موثوقيه وامنه
وبرامج مفتوحة المصدر يمكن ان تكتشف به بعض نقاط الضعف والثغرات في وقت قياسي
اما البرامج التي لا توفر الكود المصدر لها يصبح مهارة العكس بديلا قابلا للتطبيق للبحث عن الثغرات الامنية
ملاحظة لا يمكن للهندسة العكسية ان تعجل البرمجيات الاحتكارية سهلة المنال وقابلة للقراءة مثل البرمجيات المفتوحة للمصدر مثل ما تم كتابتها لكن كتابة البرنامج بقوة عالية تعتمد على مهندس البرمجيات وتمر في خطوات كثيره يمكن ان يكون البرنامج المعكوس افضل من البرنامج الاصلي بسبب وجود تقيم ومهندسين برمجيات وادارة مشاريع على البرنامج المشروع الغير شرعي ويمكن العكس وعلى الاغلب يكون عكس ذالك
بمعنى ان مهارات العكس قوية جدا
وبرامج مفتوحة المصدر يمكن ان تكتشف به بعض نقاط الضعف والثغرات في وقت قياسي
اما البرامج التي لا توفر الكود المصدر لها يصبح مهارة العكس بديلا قابلا للتطبيق للبحث عن الثغرات الامنية
ملاحظة لا يمكن للهندسة العكسية ان تعجل البرمجيات الاحتكارية سهلة المنال وقابلة للقراءة مثل البرمجيات المفتوحة للمصدر مثل ما تم كتابتها لكن كتابة البرنامج بقوة عالية تعتمد على مهندس البرمجيات وتمر في خطوات كثيره يمكن ان يكون البرنامج المعكوس افضل من البرنامج الاصلي بسبب وجود تقيم ومهندسين برمجيات وادارة مشاريع على البرنامج المشروع الغير شرعي ويمكن العكس وعلى الاغلب يكون عكس ذالك
بمعنى ان مهارات العكس قوية جدا
Reversing in Software Development :
العكس مفيد بشكل عظيم لمطوري البرامج يمكن ان يساعدهم في تحديد جودة التعليمات في بعض الكتب الاساسية التي قمت بقراءتها في علوم الحاسب تقدم لك كيفية كتابة كود ذو جودة عالية والاستفادة من امتيازات الكومبايلر ويمكنك التعرف على هذا من خلال ان تعكس التعليمات وترى كيف تعمل بشكل حقيقي ويمكنك تعديلها او استخدامها لاستخراج معلومات من برنامج اخر والاستفادة منه
Evaluating Software Quality and Robustness :
لا يوجد لديك كود المصدر الخاص في البرنامج لتثق بهم ؟ لا مشكلة الهندسة العكسية ستحل المشكله برامج مثل هاذي كمثل احضار لك طعام ولا تعلم ماذا كان يجري في المطبخ لكن الهندسة العكسية ستريك المطبخ مثال في عالم الاقتصاد يمكن شركة منافسة تريد شراء برنامج لكن تريد الوصول الى الكود المصدر وطلبو منهم اموال لا اعطائهم كود المصدر وتقيمه لكن لا يوجد اموال لا مشكله الهندسة العكسية متوفره قادرة على خلع ملابس البرنامج لا يمكنك معرفة ما بداخل الجسم من غير فحص الترا ساوند لترى ما يجري بداخله هكذا الهندسة العكسية
Low-Level Software :
اقوى اداء ممكن ان تحصل عليه هو في كتابة برامج منخفضة المستوى واصعب كتابة في نفس الوقت لهذا ظهرت لغات مثل سي بلس بلس يسهل كتابتها على رغم من ان حاليا السي بلس بلس تعتبر لغة صعبة في العالم الجديد الذين يكتبون في لغة البايثون التي لا معنى لها عندما ياتون الى لغة اسمبلي ومحاولة الكتابة بهم سوف يتحمصون
البرامج منخفضة المستوى تشمل ادوات الكومبايلرز اللينكرز ومصححات الاخطاء وبرامج انظمة التشغيل والكيرنيل الخ
يمكنك تمثيلها كـ طبقة تعزل مطوري البرامج عن الاجهزة الماديه
تعمل الاداوات على عزل مطوري البرامج عن بنيات التحتيه للمعالج ولغات التجميع ونظام التشغيل وكيف يمكنك التحكم في النظام مثل الماوس والكيبورد
لحسن حظ المبرمجين الغير مخضرمين يوجد لديكم الان عزل كامل لنظام التشغيل قامو ببناءه الباحثين في علوم الحاسب لهذا المهندس العكسي الحقيقي يوجد لديه فهم صلب للبرامج منخفضة المستوى وبرامج منخفضة المستوى المهندس العكسي الحقيقي يملك مفاهيم صلبة جدا على برامج عالية ونخفضة المستوى ونظام التشغيل والمجمعات واقل شيء موجود في الحاسب الرقمي من ناحية الرقمية وليس الفيزيائيه يوجد اشخاص مهندسين عكسين للهاردوير لكن نحن حاليا نتحدث عن الرقمي البرامج الرقميه جميع ما هو في الحاسب هو برنامج
ويعتقد الناس ان ادوات العكس مثل ديسايمبلرز وديبقرز الديكومبايلرز وادوات فك التشفير لا معنى لها غير ان تقدم المعلومات التي قامت بتخمينها من قبل خوارزمياتها يجب عليك على الاقل ان تفهم كيف تعمل لغة اسمبلي لكي تتعامل معاها تعلمك للغة التجميع ونظام التشغيل وقليل من البرمجة كفيل لجعلك عكس البرامج لكن ليس كفيل لينادوك المهندس العكسي الكثير من الحمقى في تويتر وفي المنتديات حقا يعتقدون انهم مهندسين عكسين وهم فقط كمثل من حفظ شيء وغاب عنه الكثير قدرتك على عكس البرنامج وفهم بعض الاشياء لا يجعلك مهندس عكسي مثال يمكن ان تكون رجل صالح يخاف الله ويصلي ويصوم ويزكي ويحج البيت لكن لا يمكن ان يكون مفتي لتصبح مهندس عكسي تحتاج الى سنوات لهذا لا تثق ب %95 من المهندسين العكسيين على تويتر لهذا على الاقل تحتاج الى فهم الطبقه التي بين الهاردوير ولغات العالية المستوى هي المستوى المنخفض
البرامج منخفضة المستوى تشمل ادوات الكومبايلرز اللينكرز ومصححات الاخطاء وبرامج انظمة التشغيل والكيرنيل الخ
يمكنك تمثيلها كـ طبقة تعزل مطوري البرامج عن الاجهزة الماديه
تعمل الاداوات على عزل مطوري البرامج عن بنيات التحتيه للمعالج ولغات التجميع ونظام التشغيل وكيف يمكنك التحكم في النظام مثل الماوس والكيبورد
لحسن حظ المبرمجين الغير مخضرمين يوجد لديكم الان عزل كامل لنظام التشغيل قامو ببناءه الباحثين في علوم الحاسب لهذا المهندس العكسي الحقيقي يوجد لديه فهم صلب للبرامج منخفضة المستوى وبرامج منخفضة المستوى المهندس العكسي الحقيقي يملك مفاهيم صلبة جدا على برامج عالية ونخفضة المستوى ونظام التشغيل والمجمعات واقل شيء موجود في الحاسب الرقمي من ناحية الرقمية وليس الفيزيائيه يوجد اشخاص مهندسين عكسين للهاردوير لكن نحن حاليا نتحدث عن الرقمي البرامج الرقميه جميع ما هو في الحاسب هو برنامج
ويعتقد الناس ان ادوات العكس مثل ديسايمبلرز وديبقرز الديكومبايلرز وادوات فك التشفير لا معنى لها غير ان تقدم المعلومات التي قامت بتخمينها من قبل خوارزمياتها يجب عليك على الاقل ان تفهم كيف تعمل لغة اسمبلي لكي تتعامل معاها تعلمك للغة التجميع ونظام التشغيل وقليل من البرمجة كفيل لجعلك عكس البرامج لكن ليس كفيل لينادوك المهندس العكسي الكثير من الحمقى في تويتر وفي المنتديات حقا يعتقدون انهم مهندسين عكسين وهم فقط كمثل من حفظ شيء وغاب عنه الكثير قدرتك على عكس البرنامج وفهم بعض الاشياء لا يجعلك مهندس عكسي مثال يمكن ان تكون رجل صالح يخاف الله ويصلي ويصوم ويزكي ويحج البيت لكن لا يمكن ان يكون مفتي لتصبح مهندس عكسي تحتاج الى سنوات لهذا لا تثق ب %95 من المهندسين العكسيين على تويتر لهذا على الاقل تحتاج الى فهم الطبقه التي بين الهاردوير ولغات العالية المستوى هي المستوى المنخفض
Assembly Language :
لغة التجميع من ناحية البرمجية هي ادنى مستوى يمكنك الوصول اليها لهذا هي الاكثر دقة لتحديد البرامج و وظائفه في علوم الحاسب قد قامو بتعليمك ان كل ما زاد قربك الى الهاردوير كثرت التفاصيل في اللغة مثال لغة التجيمع تفاصيلها اكثر بكثير من لغة سي لغة سي تفاصيلها اكثر من سي بلس بلس وسي بلس بلس تفاصيلها اكثر بكثير من بايثون اي عملية قام بها المبرمج تكون موجودة في لغة التجميع لهذا لغة الهندسة العكسية هي اسمبلي
يوجد الكثير من الأدوات اصبحت تدعم الديكومبايلرز هذا الكود المعكوس لكن مكتوب في لغة سي بنسبه لي هذا اكبر هراء للهندسة العكسية من نجح في استخدامه اصبح يسمي نفسه مهندس عكسي لكن هو في الحقيقه يعد للمبرمجين الدقه الموجودة في لغة التجميع من المستحيل ان تصل الى لغة التجميع هي اقوى لغة على كل الاحوال يوجد عندك مشاكل برمجية او حتى تريد ان تعكس اي شيء او تريد ان تفعل اي شيء من يفيدك هو لغة التجميع فقط على كل الاحوال لغة التجميع تنقسم الى عدة لغات كل منصة تستخدم نوع معين من لغة التجميع
بعض الاشخاص يقومو بسؤال لماذا لغة التجميع لماذا لا نستخدم لغة الالة وهذا خطأ فادح من اسمها لغة الالة لا يفهمها الى الالة يسمى احيانا object code,binary code & 01010101
مثال يتعامل معاه المعالج تقرأ لغة الالة يكون على هيئه تسلسلات من المستحيل فهمها بشريا لكن تقنيا يكون في المعالج قائمه تكون تحتوي على جميع التعليمات التي تقوم بتنفيذها وهنا تعلم ان لغة التجميع فقط مماثله للغة الالة لكن يمكن قراءتها بشريا تقريبا
مثال على لغة تجميع
mov
lea
xchg
inc
كل امر في لغة التجميع برقم معين يكون اسمه رمز التشغيل
(operation code or opcode) رمز الكائن الـ Object code هو ما الا سلسلة من رمز التشغيل والارقام الاخرى لتنفيذ التعليمات بعدها ياتي المعالج بقراءة هذا الرمز باستمرار من الذاكرة وفك تشفيره ويقوم بتنفيذه على حسب ما يقراءة
من يكتب كود في لغة التجميع يستخدم اسيمبلر لترجمة كود التجميع الى الباينري والذي يمكن للمعالج فك تشفيرة واحد ادوات الهندسة العكسية الديساسيمبلر يعمل عكس هاذي العملية للحصول على كود التجميع
يوجد الكثير من الأدوات اصبحت تدعم الديكومبايلرز هذا الكود المعكوس لكن مكتوب في لغة سي بنسبه لي هذا اكبر هراء للهندسة العكسية من نجح في استخدامه اصبح يسمي نفسه مهندس عكسي لكن هو في الحقيقه يعد للمبرمجين الدقه الموجودة في لغة التجميع من المستحيل ان تصل الى لغة التجميع هي اقوى لغة على كل الاحوال يوجد عندك مشاكل برمجية او حتى تريد ان تعكس اي شيء او تريد ان تفعل اي شيء من يفيدك هو لغة التجميع فقط على كل الاحوال لغة التجميع تنقسم الى عدة لغات كل منصة تستخدم نوع معين من لغة التجميع
بعض الاشخاص يقومو بسؤال لماذا لغة التجميع لماذا لا نستخدم لغة الالة وهذا خطأ فادح من اسمها لغة الالة لا يفهمها الى الالة يسمى احيانا object code,binary code & 01010101
مثال يتعامل معاه المعالج تقرأ لغة الالة يكون على هيئه تسلسلات من المستحيل فهمها بشريا لكن تقنيا يكون في المعالج قائمه تكون تحتوي على جميع التعليمات التي تقوم بتنفيذها وهنا تعلم ان لغة التجميع فقط مماثله للغة الالة لكن يمكن قراءتها بشريا تقريبا
مثال على لغة تجميع
mov
lea
xchg
inc
كل امر في لغة التجميع برقم معين يكون اسمه رمز التشغيل
(operation code or opcode) رمز الكائن الـ Object code هو ما الا سلسلة من رمز التشغيل والارقام الاخرى لتنفيذ التعليمات بعدها ياتي المعالج بقراءة هذا الرمز باستمرار من الذاكرة وفك تشفيره ويقوم بتنفيذه على حسب ما يقراءة
من يكتب كود في لغة التجميع يستخدم اسيمبلر لترجمة كود التجميع الى الباينري والذي يمكن للمعالج فك تشفيرة واحد ادوات الهندسة العكسية الديساسيمبلر يعمل عكس هاذي العملية للحصول على كود التجميع
Compilers :
المعالج وحدة المعالجة المركزية يمكنها فقط تشغيل لغة الالة فكيف تتم ترجمة لغات البرمجة مثل سي بلس بلس وجافا الى كود الالة ؟
بكون ملف تيكست بحتول على تعليمات تصف البرنامج وظيفته بلغة عالية المستوى في الكومبايلر
الكومبايلر بتكون وظيفتو بوخذ ملف التيكست او السورس كود وبنشئ رمز الجهاز لغة الالة المقابل لتعليمات المكتوبه في السورس كود
مثال :
بعتمد على اللغة عالية المستوى يمكن ان يكون رمز الجهاز خذا اما رمز كائن خاص بالنظام الاساسي يتم فك تشفيره مباشرة من المعالج او تشفيره بتنسيق مستقل اسمه بايت كود
الكومبايلرز لغات البرمجة مثل مترجمين لغة سي وسي بلس بلس على البايت كود مباشره يتم ترجمته الى كود كائن من خلال كود المصدر
ما يعنيه هذا هو أن كود الكائن الناتج، عند ترجمته إلى لغة التجميع بواسطة المفكك، هو في الأساس برنامج لغة تجميع تم إنشاؤه آليًا.
طبعا مش كلو يتم انشائه اليا بالكامل لان مطور البرنامج فقط يكتب للكومبايلر ما يريده والكومبايلر يتم تحويله الى رمز الالة مثل برمجة الكائنات الحيه لا تتم ترجمتها بشكل حرفي مثال ال class تتمثل كـ structures
يتم ترجمة التفاصيل فقط ويوجد عقبات كثير مثل تحسينات الكومبايلر الذي يمكن ان يضيفها الى الكود مثل تقليل حجم البرنامج وتحسين اداء البرنامج لكن ان كان كاتب البرنامج لا يدرك هذا ممكن ان الكومبايلر لا يقوم بتحسين معظم الكود بسبب انه احمق فقط لهذا بعض البرامج ممكن ان يصعب قرائتها وتحتاج الى فهم دقيق للكود ويفضل لديك معرفة دقيقه في الكومبايلرز مثل ما يتم استبدال الكود الكومبايلر الى كود رياضي لا تكون تعليمات مباشره
بكون ملف تيكست بحتول على تعليمات تصف البرنامج وظيفته بلغة عالية المستوى في الكومبايلر
الكومبايلر بتكون وظيفتو بوخذ ملف التيكست او السورس كود وبنشئ رمز الجهاز لغة الالة المقابل لتعليمات المكتوبه في السورس كود
مثال :
بعتمد على اللغة عالية المستوى يمكن ان يكون رمز الجهاز خذا اما رمز كائن خاص بالنظام الاساسي يتم فك تشفيره مباشرة من المعالج او تشفيره بتنسيق مستقل اسمه بايت كود
الكومبايلرز لغات البرمجة مثل مترجمين لغة سي وسي بلس بلس على البايت كود مباشره يتم ترجمته الى كود كائن من خلال كود المصدر
ما يعنيه هذا هو أن كود الكائن الناتج، عند ترجمته إلى لغة التجميع بواسطة المفكك، هو في الأساس برنامج لغة تجميع تم إنشاؤه آليًا.
طبعا مش كلو يتم انشائه اليا بالكامل لان مطور البرنامج فقط يكتب للكومبايلر ما يريده والكومبايلر يتم تحويله الى رمز الالة مثل برمجة الكائنات الحيه لا تتم ترجمتها بشكل حرفي مثال ال class تتمثل كـ structures
يتم ترجمة التفاصيل فقط ويوجد عقبات كثير مثل تحسينات الكومبايلر الذي يمكن ان يضيفها الى الكود مثل تقليل حجم البرنامج وتحسين اداء البرنامج لكن ان كان كاتب البرنامج لا يدرك هذا ممكن ان الكومبايلر لا يقوم بتحسين معظم الكود بسبب انه احمق فقط لهذا بعض البرامج ممكن ان يصعب قرائتها وتحتاج الى فهم دقيق للكود ويفضل لديك معرفة دقيقه في الكومبايلرز مثل ما يتم استبدال الكود الكومبايلر الى كود رياضي لا تكون تعليمات مباشره
Virtual Machines and Bytecodes :

يوجد كومبايلرز يقومو بترجمة لغات عالية المستوى مثل جافا بانشاء رمز ثانوي بدلا من رمز الكائن
بتشبه رموز الكائنات باستثناء انه يتم فك تشفيرها عادة بواسطة برنامج بدلا من المعالج
فكرة في جعل المترجم يقوم بانشاء كود ثانوي بايت كود ثم استخدام برنامج فيرتول ماشين لفك تشفير الكود الثانوي وتنفيذ العمليات الموضحه فيه طبعا لازم الفيرتول ماشين تحويل البايت كود الى اوبجكيت كود متوافق من المعالج
احدى ميزات هاذي الخطوة يكون مستقل ويمكن نقلها الى منصات اخرى مما يتيح تشغيل نفس البرنامج الثنائي على اي معالج طالما لديها فيرتول ماشين مستقل وهذا احد الاسباب لماذا تتعلم جافا في الجامعة
بغض النظر عن النظام الذي يعمل عليه فيرتول ماشين حاليا يبقى تنسيق الرمز ثانوي بايت كود كما هو
وهذا يعني لا يحتاجو للقلق بشان توافق نظام الاساسي فقط كل ما يجب عليهم فعله هو تزيد عملائهم بنسخة من البايت كود من برنامجهم ومثل هاذي اللغات يسهل جدا مقارنة في لغات اخرى من عكسها وهذا سبب لماذا .NET Microsoft سهلة العكس
Operating Systems :
الكمبيوتر بدون نظام تشغيل هو عبارة عن حديده يوجد بها ترانزيستورات واشياء لا معنى لها لانو هو الي بدير جهاز الكمبيوتر اذا كان نظام تشغيل غبي راح يكون التعامل مع الهاردوير غبي نظام التشغيل مكلف في العديد من المهام منها كيفية التعامل مع كرت الشاشة كما تقرأ حاليا المقال نظام التشغيل ما يديرها عنصر اساسي لا يمكن الاستغناء عنها لهذا يجب على المهندس العكسي فهم انظمة التشغيل لما يفعله وكيف يفعله
والكثير من تقنيات العكس تدور حول نظام التشغيل
والكثير من تقنيات العكس تدور حول نظام التشغيل
The Reversing Process :
كيف تبدا في العكس للمبتدئين في موضوعين
الاول هو نوع من مراقبة واسعة النطاق للبرنامج يسمى عكس على مستوى النظام
system-level reversing تساعدك في تحديد هيكل العام للبرنامج وفي بعض الاحيان تحديد مجالات مثيرة للاهتمام داخله بمجرد انشاء فهم عام لتخطيط البرنامج وتحديد مجالات ذات اهتمام داخله يمكنك المتابعه الى المزيد من العمل المتعمق باستخدام تقنيات عكس المستوى التعليمات البرمجة
Code-level reversing
مستوى التعليمات البرمجية توفر لك معلومات مفصله عن مجموعة التعليمات البرمجة المحددة
الاول هو نوع من مراقبة واسعة النطاق للبرنامج يسمى عكس على مستوى النظام
system-level reversing تساعدك في تحديد هيكل العام للبرنامج وفي بعض الاحيان تحديد مجالات مثيرة للاهتمام داخله بمجرد انشاء فهم عام لتخطيط البرنامج وتحديد مجالات ذات اهتمام داخله يمكنك المتابعه الى المزيد من العمل المتعمق باستخدام تقنيات عكس المستوى التعليمات البرمجة
Code-level reversing
مستوى التعليمات البرمجية توفر لك معلومات مفصله عن مجموعة التعليمات البرمجة المحددة
System-Level Reversing :
يتضمن العكس على مستوى النظام تشغيل ادوات مختلفة على البرنامج واستخدام خدمات نظام التشغيل للحصول على معلومات وفحص الملفات التنفيذية للبرنامج وتتبع المدخلات البرنامج ومخرجاته الخ
معظم هاذي المعلومات تاتي من النظام التشغيل لهذا قمنا بتسميته هكذا لان كل تفاعل بين البرنامج مع الهاردوير يجب ان يمر على نظام التشغيل لهذا معلوماته ستفيدك كثيرا
لهذا من الضرورة ان تفهم العكس في نظام التشغيل
معظم هاذي المعلومات تاتي من النظام التشغيل لهذا قمنا بتسميته هكذا لان كل تفاعل بين البرنامج مع الهاردوير يجب ان يمر على نظام التشغيل لهذا معلوماته ستفيدك كثيرا
لهذا من الضرورة ان تفهم العكس في نظام التشغيل
Code-Level Reversing :
يعد استخراج مفاهيم تصميم وظائف وخوارزميات الكود عملية نوعا ما معقدة تعتمد على البرنامج لكن تتطلب جانب جيد وما فوق في لغة اسمبلي وتطوير البرمجيات ونظام التشغيل
يوجد برامج قويه وكتابة الكود الخاص بها صعب لدرجة يصعب قراءته في حالة السورس كود فما بالك في عكسه امر ليس بسهل عليك لعكس الكود ان كنت سيء في البرمجة ونظم التشغيل
بصفتك مهندس عكسي وحقيقي وليس هاوي يجب عليك دائما فهم تفاصيل البرنامج الغير تلقائيه والتلقائيه مثل التي تم وضعها من قبل الكومبايلر وليس يدويا التي تكون صعبه في الغالب
The Tools :
أدواتك هي مهاراتك لازم ان تكون على درايه على الاقل في الادوات الاساسية في الهندسة العكسية
يمكن في بعض الاحيان ان تستخدم ادوات ليس له علاقة في الهندسة العكسية لكن ستفيدك كـ مهندس عكسي
سنلقي نظرة في الاسفل على الادوات التي سنستخدمها
يمكن في بعض الاحيان ان تستخدم ادوات ليس له علاقة في الهندسة العكسية لكن ستفيدك كـ مهندس عكسي
سنلقي نظرة في الاسفل على الادوات التي سنستخدمها

System-Monitoring Tools :
يتطلب العسك على مستوى النظام مجموعة من الادوات التي تتعرف على البرنامج الذي تم عكسه وتراقبه وتستكشف كيف يعمل بالنظام مثال يقوم بفتح ملفات او اغلاقها مراقبة نشاط الشبكه كما ذكرنا كل شيء يمر من خلال نظام التشغيل فهذا مفيد جدا لاستخراج معلومات
Disassemblers :
قمنا بشرح المفككات هي برامج تاخذ الملف الثنائي وتعكسه وتحصل على كود الاسمبلي الخاص به
نظريا يمكن ان تظن انها عاديه صنعها لكن داخليا من اصعب الاشياء التي ان عملت عليها ستجدها معقده ومليئه بالخوارزميات وهي احد الادوات الاساسية التي يجب عليك ان تستخدمها ويجب ان تكون عالية الجودة مثل ادوات مثل Ghidra , IDA & Binary Ninja
نظريا يمكن ان تظن انها عاديه صنعها لكن داخليا من اصعب الاشياء التي ان عملت عليها ستجدها معقده ومليئه بالخوارزميات وهي احد الادوات الاساسية التي يجب عليك ان تستخدمها ويجب ان تكون عالية الجودة مثل ادوات مثل Ghidra , IDA & Binary Ninja
Debuggers :

الديبقر على مطور البرمجيات العادي يمكن ان يستخدمه لا مشكله ويمكن ان يكون لديه خبره به الفكرة وراءه هي ان المبرمجين على الاغلب لا يمكن تصور كل ما يمكن ان يفعله برنامجهم فهم البرنامج لوحدة هي عملية معقدة وتنبئ بما يمكن ان يحدث لهذا الديبقر يعمل ك البرنامج في الذاكره ويسمح مراقبة البرنامج في كل ما يمكن ان يفعله برنامجهم والميزة في الديبقر هي تعيين نقاط التوقف والقدرة على تتبع من خلال التعليمات البرمجية
نقطة التوقف هي تسمح للمبرمجين في توقيف تعليمات البرمجية معينه لوقت غير محدد لفحصه وتحليله بشكل ادق وعدم تشغيله بلكامل يمكن ان يضعه عند وظيفة معينه لتحليلها ومعرفة ما يجري بها بشكل مباشر من غير تخمين عندما يرى البرنامج نقطة توقف الديبقر سيقوم بتوقف وعرض التفاصيل والتحليل وسيريك الحالة الحالية للبرنامج من خلال الديبقر يمكنك تحديد التعليمات التي تتنفذ والسلسلة التي يمر بها البرنامج ويمكنك وضع بريك بوينت لتحليله
بمعنى ان ينفذ سطر واحدا في كل مرا من التعليمات البرمجية ويتوقف لمراقبة حالة البرنامج وتقوم بالاستمرار الى التعليمه الاخرى وتوقف الى عند تنتهي من عملك هذا يتيح لك رؤية التدفق الحقيقي للبرنامج تقوم بتنفيذ العمليه مره واحده وتحليلها وتحليل على ماذا تحتوي الخ يتيح لك لك مراقبة البرنامج وهو يتنفذ من قبل المعالج والنظر الى مواقع الذاكره التي تمتلئ في المعلومات التي يمكن ان تكون مفيده او من نظام التشغيل او لا معنى لها مثل
هي مثل استخدام الديبقر العادي لكن هنا لا يوجد لديك كود المصدر انت الان في الظلام يجب عقلك انت يفهم كل شيء يدور حوله وهاذي الخطوه تكنيكيا يجب ان تكون بعد المفكك
Decompilers :
كما ذكرنا هيا هراء ويتم استخدامها ليس من قبل المهندسين العكسيين الحقيقين
حرفيا هي تاخذ كود لغة اسمبلي وتحاول تحويله الى لغة عالية مستوى مثل سي لكن في هاذي العملية معلومات كثيره تتلاشى لا احب لغة التعميم لكن اي شخص قوم باستخدم الديكومبايلر هو مبرمج وغير مهندس عكسي وبعض تقنيات التبهيم تمنع من ايصالك الى ديكومبايلر يجب عليك فكها للوصول اليه ان كنت تريد ان ترى مدى قدراته اضعه في بيئه لا يوجد بها الا IDE ,Poor Disassemlber & Debugging وسيظهر ان كان مهندس عكسي حقيقي ام لا
ان كنت تريد تعلم الهندسة العكسية هذا المقال سيفيدك
sh3ll.cloud
حرفيا هي تاخذ كود لغة اسمبلي وتحاول تحويله الى لغة عالية مستوى مثل سي لكن في هاذي العملية معلومات كثيره تتلاشى لا احب لغة التعميم لكن اي شخص قوم باستخدم الديكومبايلر هو مبرمج وغير مهندس عكسي وبعض تقنيات التبهيم تمنع من ايصالك الى ديكومبايلر يجب عليك فكها للوصول اليه ان كنت تريد ان ترى مدى قدراته اضعه في بيئه لا يوجد بها الا IDE ,Poor Disassemlber & Debugging وسيظهر ان كان مهندس عكسي حقيقي ام لا
ان كنت تريد تعلم الهندسة العكسية هذا المقال سيفيدك
تعلم الهندسة العكسية مجانا
اول اشي السلام عليكم ورحمة الله وبركاتة انا بفضل الله انهيت كم فيديو لحد الان بشرح عن الهندسة العكسية في اللغة العربية في قناتي retkit وحاب اشارك بعض المعلومات في هاض المنتدى كورس تحليل البرمجيات الخبيثة بالعربي | Malware Analysis - YouTube | كورس تحليل البرمجيات الخبيثة بالعربي | Malware...

التعديل الأخير بواسطة المشرف: