الدرس الثاني - أ
شرح مفاهيم الهندسة العكسية للبرمجيات
أ. تعريفات مهمة للمبتدئين:
1. ملف (Byte-code): هو ملف يحتوي على تعليمات برمجية تم تحويلها من لغة برمجة عالية المستوى إلى لغة آلة يمكن للكمبيوتر فهمها وتنفيذها مباشرة.
2. ملف (Binary-code): هو ملف يحتوي على تعليمات برمجية بلغة الآلة تم تحويلها من لغة برمجة عالية المستوى إلى سلسلة من الأرقام الثنائية (0 و 1) يمكن للكمبيوتر فهمها وتنفيذها مباشرة.
3. Compilation: هي عملية تحويل لغة برمجة عالية المستوى (مثل C++ أو Java) إلى لغة الآلة. يتم ذلك باستخدام مترجم (Compiler) يقوم بترجمة كل سطر من كود المصدر إلى تعليمات لغة الآلة.
4. Compiler: هو برنامج يقوم بتحويل كل سطر من كود المصدر (Source code) المكتوب بلغة برمجة عالية المستوى (مثل C++ أو Java) إلى ملف (Byte-code) أو (Binary-code) يمكن للكمبيوتر فهمه وتنفيذه مباشرة وتسمى هذه العملية باسم Compilation.
وهذه ادوات تستخدم لتجميع تعليمات البرمجة المكتوبة بلغة Assembly إلى ملف (Binary-code) وكلها تدعم معمارية معالجات Intel x86.
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: هو برنامج يقوم بتحويل لغة الآلة إلى لغة الاسمبلي.
2- Reskin: هي عملية تغيير المظهر والواجهة الرسومية لبرنامج (GUI) مثل تغيير الألوان والأيقونات والخطوط والتخطيطات، دون تغيير وظائف البرنامج الأساسية وتستخدم الادوات التالية لعمل التعديلات:
شرح مفاهيم الهندسة العكسية للبرمجيات
أ. تعريفات مهمة للمبتدئين:
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++ وغيرها الى لغة الآلة.
- Python interpreter
- Java Virtual Machine
- Ruby
- Perl
- JavaScript
- PHP
- Bash
وهذه ادوات تستخدم لتجميع تعليمات البرمجة المكتوبة بلغة 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): هو مجمع محمول، ويمكن استخدامه على مختلف أنظمة التشغيل.
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. تعد خياراً سهل الاستخدام مع واجهة رسومية ووظائف قوية.
- 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 لفك التجميع.
2- Reskin: هي عملية تغيير المظهر والواجهة الرسومية لبرنامج (GUI) مثل تغيير الألوان والأيقونات والخطوط والتخطيطات، دون تغيير وظائف البرنامج الأساسية وتستخدم الادوات التالية لعمل التعديلات:
- Resource Hacker
- Restorator
- Resource Tuner
- SkinEdit
- SkinBuilder
- ResEdit
3. Debuggers
ادوات تقوم بتحليل الكود أثناء تشغيله وتنفيذه خطوة خطوة وسطر سطر ومتابعة التدفق البرمجي والتفاعل بين الكائنات المختلفة في البرنامج، وإيقافه عند نقاط معينة (Break point) لمعرفة كيفية عمل البرنامج وكيف تتدفق البيانات في الذاكرة وتساعد في تصحيح الأخطاء البرمجية (Bugs) داخل الكود ومعرفة ما به من ثغرات وبعض الادوات تسمح بتغييرر تعليمات معينة في الكود ثم تشغيلها مرة أخرى مع تطبيق هذه التغييرات. والادوات التالية تعتبر قوية لتحليل ملفات (Binary-code) و (Byte-code) وفهم سلوك البرنامج:
ادوات تقوم بتحليل الكود أثناء تشغيله وتنفيذه خطوة خطوة وسطر سطر ومتابعة التدفق البرمجي والتفاعل بين الكائنات المختلفة في البرنامج، وإيقافه عند نقاط معينة (Break point) لمعرفة كيفية عمل البرنامج وكيف تتدفق البيانات في الذاكرة وتساعد في تصحيح الأخطاء البرمجية (Bugs) داخل الكود ومعرفة ما به من ثغرات وبعض الادوات تسمح بتغييرر تعليمات معينة في الكود ثم تشغيلها مرة أخرى مع تطبيق هذه التغييرات. والادوات التالية تعتبر قوية لتحليل ملفات (Binary-code) و (Byte-code) وفهم سلوك البرنامج:
- OllyDbg
- GDB
- LLDB
- Cheat Engine
- IDA-debugger
- Immunity Debugger
- x64dbg
- Radare2
- Binary Ninja-Debugger Plugin
- Windbg
- Pwndbg
4. Hex editors
هي برامج تسمح بتحرير وعرض مختلف أنواع الملفات بما في ذلك الملفات التنفيذية (Binary-code) و (Byte-code) وكذلك وملفات النصوص والصور وغيرها وتعرضها على شكل (Hexadecimal). وتمكنك من البحث في اكود الملف والنسخ واللصق والحذف والتعديل طبعاً، ومن هذه البرامج:
هي برامج تسمح بتحرير وعرض مختلف أنواع الملفات بما في ذلك الملفات التنفيذية (Binary-code) و (Byte-code) وكذلك وملفات النصوص والصور وغيرها وتعرضها على شكل (Hexadecimal). وتمكنك من البحث في اكود الملف والنسخ واللصق والحذف والتعديل طبعاً، ومن هذه البرامج:
- Hiew: يستخدم لعرض وتحرير ملفات البرنامج الثنائي، يعمل كأداة لتحليل الرمز الثنائي.
- HxD: أداة مجانية.
- 010 Editor: محرر سداسي عشري قوي يُمكن استخدامه لعرض واستخراج البيانات من الملفات الثنائية..
- XVI32: أداة مجانية.
- UltraEdit
- HexEdit
- Notepad++ : يمكن ان تضاف له خاصية عرض وتعديل الملفات الثنائية عبر اضافة (Plugins).
- WinHex: محرر سداسي عشري يوفر مجموعة واسعة من الأدوات لتطوير نظام ويندوز.
- Beyond Compare
- Hex Workshop
- Imhex.
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 منها:
.
بدء من 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. يستخدمه مطورو أدوات الهندسة العكسية الآخرين كأساس لبناء أدوات تحليل أكثر قوة.
.
6. أدوات تحليل الذاكرة:
- Volatility: أداة مفتوحة المصدر لتحليل ذاكرة البرامج قيد التشغيل، بما في ذلك البحث عن الثغرات الأمنية واستخراج البيانات وتحليل العمليات.
- Sysinternals Suite: مجموعة من الأدوات المجانية من Microsoft لتحليل ذاكرة البرامج قيد التشغيل، بما في ذلك Process Explorer وMemory Explorer وAutoruns.
- Windbg: أداة مجانية من Microsoft لتحليل ذاكرة البرامج قيد التشغيل، بما في ذلك تصحيح الأخطاء وتتبع التعليمات البرمجية وعرض ذاكرة المكدس.
- Wireshark: أداة مفتوحة المصدر لتحليل حركة الشبكة، بما في ذلك التقاط الحزم وتصفية البيانات وتحليل بروتوكولات الشبكة.
- tcpdump: أداة سطر الأوامر مفتوحة المصدر لتحليل حركة الشبكة، بما في ذلك التقاط الحزم وتصفية البيانات وعرض البيانات.
- Fiddler: أداة مجانية لتحليل حركة الشبكة على مستوى HTTP، بما في ذلك التقاط الطلبات والاستجابات وتعديل البيانات.
هو خادم وكيل يستخدم لتصحيح أخطاء التطبيقات التي تتصل بالإنترنت وهناك برامج تقوم بالتحكم ومراقبة الاتصال وانتقال البيانات بين التطبيقات في جهاز الكمبيوتر (client) والخادم (server) سواء في الشبكة المحلية او الانترنت ومن اشهر هذا الادوات: Fiddler و Netlimiter.
9. System Monitoring tools
وهناك هي مجموعة ادوات تمكننا من أداء نظام الكمبيوتر وسير تنفيذ الاوامر وتدفق البيانات داخلة عند تشغيل برنامج ما ومعرفة ما يغير التطبيق في النظام؛ هل هناك مفاتيح تسجيل تم إنشاؤها؟ هل هناك ملفات .ini تم إنشاؤها؟ هل تم انشاء عمليات منفصلة، وهذا ادوات تستخدم عادتاً لدراسة البرامج الضارة كالفيروسات ومن أمثلة أدوات مراقبة النظام هي: Procmon و Regshot و Process Explorer و Task Manager و Performance Monitor.
كوب قهوة وسيجارة
سوف نتحدث عن باقي الادوات في الدرس الثاني - ب
--------------------------------
ملاحظة هامة: الكثير من ادوات الهندسة العكسية اصبحت تقوم بمهام ووظائف متنوعة وتجمعها في برنامج واحد حيث يمكن اضافة Plugin مثل Ret sync التي يمكننا من عمل debugging متزامن وتضاف لمعظم برامج التصحيح، واضافة Lighthouse و ClassInformer و ida-x86emu...وغيرها الكثير.
تحياتي لكم: إيهاب ازطّاف، يفرن، ليبيا