تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
دورة الهندسة العكسية من الصفر حتى الاحتراف
#1
الدرس الأول:
ما هي الهندسة العكسية؟

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

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

ما الفائدة من الهندسة العكسية ؟
  • استرجاع تعليمات البرامج القديمة التي لا يوجد لها (Source code).
  • كسر حماية التطبيقات، وللحصول على البرامج التجارية مجانًا.
  • دراسة الفيروسات والبرامج الضارة.
  • تقييم جودة البرامج وقوتها وأمنها.
  • إضافة وظائف إلى البرامج الموجودة عن طريق برامج resource editor.
ماهو المطلوب لمتابعة دورة الهندسة العكسية ؟
لتكون محترف يجب عليك تعلم لغة الاسمبلي assembly وتعرف قليلاً على لغة الآلة machine وكذلك فهم عمل المعالج والذاكرة والنواقل Bus يعني تحتاج دورة في (Computer architecture) بعد ذلك يلزمك تعلم ادوات الهندسة العكسية ومع الممارسة ستصبح محترف.

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

تحياتي: إيهاب ازطّاف
أعضاء أعجبوا بهذه المشاركة : Polia , EarthMan123 , samoray , the9am3 , fantazma , muhmath2002 , PowerUser , Tareq.a , BKRTN , vosiyons
#2
الدرس الثاني - أ
ماهي الادوات المستخدمة في الهندسة العكسية ؟
لتصبح خبير في أمن المعلومات والهندسة العكسية تحتاج إلى معرفة الأدوات المستخدمة وكيفية عملها. وفيما يلي شرح لانواعها.

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

تقوم هذا البرامج باستعادة الأوامر والبيانات والوظائف والسلاسل النصية والمتغيرات التي تم تمريرها الى لغة برمجة يمكن للانسان فهمها يعني انها تقوم بعكس عملية Assembler و Decompilation ومن أشهر هذه الادوات IDA و Ghidra و Capstone و Plasma و Miasm لبايثون و Medusa و redasm  و Hiew واما Reko و Hex Rays تقوم بعملية decompiler فقط.

2. Debuggers
هي ادوات تقوم بتحليل الكود وتنفيذه خطوة خطوة وسطر سطر لمعرفة كيفية عمل البرنامج وكيف تتدفق البيانات وتساعد في معرفة اخطاء البرنامج وما به من ثغرات وبعض الادوات تسمح بتغييرر تعليمات معينة في الكود ثم تشغيلها مرة أخرى مع تطبيق هذه التغييرات. ومن أهم هذه الادوات: X64dbg و Windbg و Ollydbg و Pwndbg.
.
[صورة مرفقة: V2f5AP9.png]

3. Hex editors
تتيح لك هذه الادوات عرض ملف binary على شكل Hexadecimal وتمكنك من البحث في اكود الملف والنسخ واللصق والحذف.
ومن هذه البرامج Hex Workshop و Imhex و Radare2.
.
[صورة مرفقة: Hex-Editor-Neo-1-1024x785.png]

4. 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 منها: CFF Explorer و Binary Ninja و LordPE و Detect It Easy و PEID و exeinfo-pe و stud-PE.

معلومة: في نظام يونكس ولينوكس هناك تنسيق او تركيب مشابه للملفات في ويندوز يعرف باسم ELF، واما انظمة IOS و Mac-OS تستخدم تنسيق ملفات MACH-O.
[صورة مرفقة: StudPE_1.png]
 


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

6. debugging proxy server
هي برامج تقوم بالتحكم ومراقبة الاتصال وانتقال البيانات بين التطبيقات في جهاز الكمبيوتر (client) والخادم (server) سواء في الشبكة المحلية او الانترنت ومن اشهر هذا الادوات:  Fiddler و Netlimiter.

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

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

تحياتي لكم: إيهاب ازطّاف، يفرن، ليبيا
أعضاء أعجبوا بهذه المشاركة : samoray , the9am3 , fantazma , EarthMan123 , ashrafonlinenow , muhmath2002 , PowerUser , Tareq.a , BKRTN
#3
الدرس الثاني - ب

ما هو الفرق بين decompiler و disassembler ؟

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

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

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

يستخدم المصحح لتحليل التعليمات البرمجية بشكل ديناميكي (dynamic) يعني أثناء عمل البرنامج، ومن امثلتها: gdb, x64dbg.
أعضاء أعجبوا بهذه المشاركة : the9am3 , PowerUser , Tareq.a , EarthMan123 , BKRTN , samoray
#4
الدرس الثاني - ج

7 - ادوات التشفير وفك التشفير.
نتيجة تعرض البرامج الى عملية Reskin و cracking و decompiler و disassembler لجاء اصحابها الى تشفيرها (encryption) لحماتها من cracker والوصول الى source code او التعديل عليه، ويقوم الـ Hackers بتشفير برامجهم (الضارة) لمنع محللي البرامج من تفكيكها ومعرفة آلية عملها، ويوضع كود فك التشفير الذاتي وكذلك فك الضغط الذاتي في (PE header)، ويستخدم للتشفير عدة برامج منها mrip و PC Guard و Armadillo و ASProtect و PECRYPT32 و CodeCrypt و tElock و NFO و PCPEC و PCPEC و PELOCKnt و PE-PROTECT و PE-Encrypter و VGCrypt  و PE password protector و PE-Lock و LameCrpyt.

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

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

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

ينقسم التشفير الى:
1- التشفير المتماثل: اقل تعقيداً واقل اماناً وسريع لاننا نستخدم فيه مفتاح واحد لتشفير البيانات وفك تشفيرها.
ب: التشفير الغير متماثل: اكثر تعقيداً واكثر اماناً لاننا نستخدم فيه مفتاح خاص للتشفير ومفتاح عام لفك التشفير.

خوارزميات التشفير المتماثل:
  • 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)
خوارزميات التجزئة (Hashing)؟
  • Deflate
  • Huffman Coding
  • LZ77
8- ادوات Packing/ Unpacking.
Packing: هي عملية ضغط ملف exe بما فيها البيانات وعملية فك الضغط تتم من قبل نفس ملف exe المضغوط، وهناك عدة برامج تسمى packers تقوم بهذا مثل: NeoLite و PECompact و UPX و Shrinker و PKLite32 و AS-Pack و AS-Pack و WWPack 32 و PEBundle و Crunch و Fusion و PE-PaCK و PE Diminisher.

ما الهذف من هذه العملية ؟
  1. التقليل من حجم الملف التنفيذي exe.
  2. اخفاء البيانات وتعتيمها، خاصة في حالة البرامج الضارة لمنع اكتشافها.
Unpacking: هي عكس عملية packing، حيث تقوم دالة فك الضغط باستعادة البيانات الاصلية من ملف exe وتستخدم اداة OllyDbg مع اضافة OllyDump لفعل ذلك بشكل يدوي، وفي بعض الحالات يكفي فتح الملف بـاداة Pe.explorer وحفظة.
 
[صورة مرفقة: 021313_0105_UnpackingRe5.png]

كيف نعرف اذا البرنامج packed او لا، وكيف نحدد نوعه؟
نستطيع اكتشاف نوع لغة البرمجة التي كتب بها البرنامج، وكذلك نوع اداة التشفير التي استخدمت لتشفير البرنامج، عن طريق احد ادوات فحص PE مثل اداة: exeinfo pe او PEiD او Detect It Easy او RDG Packer Detector او FastScanner.
 
[صورة مرفقة: 021313_0105_UnpackingRe2.png]

ينقسم فك الحماية إلى:
أ- الفك الآلي: باستخدام برامج تقوم بشكل آلي بفك تشفير وبالتالي توفر عليك الجهد والوقت ولا تتطلب معرفة بطرق التشفير وفكها، وكل اداة متخصصة في فك تشفير معين.
ب- الفك اليدوي: تتطلب منك معرفة وجهد ووقت وصبر وهناك العديد من الطرق والبرامج المساعدة في محاولة كسر التشفير منها Olly.

ملاحظة: يمكن استخدام HexEditor الذي يمكنك من تحرير (تعديل) البرنامج مباشرة دون أي عوائق، كما يمكنك إستخدامه للكتابة على البرامج المشفرة لأنها تكون محمية من التعديل عليها، ويمكنك زرع الاكواد التي تريد.

هناك طرق آخرى مستخدمة في تجاوز حماية البرامج منها تفريغ الذاكرة (Memory dump) او فك الجهاز وتوصيل اسلاك الى المعالج او الذاكرة للوصول الى البيانات بصيغتها الغير مشفرة وقراءتها عن طريق برنامج متبث في كمبيوتر يقوم باعادة بناء البرنامج.

مازلنا لم نكمل موضوع التشفير... انتظرونا
أعضاء أعجبوا بهذه المشاركة : EarthMan123 , the9am3 , muhmath2002 , fantazma , PowerUser , samoray
#5
(15-04-2021, 06:00 AM)ehab85 كتب : خوارزميات التجزئة (Hashing)؟
  • Deflate

  • Huffman Coding

  • LZ77

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


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


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