الفريق العربي للهندسة العكسية
دورة الهندسة العكسية من الصفر حتى الاحتراف - نسخة قابلة للطباعة

+- الفريق العربي للهندسة العكسية (https://www.at4re.net/f)
+-- قسم : منتديات الهندسة العكسية - Reverse Engineering Forums (https://www.at4re.net/f/forum-4.html)
+--- قسم : الهندسة العكسية - Reverse Code Engineering (https://www.at4re.net/f/forum-19.html)
+--- الموضوع : دورة الهندسة العكسية من الصفر حتى الاحتراف (/thread-2683.html)

الصفحات: 1 2


دورة الهندسة العكسية من الصفر حتى الاحتراف - ehab85 - 06-04-2021

الدرس الأول: رحلة عبر عالم الهندسة العكسية

هل تساءلت يوماً كيف تعمل البرامج؟
ما هي الأسرار التي تخفيها أكوادها؟
هل ترغب في اكتساب مهارة خارقة تمكنك من تحليل أي برنامج وفهم سلوكه؟

إذا كان الأمر كذلك، فهذا الدرس لك!

سنغوص معا في رحلة شيقة عبر عالم الهندسة العكسية، حيث سنكتشف أسرار البرامج ونفكك رموزها، ونعيد صياغة حكاياتها.

ما هي الهندسة العكسية للبرمجيات؟
 هي عملية تحليل برنامج (Software) موجود مسبقاً لفهم كيفية عمله، ويشمل ذلك فهم بنية البرنامج، والخوارزميات المستخدمة، وكيف يتفاعل مع نظام التشغيل، وكيف يتعامل مع البيانات وانتقالها في المعالج والذاكرة خطوة بخطوة.

يمكن استخدام هذه المعلومات لأغراض مختلفة، مثل تحسين البرنامج، أو إيجاد ثغرات أمنية، أو محاولة إعادة إنشاء الكود الاصلي (Source code) الذي تم ترجمته (interpret) او تجمعيه (compiled) في ملف (byte-code) أو ملف ثنائي (binary) وتسمى ايضاً ملفات تنفيدية (executable file) ويكون في ويندوز بامتداد exe و bin وفي ماك بامتداد app وفي اندرويد بامتداد apk... وغيرهم
يكتب المبرمج في البداية برنامجًا، عادةً بلغة عالية المستوى مثل C ++ أو Visual Basic (أو لا سمح الله، دلفي). ولأن الكمبيوتر لايتحدث هذه اللغات بطبيعته، يتم ترجمة الكود الذي كتبه المبرمج بواسطة (compiler) ولمرة واحدة الى لغة الآلة، وهي اللغة التي يفهمها الكمبيوتر، ويكون ملف البرنامج جاهز للتفيذ في المعالج.
[صورة مرفقة: Four-Stages-Of-Program-Compilation.jpg]
مترجمات (interpreter) بعض لغات البرمجة مثل: Java و .NET تقوم بترميز الكود في ملف (Byte-code) مسبقا، بينما لغة Python تترجم في وقت التشغيل، ولا يمكن تشغيل الملف مباشرة في المعالج CPU ونحتاج الى مفسر او مترجم يعمل مثل جهاز افترضي (virtual machine) يقوم بترجمة الاوامر الى لغة الآلة وتنفيذها في كل مرة نشغل فيها البرنامج، ولذلك تطبيقات هذه اللغات أبطأ في التنفيذ احياناً، ولكن برامجها غير مقيدة بنوع المعالج او نظام التشغيل (OS).
[صورة مرفقة: PJME67T.png]
تنقسم الهندسة العكسية لبرامج الكمبيوتر الى 3 اقسام:
  1. Software: حيث يتم عكس اكواد البرنامج المكتوبة بلغة الألة (binary) عن طريق برامج disassembler ويتم اعادتها الى لغة عالية المستوى او حتى لغة الاسمبلي ويمكن لبعض البرامج إعادة إنشاء الكود الأصلي بدقة عالية وقد لا تطابق إعادة التحويل الكود الأصلي بشكل كامل، خاصة في حالة وجود تعليمات برمجية معقدة.
  2. Hardware: في بعض الاحيان يتم الوصول الى اكواد البرنامج من العتاد (المعالج او الذاكرة او ناقل البيانات) بمساعدة اجهزة وبرامج وتتطلب هذه العملية خبرات متقدمة.
  3. Analysis: نقوم بتحليل سلوك البرنامج، ملاحظين ما يفعل، وكيف يتفاعل مع المستخدم، وما هي البيانات التي يعالجها، تم نستخدم أدوات متخصصة لمراقبة حركة البيانات، وتتبع مسار التنفيذ، وفهم كيفية تفاعل البرنامج مع العتاد ومحاولة إنتاج تطبيق مستقل يحاكي نفس سلوك التطبيق الأصل، ويتم حتى مراقبة حركة البيانات والحزم في النواقل (Data Bus) والشبكة ومحاولة اعادة انتاج بروتكول معين (Protocols).
اصبحت عملية تفكيك الكود (Decompilation) اصعب بسبب عمليات الحماية مثل التشفير والتشويش، لذلك يتم الاتجاه في بعض الحالات الى كسر الحماية عن طريق الوصول الى Native code وهو الكود الغير مشفر أثناء تنفيذه في CPU او memory، ومع ذلك فإن 97% من التطبيقات البرمجية تحتوي على ثغرات أمنية ويمكن فك الملف الثنائي او (Byte-code) والوصول الى كود المصدر.

معلومة: اول عملية هندسة عكسية تمت لنظام BIOS الذي صممته شركة IBM.

ما الفائدة من الهندسة العكسية ؟
  • استرجاع تعليمات البرامج القديمة التي لا يوجد لها (Source code) للحفاظ على التوافق مع الأنظمة الجديدة.
  • كسر حماية التطبيقات، وللحصول على البرامج التجارية مجاناً.
  • دراسة الفيروسات والبرامج الضارة وايجاد ثغرات لايقافها وازالتها.
  • تحليل برامج مكافحة الفيروسات لفهم كيفية عملها، مما يمكننا من تحسينها أو إيجاد طرق للتهرب منها.
  • تقييم جودة البرامج وقوتها وأمنها (البحث عن الثغرات الأمنية).
  • فهم وتعلم كيفية عمل برنامج معين.
  • إضافة وظائف إلى البرامج الموجودة عن طريق برامج resource editor.
ماهو المطلوب لمتابعة دورة الهندسة العكسية ؟
الهندسة العكسية تتطلب منك تعلم لغة الاسمبلي assembly وأن تعرف قليلاً على لغة الآلة machine واذا اردت ان تكون محترفاً يجب عليك فهم عمل المعالج والذاكرة والنواقل Bus يعني تحتاج دورة في (Computer architecture) ويلزمك ان تتعلم بعض خوارزميات التشفير والضغط واكتشاف وتصحيح الاخطاء يعني تحتاج دورة في (Information theory) ويلزمك ان تتعلم عن انظمة التشغيل مثل: انظمة الملفات وإدارة العمليات والذاكرة يعني دورة في (Operating systems) بعد ذلك يلزمك تعلم ادوات الهندسة العكسية مثل: IDA Pro و Ghidra و Radare2 ومع الممارسة ستصبح محترف.
 نصائح مهمة
  • ابدأ ببساطة: لا تحاول تعلم كل شيء عن الهندسة العكسية في وقت واحد. ابدأ ببساطة وقم ببناء مهاراتك تدريجياُ.
  • مارس بانتظام: أفضل طريقة لتعلم الهندسة العكسية هي الممارسة بانتظام. حاول تطبيق ما تعلمته على برامج جديدة كل يوم.
  • لا تستسلم: تعلم الهندسة العكسية عملية صعبة وتتطلب الكثير من الصبر والمثابرة. لا تستسلم إذا واجهت صعوبات في البداية.

الدرس الثاني سنشرح فيه ادوات الهندسة العكسية.

تحياتي: إيهاب ازطّاف، يفرن، ليبيا



RE: دورة الهندسة العكسية من الصفر حتى الاحتراف - ehab85 - 07-04-2021

الدرس الثاني - أ

شرح مفاهيم الهندسة العكسية للبرمجيات

أ. تعريفات مهمة للمبتدئين:
1. ملف (Byte-code): هو ملف يحتوي على تعليمات برمجية تم تحويلها من لغة برمجة عالية المستوى إلى لغة آلة يمكن للكمبيوتر فهمها وتنفيذها مباشرة.
2. ملف (Binary-code): هو ملف يحتوي على تعليمات برمجية بلغة الآلة تم تحويلها من لغة برمجة عالية المستوى إلى سلسلة من الأرقام الثنائية (0 و 1) يمكن للكمبيوتر فهمها وتنفيذها مباشرة.
3. Compilation: هي عملية تحويل لغة برمجة عالية المستوى (مثل C++ أو Java) إلى لغة الآلة. يتم ذلك باستخدام مترجم (Compiler) يقوم بترجمة كل سطر من كود المصدر إلى تعليمات لغة الآلة.
 4. Compiler: هو برنامج يقوم بتحويل كل سطر من كود المصدر (Source code) المكتوب بلغة برمجة عالية المستوى (مثل C++ أو Java) إلى ملف (Byte-code) أو (Binary-code) يمكن للكمبيوتر فهمه وتنفيذه مباشرة وتسمى هذه العملية باسم Compilation.
  • GCC و Clang و MinGW وCygwin وهذه تستخدم لتحويلل لغة C و C++ وغيرها الى لغة الآلة.
5. Interpreter: هو برنامج ينفذ تعليمات لغة برمجة عالية المستوى مباشرة سطراً بسطر دون الحاجة إلى تحويلها إلى ملف (Byte-code) أو (Binary-code) أولاً، ومن اشهر المترجمات:
  • Python interpreter
  • Java Virtual Machine
  • Ruby
  • Perl
  • JavaScript
  • PHP
  • Bash
6. Assembler: هو برنامج يقوم بتحويل لغة التجميع (Assembly language) إلى لغة الآلة (Machine code) التي يمكن للكمبيوتر فهمها وتنفيذها وتسمى هذه العملية باسم Assembling.
وهذه ادوات تستخدم لتجميع تعليمات البرمجة المكتوبة بلغة Assembly إلى ملف (Binary-code) وكلها تدعم معمارية معالجات Intel x86.
  • MASM (Microsoft Macro Assembler): هو مجمع لتطوير البرمجيات تم نشره بواسطة شركة Borland في عام 1989 وتدعم  MS-DOS و Microsoft Windows.
  • FASM: اختصار لعبارة (Flat Assembler) وهو مجمع يدعم معماريات الكمبيوتر IA-32 و x86-64.
  • NASM: اختصار لعبارة (The Netwide Assembler) وهو مجمع ومفكك يمكن استخدامه لكتابة برامج للتنفيذ مباشرة من قبل الأجهزة.
  • TASM: اختصار لعبارة (Turbo Assembler) وهو مجمع لتطوير البرمجيات نشرته شركة Borland في عام 1989.
  • GAS: اختصار لعبارة (GNU Assembler) هو مجمع مفتوح المصدر يستخدم في مشروع GNU، يدعم معالجات x86 ومعماريات أخرى مدعومة بواسطة GNU.
  • SPASM: هو مجمع للمعالجات x86.
  • YASM: اختصار لعبارة (Yet Another Assembler) وهو مجمع مفتوح المصدر يدعم معماريات متنوعة.
  • AS (Portable Macro Assembler): هو مجمع محمول، ويمكن استخدامه على مختلف أنظمة التشغيل.
7. PE header: هو جزء من ملف (Binary-code) يحتوي على معلومات حول الملف، مثل اسم الملف، ونوع الملف، ونقطة الدخول، ومعلومات عن الذاكرة.
8. Patch: هو تحديث لبرنامج لإصلاح خطأ أو إضافة ميزة جديدة ويستخدم برنامج يسمى Patcher لتطبيق Patch على برنامج آخر.
9. Hacking: هو عملية اختراق نظام كمبيوتر أو شبكة للوصول إلى بيانات أو وظائف غير مصرح الوصول لها ويعرف الاشخاص الذين يقومون بهذا الاختراق باسم Hackers ومن أشهر البرامج المستخدمة: Nmap و Metasploit و Wireshark و John the Ripper و Aircrack-ng و Burp Suite و Social Engineering Toolkit.
10. ​​​​Cracking: هو عملية كسر حماية برنامج للوصول إلى وظائفه و بياناته و تغييرها ويعرف الاشخاص الذين يقومون بهذا باسم Crackers ويستخدمون ادوات وبرامج سنذكرها لاحقاً.
11. Assimilation: عملية دمج برنامج مع برنامج آخر لإنشاء برنامج جديد.

 ب. أدوات الهندسة العكسية:
 
ماهي الادوات المستخدمة في الهندسة العكسية ؟
لتصبح خبير في أمن المعلومات والهندسة العكسية تحتاج إلى معرفة الأدوات المستخدمة فيها وكيفية عملها. وفيما يلي شرح لانواعها.

1. Disassemblers / Decompilers
هي ادوات تقوم بتحويل ملف (Byte-code) او ملف (Binary-code) من لغة الآلة في حالة اللغات التي تستخدم Assembler او compiler او Interpreter الى احدى لغات البرمجة ذات المستوى الأعلى سواء الثاني او الثالث مثل: Assembly او C++ او Java او Delphi او C وذلك حسب امكانية البرنامج وهناك برامج متخصصة في إعادة الكود الى لغة معينة.

تقوم هذا البرامج باستعادة الأوامر والبيانات والوظائف والسلاسل النصية والمتغيرات التي تم تمريرها الى لغة برمجة يمكن للانسان فهمها يعني انها تقوم بعكس عملية Assembler و Compilation ومن أشهر هذه الادوات:

▣ Disassemblers: هو برنامج يقوم بتحويل لغة الآلة إلى لغة الاسمبلي.
  • IDA Pro: أداة مدفوعة تستخدم لتحويل ملف (Binary code) الى لغة الأسمبلي وتدعم بشكل متقدم ملفات PE و ELF و Mach-O. وتعد خياراً مشهورًا للمهندسين العكسيين ذوي الخبرة وتستخدم لتحليل وفهم سلوك البرنامج.
  • Ghidra: أداة مجانية مفتوحة المصدر لتحليل ملفات (Binary-code) و (Byte-code) تم تطويرها من قبل وكالة الأمن القومي الأمريكية (NSA).
  • redasm: أداة مجانية لتحليل التعليمات البرمجية تدعم ملفات PE و ELF. يُعد خيارًا سهل الاستخدام للمبتدئين.
  • Hiew: أداة مجانية لتحليل التعليمات البرمجية تدعم ملفات PE و ELF. يُعد خيارًا قويًا للمهندسين العكسيين ذوي الخبرة.
  • Reko: أداة مفتوحة المصدر لتحليل التعليمات البرمجية تدعم Disassembler لملفات PE و ELF.يعد خياراً سهل الاستخدام مع واجهة رسومية ووظائف قوية.
  • Binary Ninja: يمكنه عرض الكود الثنائي في لغة التجميع.
  • LordPE: يتضمن Disassembler لعرض محتوى ملفات PE في لغة التجميع.
  • JavaSnoop: أداة خاصة بتطبيقات الجافا.
  • Plasma: أداة مفتوحة المصدر لتحليل التعليمات البرمجية تدعم ملفات PE. يعد Plasma خيارًا خفيف الوزن وسهل الاستخدام للمبتدئين.
  • Radare2: أداة مفتوحة المصدر للهندسة العكسية تدعم ملفات PE و ELF و Mach-O و ARM و MIPS. يعد خياراً سهل الاستخدام مع واجهة رسومية ووظائف قوية لاستعادة الشيفرة المصدري.
  • Plasma: أداة مفتوحة المصدر لتحليل التعليمات البرمجية تدعم ملفات PE. يعد خياراً خفيف الوزن وسهل الاستخدام للمبتدئين.
  • Miasm: أداة مفتوحة المصدر لتحليل التعليمات البرمجية تدعم ملفات PE و ELF. يعد خيارا متقدمًا للمهندسين العكسيين الذين يرغبون في تحليل التعليمات البرمجية على مستوى البايت.
  • Medusa: أداة مفتوحة المصدر لتحليل التعليمات البرمجية تدعم ملفات PE و ELF. تعد خياراً سهل الاستخدام مع واجهة رسومية ووظائف قوية.
▣ Decompilers: تعتبر هذه الأدوات مرحلة متقدمة عن أدوات Disassembler حيث أنها تحاول تحويل لغة التجميع إلى لغة برمجة عالية المستوى أقرب إلى التي يكتبها المطور (مثل C++ أو Java). عملية التحويل هذه أصعب لأنها تحاول استنتاج المنطق الأصلي للبرنامج وليس مجرد ترجمة مباشرة. ومن أمثلته:
  • Hex Rays : اداة مدفوعة متقدمة ومشهورة تستخدم برنامج (IDA Pro).
  • GhIDA:يساعد في استعادة الشيفرة المصدرية من الرمز الثنائي باستخدام IDA Pro أو Ghidra كخدمة عبر REST APIs.
  • JEB Decompiler: أداة مدفوعة لتحليل تدفق التحكم في البرامج وتحليل ملفات (Binary-code) و (Byte-code) وتحويلها إلى لغة برمجة عالية المستوى.
  • Reko: يستخدم لتحليل الملف الثنائي وتحويلة الى Source code.
  • JAD (Java Decompiler): خاص ببرامج المكتوبة بالجافا.
  • Fernflower: أداة مجانية مفتوحة المصدر لإعادة بناء الكود المصدر من ملفات Java bytecode.
  • CFR: أداة مجانية مفتوحة المصدر لإعادة بناء الكود المصدر من ملفات Java class.
  • Jad: أداة تجارية لإعادة بناء الكود المصدر من ملفات Java bytecode وclass.
  • CodePro Analytix: أداة تجارية توفر ميزات متقدمة مثل تحليل تدفق التحكم والكشف عن الثغرات الأمنية وإمكانية إعادة بناء الكود المصدر.
  • Understand: أداة تجارية أخرى توفر ميزات متقدمة مثل تحليل تدفق التحكم والكشف عن الثغرات الأمنية وإمكانية إعادة بناء الكود المصدر.
  • dotPeek: أداة مجانية لتحليل البرامج المُجمّعة لـ .NET، بما في ذلك عرض الكود المصدر وتحليل المراجع وتحديد الوظائف.
  • apktool: أداة مفتوحة المصدر لتحليل تطبيقات Android، بما في ذلك تفكيك البرامج الثنائية واستخراج البيانات وتحليل المكونات.
  • Dex2jar: أداة أساسية في توزيعة كالي لينكس، تسمح بالتحويل من ملفات apk إلى JAR ثم عرض كودها المصدري.
▣ أدوات أخرى:
  • Capstone: مكتبة مفتوحة المصدر لتحليل التعليمات البرمجية. تستخدم من قبل أدوات أخرى مثل Ghidra و Radare2 لفك التجميع.
ملاحظة: بعض الأدوات تدعم وظائف متعددة، مثل IDA Pro و Binary Ninja التي تدعم كل من Disassembling و Decompiling معاً.
 
2- Reskin: هي عملية تغيير المظهر والواجهة الرسومية لبرنامج (GUI) مثل تغيير الألوان والأيقونات والخطوط والتخطيطات، دون تغيير وظائف البرنامج الأساسية وتستخدم الادوات التالية لعمل التعديلات:
  • Resource Hacker
  • Restorator
  • Resource Tuner
  • SkinEdit
  • SkinBuilder
  • ResEdit

3. Debuggers
ادوات تقوم بتحليل الكود أثناء تشغيله وتنفيذه خطوة خطوة وسطر سطر ومتابعة التدفق البرمجي والتفاعل بين الكائنات المختلفة في البرنامج، وإيقافه عند نقاط معينة (Break point) لمعرفة كيفية عمل البرنامج وكيف تتدفق البيانات في الذاكرة وتساعد في تصحيح الأخطاء البرمجية (Bugs) داخل الكود ومعرفة ما به من ثغرات وبعض الادوات تسمح بتغييرر تعليمات معينة في الكود ثم تشغيلها مرة أخرى مع تطبيق هذه التغييرات. والادوات التالية تعتبر قوية لتحليل ملفات (Binary-code) و (Byte-code) وفهم سلوك البرنامج:
  • OllyDbg
  • GDB
  • LLDB
  • Cheat Engine
  • IDA-debugger
  • Immunity Debugger
  • x64dbg
  • Radare2
  • Binary Ninja-Debugger Plugin
  • Windbg
  • Pwndbg
[صورة مرفقة: V2f5AP9.png]

4. Hex editors
هي برامج تسمح بتحرير وعرض مختلف أنواع الملفات بما في ذلك الملفات التنفيذية (Binary-code) و (Byte-code) وكذلك وملفات النصوص والصور وغيرها وتعرضها على شكل (Hexadecimal). وتمكنك من البحث في اكود الملف والنسخ واللصق والحذف والتعديل طبعاً، ومن هذه البرامج:
  • Hiew: يستخدم لعرض وتحرير ملفات البرنامج الثنائي، يعمل كأداة لتحليل الرمز الثنائي.
  • HxD: أداة مجانية.
  • 010 Editor: محرر سداسي عشري قوي يُمكن استخدامه لعرض واستخراج البيانات من الملفات الثنائية..
  • XVI32: أداة مجانية.
  •  UltraEdit
  • HexEdit
  • Notepad++ : يمكن ان تضاف له خاصية عرض وتعديل الملفات الثنائية عبر اضافة (Plugins).
  • WinHex: محرر سداسي عشري يوفر مجموعة واسعة من الأدوات لتطوير نظام ويندوز.
  • Beyond Compare
  • Hex Workshop
  • Imhex.
[صورة مرفقة: 0qi7g.png]
 

5. PE viewers/editors
بدء من Windows NT 3.1 فان كل ملف ثنائي مثل: (acm و ax و cpl و dll, .drv و efi و exe و mui, .ocx و scr و sys و tsp) يحتوي في بدايته على بيانات تخبر محمل نظام التشغيل (OS loader) بكيفية اعداد البرنامج وتهيئته وتعرف هذه الملفات باسم (Portable Executable) واختصارها PE.
 انها تخبر محمل نظام التشغيل بمقدار الذاكرة التي سيتطلبها الملف البرمجي، وما هو دعم مكتبات DLL التي يحتاج البرنامج لاستعارة التعليمات البرمجية منها، كما يحتوي معلومات حول API ومربعات الحوار وما إلى ذلك.
وفي عالم الهندسة العكسية هذه المعلومات حول الملف مهمة للغاية، فمن خلالها نستطيع اكتشاف نوع الملف، وعند تعديل هذه المعلومات تستيطع جعل البرنامج يفعل شيء مختلف عما صمم له في البداية، او عكس البرنامج والعودة لما كان عليه في الأصل (الحماية جعلت الكود صعب الفهم). 

هناك ادوات مختلفة لتعديل وعرض PE Header منها:
  • PE Explorer: أداة مجانية لعرض معلومات ملفات (Binary-code) وتعديلها.
  • CFF Explorer: أداة مدفوعة لعرض معلومات ملفات (Binary-code) وتعديلها.
  • PEiD: أداة مجانية لتحديد نوع ملف (Binary-code)، ومعلومات أخرى مثل وقت التجميع ونسخة المنتج. وهو مفيد لجمع المعلومات الأولية عن ملفات PE.
  • LordPE: برنامج لتحرير ملفات PE (Portable Executable) التي تستخدمها أنظمة تشغيل Windows. يتيح لك LordPE عرض محتوى الملف وتعديله، بما في ذلك الأقسام والعناوين والبيانات.
  • Detect It Easy: أداة يمكنها عرض بعض التعليمات البرمجية في لغة التجميع (Disassembler)، لكن وظيفتها الأساسية هي الكشف عن packers والبرامج الضارة والتحصينات المستخدمة لإخفاء وظائفها الحقيقية. يساعد المهندسين على تحديد نوع الحماية المستخدمة على الملف الثنائي.
  • exeinfo-pe: أداة أخرى توفر معلومات تفصيلية حول ملفات PE، بما في ذلك الأقسام والاستيرادات والتصديرت والإمضاءات الرقمية. يقدم نظرة أعمق على بنية الملف الثنائي.
  • stud-PE: مكتبة برمجية مجانية مفتوحة المصدر مكتوبة بلغة C++ لمناولة ملفات PE. يستخدمه مطورو أدوات الهندسة العكسية الآخرين كأساس لبناء أدوات تحليل أكثر قوة.
معلومة: في نظام يونكس ولينوكس هناك تنسيق او تركيب مشابه للملفات في ويندوز يعرف باسم ELF، واما انظمة IOS و Mac-OS تستخدم تنسيق ملفات MACH-O.
.
[صورة مرفقة: StudPE_1.png]
 


6. أدوات تحليل الذاكرة:
  • Volatility: أداة مفتوحة المصدر لتحليل ذاكرة البرامج قيد التشغيل، بما في ذلك البحث عن الثغرات الأمنية واستخراج البيانات وتحليل العمليات.
  • Sysinternals Suite: مجموعة من الأدوات المجانية من Microsoft لتحليل ذاكرة البرامج قيد التشغيل، بما في ذلك Process Explorer وMemory Explorer وAutoruns.
  • Windbg: أداة مجانية من Microsoft لتحليل ذاكرة البرامج قيد التشغيل، بما في ذلك تصحيح الأخطاء وتتبع التعليمات البرمجية وعرض ذاكرة المكدس.
7. أدوات تحليل الشبكة:
  • Wireshark: أداة مفتوحة المصدر لتحليل حركة الشبكة، بما في ذلك التقاط الحزم وتصفية البيانات وتحليل بروتوكولات الشبكة.
  • tcpdump: أداة سطر الأوامر مفتوحة المصدر لتحليل حركة الشبكة، بما في ذلك التقاط الحزم وتصفية البيانات وعرض البيانات.
  • Fiddler: أداة مجانية لتحليل حركة الشبكة على مستوى HTTP، بما في ذلك التقاط الطلبات والاستجابات وتعديل البيانات.
8. debugging proxy server
هو خادم وكيل يستخدم لتصحيح أخطاء التطبيقات التي تتصل بالإنترنت وهناك برامج تقوم بالتحكم ومراقبة الاتصال وانتقال البيانات بين التطبيقات في جهاز الكمبيوتر (client) والخادم (server) سواء في الشبكة المحلية او الانترنت ومن اشهر هذا الادوات:  Fiddler و Netlimiter.

9. System Monitoring tools
وهناك هي مجموعة ادوات تمكننا من أداء نظام الكمبيوتر وسير تنفيذ الاوامر وتدفق البيانات داخلة عند تشغيل برنامج ما ومعرفة ما يغير التطبيق في النظام؛ هل هناك مفاتيح تسجيل تم إنشاؤها؟ هل هناك ملفات .ini تم إنشاؤها؟ هل تم انشاء عمليات منفصلة، وهذا ادوات تستخدم عادتاً لدراسة البرامج الضارة كالفيروسات ومن أمثلة أدوات مراقبة النظام هي: Procmon و Regshot و Process Explorer و Task Manager و Performance Monitor.

 كوب قهوة وسيجارة  Big Grin
سوف نتحدث عن باقي الادوات في الدرس الثاني - ب

--------------------------------
ملاحظة هامة: الكثير من ادوات الهندسة العكسية اصبحت تقوم بمهام ووظائف متنوعة وتجمعها في برنامج واحد حيث يمكن اضافة Plugin مثل Ret sync التي يمكننا من عمل debugging متزامن وتضاف لمعظم برامج التصحيح، واضافة Lighthouse و ClassInformer و ida-x86emu...وغيرها الكثير.

تحياتي لكم: إيهاب ازطّاف، يفرن، ليبيا



RE: دورة الهندسة العكسية من الصفر حتى الاحتراف - ehab85 - 08-04-2021

الدرس الثاني - ب

ما هو الفرق بين Decompiler و Disassembler ؟

يخلط الكثيرين بين كلمة decompiler و disassembler ويستخدم البعض الكلمتين بالتبادل رغم ان هناك فروق بينهما كما سنبين.
  • Disassembler: يحول الكود البرمجي من لغة الآلة binary الى لغة Assembly والكود يكون اطول واصعب في القراءة من الكود المكتوب باللغات العالية المستوى، لان الاسمبلي لغة من الجيل الثاني ولكنها اسهل وأقصر من لغة الآلة (الجيل الاول) ويستخدم الديسمبلر لتحليل التعليمات البرمجية بشكل تابث (static) يعني بدون تشغيل البرنامج ومن امثلتها اداة: Cutter و hopper و Mocha.
باختصار Disassembler يقوم بعكس ما قام به الـ Assembler.
  • Decompiler: يحول الكود البرمجي من لغة الآلة binary الى (source code) مكتوب بأحدى اللغات العالية المستوى (الجيل الثالث) يستطيع الانسان فهمها مثل: JAVA او C++ او Delphi. ومن امثلة ادوات ديكومبايلر: Hopper و DejaVu و Mocha.
باختصار Decompiler يقوم بعكس ما قام به الـ Compiler


بعض الادوات او البرامج المتوفرة مثل (IDA و JEB ) بها decompiler و disassembler بمعنى تمتلك القدرة على تحويل الكود الى لغات المستوى الثاني والثالث كما تتوفر على خاصية debugging لتحليل الكود وتتبع تدفق البيانات.

ماهو المصحح Debugger ؟
debugging: هو فن البحث عن الأخطاء في البرامج ومعالجتها. تسمح مصححات الأخطاء للمستخدم بعرض حالة تشغيل البرنامج وتغييرها وتمكننا من تتبع سير تنفيذ البرنامج وتدفق البيانات داخل المعالج والذاكرة خطوة بخطوة حيث انه يمتاز بخاصية Breakpoints.

يستخدم المصحح لتحليل التعليمات البرمجية بشكل ديناميكي (dynamic) يعني أثناء عمل البرنامج، ومن امثلتها: gdb, x64dbg.


RE: دورة الهندسة العكسية من الصفر حتى الاحتراف - ehab85 - 15-04-2021

الدرس الثالث- أ

7 - ادوات التشفير وفك التشفير.
نتيجة تعرض البرامج الى عملية Reskin و cracking و decompiler و disassembler لجأ اصحابها الى تشفيرها (encryption) لحماتها من الـ cracker والوصول الى source code او التعديل عليه، وكذلك يقوم الـ Hackers بتشفير برامجهم (الضارة) لمنع محللي البرامج من تفكيكها ومعرفة آلية عملها وتعقيد عملية التحليل الاستقصائي لها، ويوضع كود فك التشفير الذاتي وكذلك فك الضغط الذاتي في (PE header)، ويستخدم لتشفير الكود المصدري أو إخفاءه أو تعديله عدة برامج منها: 

وظائف واستخدامات أدوات حماية البرامج:
 Themida و Enigma Protector و Flare و mrip و PC Guard و Armadillo و ASProtect و PECRYPT32 و CodeCrypt و tElock و NFO و PCPEC و PELOCKnt و PE-PROTECT و PE-Encrypter و VGCrypt و PE password protector و PE-Lock و LameCrpyt.

ملاحظة: ادوات التشفير سالفة الذكر جميعها تهدف للحماية من قرصنة البرامج والهندسة العكسية باخفاء الكود المصدر للبرنامج وجعله صعب التحليل او التعديل، وهي تدعم أنظمة تشغيل Windows و Linux و macOS وتستخدم خوارزميات تشفير واحدة او متعددة من خوارزميات: Blowfish او RC4  او AES او Twofish او Serpent او CAST-128 او RSA و MD5.

معلومة: محللي البرامج والهاكرز المحترفين قادرون على استخدام أدوات متقدمة لتحليل الرأس البرمجي وفك تشفير البيانات.

ما الفرق بين التشفير والحزم والضغط ؟
Compression: هي عملية ضغط البيانات لتقليل حجمها وتوفير مساحة التخزين أو تحسين كفاءة النقل عبر تقليل استهلاك النطاق الترددي (Bandwidth) عند عملية ارسال البيانات في شبكة الانترنت.
الضغط يحول البيانات من شكلها الاصلي الى شكل أخر، ويمكن استعادة شكل البيانات الاصلي بسهولة عن طريق وضع دالة function في الـ Header تقوم بعملية فك ضغط البرنامج تلقائيا عند التشغيل (self-decompressing).

خوارزميات ضغط الملفات؟
  • Huffman Coding
  • LZ77
  • Deflate : هي أحدى خوارزميات ضغط البيانات بدون فقدان فيها ويستخدم مزيجاً من ترميز LZ77 و Huffman.
  • Lempel-Ziv-Storer-Szymanski (LZSS).

Packing: عملية حزم البرامج، هي عبارة عن ضغط او دمج الملفات التنفيذية مثل: EXE و DLL و SYS و SCR بما فيهم من اكواد او بيانات او كليهما، حيث يتم حزم الملف بطريقة تجعله أكثر صعوبة في التحليل أو التعديل بالاضافة الى تحسين أداء الملف التنفيذي. هذا قد يتضمن ضغط البيانات، ولكنه قد يتضمن أيضاً خطوات أخرى مثل التشفير أو التعتيم (Obfuscation) حيث توفر بعض ادوات Packers ميزات حماية إضافية مثل التشفير، لكن هذه الميزات ليست مضمونة بشكل كامل

encryption: وتسمى ايضاً Protection وهي عملية تشفير البيانات، بشكل معقد ليصعب قراءتها ويتطلب فك تشفيرها معرفة مفتاح التشفير، ولكن يمكن للخبراء الوصول الى المفتاح، ويمكن فك تشفير البرنامج بشكل تلقائي عن طريق وضع دالة function في الـ Header تقوم بعملية فك تشفير البرنامج تلقائيا عند التشغيل (self-decrypting).

ملاحظة: قد تستخدم تقنيات packing و encryption و compression معًا. فعادتاً ما يتم تشفير الملف المضغوط (packed) او (compressed)، ويمكن القيام بعكس ذلك وهو ضغط الملف المشفر ولكن عادتاً ما يزداد حجم الملف باستثناء اذا استخدمت ASCII armor وفي packing لم تستخدمها فمن المحتمل ان يكون هناك زيادة معتدلة في الحجم وهناك برامج تقوم بالضغط والتشفير معاً مثل:  PGP/GPG.

NeoLite هي أداة تستخدم لضغط وتقليل حجم ملفات التنفيذ وتحسين أداء البرامج وتشفيرها وتوفير تأمين إضافي. وتعتمد على خوارزمية الضغط والتشفير المخصصة التي تستخدمها للحفاظ على سرية البرنامج.

ينقسم التشفير الى:
أ- التشفير المتماثل: اقل تعقيداً واقل اماناً وسريع لاننا نستخدم فيه مفتاح واحد لتشفير البيانات وفك تشفيرها.
ب: التشفير الغير متماثل: اكثر تعقيداً واكثر اماناً لاننا نستخدم فيه مفتاح خاص للتشفير ومفتاح عام لفك التشفير.
ج: التشفير في اتجاة واحد (التجزئة): حيث يتم انشاء شفرة تابثة (Hash key) وبطول معين لكل خوارزمية مهما كان حجم البيانات ولا يمكن اعادة البيانات المشفرة الى اصلها.

خوارزميات التشفير المتماثل:

هو نظام تشفير يستخدم مفتاحاً واحداً فقط لتشفير وفك تشفير البيانات. ويجب أن يتشارك جميع الأطراف الذين يرغبون في التواصل مع بعضهم البعض نفس المفتاح وهذه قائمة ببعض انواعها:
  • DES
هي خوارزمية تشفير متماثلة تم تطويرها من قبل شركة IBM عام 1974 واستخدمت على نطاق واسع في الماضي، لكنها أصبحت ضعيفة نسبياً بسبب قصر طول المفتاح (56 بت) ولذلك لا ينصح باستخدامها في التطبيقات الجديدة. 
  • Blowfish​​
صممها خبير التشفير Bruce Schneier عام 1993 كبديل لخوارزمية DES وتتميز بقدرتها على تشفير وفك تشفير البيانات بسرعة عالية وتعتمد على شبكة Feistel مع 16 دورة وتعتبر آمنة بشكل معقول، لكن تم اكتشاف بعض الثغرات الأمنية فيها، وتستخدم في تطبيقات مثل: برامج ضغط الملفات، والبريد الإلكتروني، وبروتوكولات الشبكة.
  • Twofish
هو تشفير بلوك متماثل بحجم بلوك 128 بت ومفتاح ذو طول متغير يصل إلى 256 بت وتعد خليفة لخوارزمية Blowfish ويتميز بقدرة عالية على مقاومة الهجمات ويستخدم على نطاق واسع في تطبيقات مختلفة مثل: برامج حماية البيانات وتشفير كلمات المرور.
  • RC4
هي خوارزمية تنتمي إلى التشفير التسلسلي (تشفير تيار، المعروف أيضًا باسم تشفير الدفق) حيث تستخدم لتشفير البيانات بشكل متسلسل، بت تلو الآخر. وتتميز بسهولة التنفيذ وسرعتها العالية، وتستخدم في العديد من التطبيقات مثل بروتوكول WPA2 لتشفير اتصالات Wi-Fi ولكن تم اكتشاف بعض الثغرات الأمنية فيها، مما أدى إلى تراجع استخدامها.
  • AES
هو تشفير بلوك متماثل يمكنه تشفير وفك تشفير المعلومات يستخدم خوارزمية Rijndael ويعد من أكثر خوارزميات التشفير أماناً واعتمد من قبل المعهد الوطني للمعايير والتكنولوجيا (NIST) كمعيار لتشفير البيانات عام 2001، ويستخدم على نطاق واسع في تطبيقات مختلفة مثل: تشفير البيانات على الأقراص الصلبة، وتطبيقات الاتصالات، وبرامج مكافحة الفيروسات.

XOR: هي عملية منطقية (Boolean) تستخدم على نطاق واسع في التشفير حيث تقارن بين بتين من البيانات وتنتج 1 إذا كانا مختلفين و 0 إذا كانا متطابقين وتستخدم هذه العملية في العديد من خوارزميات التشفير مثل RC4 و AES.

خوارزميات التشفير الغير متماثل:

هو نظام تشفير يستخدم مفتاحين مختلفين: مفتاح عام ومفتاح خاص. يستخدم المفتاح العام لتشفير البيانات، بينما يُستخدم المفتاح الخاص لفك تشفيرها. يمكن لأي شخص الحصول على المفتاح العام، ولكن لا يمكن لأحد فك تشفير البيانات دون استخدام المفتاح الخاص.
  • Elliptic Curve Digital Signature Algorithm (ECDSA):
 تقدم خوارزمية توقيع المنحنى الإهليجي أمان عالي لانها تعتمد على مشكلة لوغاريتم المنحنى الإهليلجي المنفصل (ECDLP) التي تعد صعبة الحل، وهي تتطلب حجم مفتاح أصغر من RSA، وتوقع وتحقق التوقيعات يتم بسرعة أكبر من RSA مما يجعلها مناسبة للأجهزة ذات الموارد المحدودة، ولكن من عيوبها قابلية التعرض لهجمات القنوات الجانبية إذا تمكن المهاجم من مراقبة عملية التوقيع.
  • Rivest-Shamir-Adleman (RSA) 
تقدم امان عالي لانها تعتمد على مشكلة تحليل العوامل الاولية، وهي مشكلة صعبة الحل. وتمتاز بقابلية التكيف حيث يمكن استخدامها في العديد من التطبيقات، مثل التشفير والتوقيع الرقمي. وتستخدم بشكل واسع من قبل معظم البرامج والتطبيقات. ولكن من عيوبها ان حجم المفتاح أكبر من ECDSA، مما يجعلها أقل كفاءة. كما ان انها أبطأ حيث تتطلب وقت أطول لتوقيع وتحقق التوقيعات من ECDSA.
  • Pretty Good Privacy (PGP)
تتميز بأنها خوارزمية مفتوحة المصدر ويمكن استخدامها لتشفير البريد الإلكتروني والملفات وسهلة الاستخدام نسبياً مقارنة بخوارزميات أخرى، ولكن من عيوبها ان إدارة مفاتيح التشفير معقدة وتتم بشكل يدوي وايضا قد تتعرض لخطر استخدام هجمات القوة الغاشمة لكسر التشفير.

خوارزميات التجزئة (Hashing)؟

تستخدم في عملية البحث وتخزين البيانات مثل كلمات السر وفي المصادقة (التوقيع الرقمي او البصمة الالكترونية) للتأكد من الهوية او التأكد من عدم تغيير الملفات والبيانات والتلاعب بها وتنتج خورازميات التجزئة كود يسمى (Hash key) يكون بحجم تابث من 128 بت  إلى 512 بت حسب نوع الخوارزمية المستخدمة.
  • ASH - ASH-1. ASH-2. ASH-3
  • RIPEMD-160
  • BLAKE2
  • MD5



RE: دورة الهندسة العكسية من الصفر حتى الاحتراف - Spolaya Molaya - 18-04-2021

(15-04-2021, 06:00 AM)ehab85 كتب : خوارزميات التجزئة (Hashing)؟
  • Deflate

  • Huffman Coding

  • LZ77

هذه خاصة بالضغط compression
الموضوع به الكثير من المعلومات غير الدقيقة


RE: دورة الهندسة العكسية من الصفر حتى الاحتراف - G6666K - 19-10-2023

"هل يمكنك أن تظهر لنا كيفية التغلب على هذا التحدي، أو هل هناك دورات متاحة لذلك؟". 



خوارزميات التشفير المتماثل:
  • Advanced Encryption Standard (AES)
  • Blowfish 
  • Twofish 
  • Rivest Cipher (RC4)
  • Data Encryption Standard (DES)
خوارزميات التشفير الغير متماثل:
  • Elliptic Curve Digital Signature Algorithm (ECDSA)
  • Rivest-Shamir-Adleman (RSA) 
  • Diffie-Hellman
  • Pretty Good Privacy (PGP)



RE: دورة الهندسة العكسية من الصفر حتى الاحتراف - ehab85 - 19-03-2024

ياريت ادارة المنتدى تمكني من التعديل لتصحيح بعض الاخطاء وتعديل روابط الصور وزيادة التوضيح للكلام الذي يمكن ان يحدث فيه التباس.


RE: دورة الهندسة العكسية من الصفر حتى الاحتراف - M!X0R - 20-03-2024

(19-03-2024, 05:48 PM)ehab85 كتب : ياريت ادارة المنتدى تمكني من التعديل لتصحيح بعض الاخطاء

تم تلبية طلبك victory


RE: دورة الهندسة العكسية من الصفر حتى الاحتراف - A14A14 - 20-03-2024

السلام عليكم ممكن شرح لغة الاسمبلي المختصة بالهندسة العكسية فقط وليس شرح جميع اللغة


RE: دورة الهندسة العكسية من الصفر حتى الاحتراف - Str0x - 21-03-2024

Salam
إقتباس :ممكن شرح لغة الاسمبلي المختصة بالهندسة العكسية فقط

((( إقرأ ))) الكتاب الأول و الثاني بالإضافة إلى الأعداد 9 للمجلة

بعدما تنهي ((( القراءة ))) هناك صفحة و إسطوانتين للمبتدئين

بالتوفيق.