06-04-2021, 05:51 PM
(آخر تعديل لهذه المشاركة : 19-05-2024, 07:07 PM بواسطة ehab85.
تعديل السبب: اضافة معلومات
)
الدرس الأول: رحلة عبر عالم الهندسة العكسية
هل تساءلت يوماً كيف تعمل البرامج؟
ما هي الأسرار التي تخفيها أكوادها؟
هل ترغب في اكتساب مهارة خارقة تمكنك من تحليل أي برنامج وفهم سلوكه؟
إذا كان الأمر كذلك، فهذا الدرس لك!
سنغوص معا في رحلة شيقة عبر عالم الهندسة العكسية، حيث سنكتشف أسرار البرامج ونفكك رموزها، ونعيد صياغة حكاياتها.
ما هي الهندسة العكسية للبرمجيات؟
هل تساءلت يوماً كيف تعمل البرامج؟
ما هي الأسرار التي تخفيها أكوادها؟
هل ترغب في اكتساب مهارة خارقة تمكنك من تحليل أي برنامج وفهم سلوكه؟
إذا كان الأمر كذلك، فهذا الدرس لك!
سنغوص معا في رحلة شيقة عبر عالم الهندسة العكسية، حيث سنكتشف أسرار البرامج ونفكك رموزها، ونعيد صياغة حكاياتها.
ما هي الهندسة العكسية للبرمجيات؟
هي عملية تحليل برنامج (Software) موجود مسبقاً لفهم كيفية عمله، ويشمل ذلك فهم بنية البرنامج، والخوارزميات المستخدمة، وكيف يتفاعل مع نظام التشغيل، وكيف يتعامل مع البيانات وانتقالها في المعالج والذاكرة خطوة بخطوة.
يمكن استخدام هذه المعلومات لأغراض مختلفة، مثل تحسين البرنامج، أو إيجاد ثغرات أمنية، أو محاولة إعادة إنشاء الكود الاصلي (Source code) الذي تم ترجمته (interpret) او تجمعيه (compiled) في ملف (byte-code) أو ملف ثنائي (binary) وتسمى ايضاً ملفات تنفيدية (executable file) ويكون في ويندوز بامتداد exe و bin وفي ماك بامتداد app وفي اندرويد بامتداد apk... وغيرهم
يمكن استخدام هذه المعلومات لأغراض مختلفة، مثل تحسين البرنامج، أو إيجاد ثغرات أمنية، أو محاولة إعادة إنشاء الكود الاصلي (Source code) الذي تم ترجمته (interpret) او تجمعيه (compiled) في ملف (byte-code) أو ملف ثنائي (binary) وتسمى ايضاً ملفات تنفيدية (executable file) ويكون في ويندوز بامتداد exe و bin وفي ماك بامتداد app وفي اندرويد بامتداد apk... وغيرهم
يكتب المبرمج في البداية برنامجًا، عادةً بلغة عالية المستوى مثل C ++ أو Visual Basic (أو لا سمح الله، دلفي). ولأن الكمبيوتر لايتحدث هذه اللغات بطبيعته، يتم ترجمة الكود الذي كتبه المبرمج بواسطة (compiler) ولمرة واحدة الى لغة الآلة، وهي اللغة التي يفهمها الكمبيوتر، ويكون ملف البرنامج جاهز للتفيذ في المعالج.
مترجمات (interpreter) بعض لغات البرمجة مثل: Java و .NET تقوم بترميز الكود في ملف (Byte-code) مسبقا، بينما لغة Python تترجم في وقت التشغيل، ولا يمكن تشغيل الملف مباشرة في المعالج CPU ونحتاج الى مفسر او مترجم يعمل مثل جهاز افترضي (virtual machine) يقوم بترجمة الاوامر الى لغة الآلة وتنفيذها في كل مرة نشغل فيها البرنامج، ولذلك تطبيقات هذه اللغات أبطأ في التنفيذ احياناً، ولكن برامجها غير مقيدة بنوع المعالج او نظام التشغيل (OS).
تنقسم الهندسة العكسية لبرامج الكمبيوتر الى 3 اقسام:
- Software: حيث يتم عكس اكواد البرنامج المكتوبة بلغة الألة (binary) عن طريق برامج disassembler ويتم اعادتها الى لغة عالية المستوى او حتى لغة الاسمبلي ويمكن لبعض البرامج إعادة إنشاء الكود الأصلي بدقة عالية وقد لا تطابق إعادة التحويل الكود الأصلي بشكل كامل، خاصة في حالة وجود تعليمات برمجية معقدة.
- Hardware: في بعض الاحيان يتم الوصول الى اكواد البرنامج من العتاد (المعالج او الذاكرة او ناقل البيانات) بمساعدة اجهزة وبرامج وتتطلب هذه العملية خبرات متقدمة.
- Analysis: نقوم بتحليل سلوك البرنامج، ملاحظين ما يفعل، وكيف يتفاعل مع المستخدم، وما هي البيانات التي يعالجها، تم نستخدم أدوات متخصصة لمراقبة حركة البيانات، وتتبع مسار التنفيذ، وفهم كيفية تفاعل البرنامج مع العتاد ومحاولة إنتاج تطبيق مستقل يحاكي نفس سلوك التطبيق الأصل، ويتم حتى مراقبة حركة البيانات والحزم في النواقل (Data Bus) والشبكة ومحاولة اعادة انتاج بروتكول معين (Protocols).
اصبحت عملية تفكيك الكود (Decompilation) اصعب بسبب عمليات الحماية مثل التشفير والتشويش، لذلك يتم الاتجاه في بعض الحالات الى كسر الحماية عن طريق الوصول الى Native code وهو الكود الغير مشفر أثناء تنفيذه في CPU او memory، ومع ذلك فإن 97% من التطبيقات البرمجية تحتوي على ثغرات أمنية ويمكن فك الملف الثنائي او (Byte-code) والوصول الى كود المصدر.
معلومة: اول عملية هندسة عكسية تمت لنظام BIOS الذي صممته شركة IBM.
ما الفائدة من الهندسة العكسية ؟
معلومة: اول عملية هندسة عكسية تمت لنظام BIOS الذي صممته شركة IBM.
ما الفائدة من الهندسة العكسية ؟
- استرجاع تعليمات البرامج القديمة التي لا يوجد لها (Source code) للحفاظ على التوافق مع الأنظمة الجديدة.
- كسر حماية التطبيقات، وللحصول على البرامج التجارية مجاناً.
- دراسة الفيروسات والبرامج الضارة وايجاد ثغرات لايقافها وازالتها.
- تحليل برامج مكافحة الفيروسات لفهم كيفية عملها، مما يمكننا من تحسينها أو إيجاد طرق للتهرب منها.
- تقييم جودة البرامج وقوتها وأمنها (البحث عن الثغرات الأمنية).
- فهم وتعلم كيفية عمل برنامج معين.
- إضافة وظائف إلى البرامج الموجودة عن طريق برامج resource editor.
ماهو المطلوب لمتابعة دورة الهندسة العكسية ؟
الهندسة العكسية تتطلب منك تعلم لغة الاسمبلي assembly وأن تعرف قليلاً على لغة الآلة machine واذا اردت ان تكون محترفاً يجب عليك فهم عمل المعالج والذاكرة والنواقل Bus يعني تحتاج دورة في (Computer architecture) ويلزمك ان تتعلم بعض خوارزميات التشفير والضغط واكتشاف وتصحيح الاخطاء يعني تحتاج دورة في (Information theory) ويلزمك ان تتعلم عن انظمة التشغيل مثل: انظمة الملفات وإدارة العمليات والذاكرة يعني دورة في (Operating systems) بعد ذلك يلزمك تعلم ادوات الهندسة العكسية مثل: IDA Pro و Ghidra و Radare2 ومع الممارسة ستصبح محترف.
نصائح مهمة
الدرس الثاني سنشرح فيه ادوات الهندسة العكسية.
تحياتي: إيهاب ازطّاف، يفرن، ليبيا
الهندسة العكسية تتطلب منك تعلم لغة الاسمبلي assembly وأن تعرف قليلاً على لغة الآلة machine واذا اردت ان تكون محترفاً يجب عليك فهم عمل المعالج والذاكرة والنواقل Bus يعني تحتاج دورة في (Computer architecture) ويلزمك ان تتعلم بعض خوارزميات التشفير والضغط واكتشاف وتصحيح الاخطاء يعني تحتاج دورة في (Information theory) ويلزمك ان تتعلم عن انظمة التشغيل مثل: انظمة الملفات وإدارة العمليات والذاكرة يعني دورة في (Operating systems) بعد ذلك يلزمك تعلم ادوات الهندسة العكسية مثل: IDA Pro و Ghidra و Radare2 ومع الممارسة ستصبح محترف.
نصائح مهمة
- ابدأ ببساطة: لا تحاول تعلم كل شيء عن الهندسة العكسية في وقت واحد. ابدأ ببساطة وقم ببناء مهاراتك تدريجياُ.
- مارس بانتظام: أفضل طريقة لتعلم الهندسة العكسية هي الممارسة بانتظام. حاول تطبيق ما تعلمته على برامج جديدة كل يوم.
- لا تستسلم: تعلم الهندسة العكسية عملية صعبة وتتطلب الكثير من الصبر والمثابرة. لا تستسلم إذا واجهت صعوبات في البداية.
الدرس الثاني سنشرح فيه ادوات الهندسة العكسية.
تحياتي: إيهاب ازطّاف، يفرن، ليبيا