تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
0.6 اعاده برمجه المثال 0.4 عن طريق Visual Studio وعمل التتبع والباتشينك
#1
[صورة مرفقة: dark.jpg]
 رحلة في عالم الهندسة العكسية  Heart
 
https://www.youtube.com/playlist?list=PL...Moshvgu35x

# الفصل 0 : تمهيد


اعاده برمجه المثال 0.4 عن طريق Visual Studio وعمل التتبع والباتشينك

الآن سأقوم بإنشاء نفس البرنامج ولكن هذه المرة باستخدام Visual Studio 2022.

تأكد من تحديد x eighty-six وليس x sixty-four.

إذا كنت لا ترى، النافذتين والdisassembly ، والregisters  يمكنك تنشيطها من قائمة تصحيح الأخطاء ثم تحديد التفكيك أو السجلات أو أي نافذة أخرى.

يمكنك أن ترى عندما Step over المسجل EAX نقوم بتغييره إلى القيمة 4.

يمكنك أن ترى أن النتيجة هي برنامج يتم تجميعه باستخدام Microsoft Linker والcompiler  هو Microsoft Visual C++.

يمكننا مقارنة هذا البرنامج المصنوع ب Visual Studio والبرنامج الآخر المصنوع ب MinGW.

الآن سنقوم بفتح البرنامج بـ x sixty-four dbg الإصدارthirty-two bit.

تستطيع أن ترى نقطة الدخول هي هذه الوظيفة "mainCRTStartup"

دالة تحدد عنوان البداية المحدد من قبل المستخدم لملف .exe أو DLL.

مزيد من المعلومات يمكنك العثور عليها في learn.microsoft.com CPP:

سأضغط على زر "step into".

يمكنك العثور على الكثير من المعلومات حول أي اسم وظيفة تراه في مصحح الأخطاء، فقط ابحث في الإنترنت وستجد الكثير من المعلومات.

الآن لن أستخدم الأزرار ولكن سأستخدم الفأرة وانقر نقرًا مزدوجًا على الوظيفة ويمكننا الدخول عليها ومفتاح آخر يمكننا استخدامه وهو الطرح Minus لنعود إلى ما كنا عليه في المقام الأول.

هذه قاعده بما اننا نحن نبحث على كود الخروج فدائما سنختار اخر استدعاء للوظيفة.


الان دعنا نستكشف اخر اسطر في هذه block of code سنذهب الى ما يسمى بالEpilogue.

البداية الprologue  هي الجزء الأول من function في لغة اassembly.
تقوم بإعداد بيئة الfunction، بما في ذلك حفظ المؤشر الأساسي السابق saving the previous base pointer،
وتأسيس مؤشر أساسي جديد establishing a new base pointer،
وتخصيص مساحة للمتغيرات المحلية على الستاك allocating space for local variables on the stack.

أما النهاية، فالepilogue هو الجزء الأخير من الfunction. يعيد بيئة الfunction إلى حالتها الأصلية، بما في ذلك استعادة مؤشر الستاك stack pointer والمؤشر الأساسي base pointer، قبل إرجاع control flow إلى الfunction المستدعية.

لذا، للخلاصة:

الPrologue: القسم الأول، يقوم بإعداد بيئة الfunction.
الEpilogue: القسم الأخير، يرجع بيئة الfunction الى ما كانت عليه قبل الاستدعاء.


حسنا لنكتشف هذه السطر موجود فيها exit اذا ليس هذا ما نبحث عنه.

كما ترى هنا، لدينا اسم وظيفة invoke Main لذا فإن اسم هذه الوظيفة مثير للاهتمام للغاية وأعتقد أن هذا هو ما نبحث عنه.

حسنا ساعيد كلامي مره اخرى بما انا نبحث على كود الخروج فاننا دائما سنبحث على اخر استدعاء لfunction في كود الحالي.

فكما ترى وجدنا تعليمه التي تقوم بتحويل القيمه اربعه الى المسجل EAX.

يمكنك استعمال خاصيه الاضافه الى المفضله او إشارة مرجعية bookmark.

فمثلا هنا سنغير القيمه اربعه الى القيمه ثلاثه ثم نعمل باتشينغ ثم نجرب اهل البرنامج يشتغل بنجاح او لا.


هنا ملاحظه وضعت لك صورتين الصوره اللي على اليمين هي صوره من البرنامج بالdebugger الخاص بx sixty-four dbg فكما ترى عنوان تغيير القيمه الregiset هو نفسه العنوان الموجود في المصحح x sixty-four dbg.



 
 nice
أعضاء أعجبوا بهذه المشاركة : johnvb , azarol


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


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