سؤال

أنا نسبيًا (اقرأ: مبتدئ غبي) على دراية بالتفكيك ، لكن هذا الشيء قد صعدني: لدي مجموعة من ملفات حفظ مضغوطة مع Zlib ولعبة تقوم بتحميلها. إن بنيةها معروفة وبمجرد تحميلها ، تكون الهياكل في الذاكرة مطابقة لملفات حفظها المقابلة. تكمن المشكلة في أن اللعبة قد كتبت بلغة مؤخرة ، لا تدير البرمجة النصية فقط ، والتي تمكنت بطريقة ما من ترك أي مؤشرات ثابتة. على الاطلاق. حاول عدة عشرات أشخاصًا ، ويبدو أن مسارات المؤشر الثابتة ستنهار بعد تغييرات طفيفة على نفس الجهاز. سيكون الحل السهل هو مجرد البحث في ذاكرة العملية عن محتويات الملفات ، ولكن هذا حل كبير في حالة حدوث يفضل تجنبه لأغراض تعليمية.

الأسئلة:

  • أحاول استخدام Ollydbg. أنا فظيع في ذلك ، لكن مع ذلك تمكنت من صنع بعض الأفران الترويجية التافهة التي نجحت بالفعل. هل أستخدم الأداة المناسبة للوظيفة أم أنا مبتدئ غبي؟ ما هي الأدوات التي يمتلكها العكس الحديث في مجموعته؟
  • في ملاحظة ذات صلة ، يجب أن ألجأ إلى استخدام محرك الغش (أو ابن عمه MHS) لعمليات البحث عن الذاكرة. هذا يبدو قليلا غير بديهية. هل لا يعطيك Ollydbg حقًا أي طريقة للبحث عن القيم وتحسين النتائج أم أفتقد شيئًا؟
  • كيف يمكنك تعيين نقاط التوقف على Winapi؟ الجحيم ، كيف يبدو وينابي على مستوى التجميع؟ هذا شيء لم أتمكن من العثور على أي معلومات لائقة ، وأنا متأكد تمامًا من أن Google لديها أكثر من كافية ، لكن لا يمكنني كتابة الكلمات الصحيحة.
  • التوسع في ما سبق ، كيف يمكن لضبط نقاط التوقف الديناميكية؟ إذا كنت مهتمًا بالوظيفة المحددة ، غالبًا ما تسمى الوظيفة ولكن فقط إذا كانت EAX في تلك المرحلة تساوي قيمة محددة ، فكيف يمكنني الحصول على Olly (أو أي شيء آخر) على هذا الشرط؟
  • أي كتب/اقتراحات/موارد عامة على التفكيك أو برمجة منخفضة المستوى موجهة في كسر الأشياء.

إخلاء المسئولية: اللعبة المعنية هي مجانية ، لاعب واحد ، المؤلف لا يرفض ، والمشروع يهدف إلى توسيع الوظائف أكثر من أي شيء آخر. أيضا أول وظيفة ، آمل أن لا تخبط بشكل سيء للغاية. :(

هل كانت مفيدة؟

المحلول

لديك الكثير من الأسئلة المتداول في واحد. سأحاول الرد على البعض.

Ollydbg هو disassembler مجاني جيد. قد يدفع المحترفون مقابل IDA-Pro ، لكن هذا منتج باهظ الثمن.

فيما يتعلق بالبحث في الذاكرة ، توفر Ollydbg هذه الميزة. في أي نافذة تفريغ الذاكرة (على سبيل المثال ، جزء تفريغ الذاكرة في نافذة وحدة المعالجة المركزية) ، يمكنك: النقر بزر الماوس الأيمن ، وتحديد "البحث عن" من قائمة السياق ، ثم اختر إما integer أو سلسلة ثنائية. على عكس محرك الغش ، لا يمكنك البحث عن قيمة تقريبية مع Ollydbg. قد تسعى للحصول على مكون إضافي يقوم بذلك ، وليس أنني على علم بواحد.

بواسطة "Winapi" أعتقد أنك قد تعني واجهة برمجة تطبيقات Win32. ربما يكون هناك مكون في اللعبة التي تبحث عنها في Winapi. من أجل ضبط نقاط التوقف على مختلف واجهات برمجة التطبيقات Windows ، وهو ما يحب المديرون العاديين في اللعبة القيام به ، ستحتاج إلى معرفة مكان ويندوز ويندوز ويندوز ، إذا جاز التعبير. الوظائف ليست كلها في "مكان واحد". هناك العديد من وحدات DLL التي "تصدير" الوظائف التي تشتمل على واجهة برمجة تطبيقات Win32. علي سبيل المثال، MessageBox() تم تصديره من USER32.DLL لكن ExitProcess() تم تصديره من KERNEL32.DLL.

لتعيين نقاط التوقف على مكالمات Windows API في Ollydbg ، يمكنك: عرض القائمة ، وحدات قابلة للتنفيذ لرؤية جميع الوحدات النمطية في الذاكرة. انقر بزر الماوس الأيمن على وحدة user32.dll وحدد "عرض أسماء" من قائمة السياق. هناك سترى جميع الوظائف التي يتم تصديرها من user32.

إذا تمت كتابة عميل اللعبة في C ، فستكون هناك قائمة بوظائف API المستخدمة في ما يسمى "جدول الاستيراد". يمكن العثور على هذا في وحدة .exe المحملة في الذاكرة ، أو يمكن عرضها أيضًا في ملف EXE على القرص باستخدام link /dump /imports.

في حالة لغة البرمجة النصية ، لا يوجد عادة جدول استيراد ، أو إذا كان هناك جدول استيراد ، فهو يستورد مجموعة واسعة من الوظائف التي يمكن الوصول إليها عبر محرك البرنامج النصي.

لا أعتقد أن Ollydbg يدعم نقاط التوقف الشرطية ، للأسف.

فيما يتعلق بمكان البدء في تعلم التفكيك ، فإن أفضل تعليمات هي الاستفادة من مجموعة كبيرة من التجميع على الرمز الخاص بك. حتى كتابة تطبيق Windows الذي يعرض فقط مربع الرسائل الذي يحمل "Hello World" سيتطلب منك التعرف على جداول الاستيراد من أجل الوصول إلى واجهة برمجة تطبيقات MessageBox (). في الواقع ، يمكن أن تكون كتابة مثل هذا التطبيق في C مفيدًا لك أيضًا. ومع ذلك ، أوصيك بتجميع الكود باستخدام أدوات سطر الأوامر فقط وليس بيئة واجهة المستخدم الرسومية. سوف يخفي واجهة المستخدم الرسومية الكثير من المعلومات منك ويتداخل مع التعلم. من أجل الوصول إلى user32.dll API ، ستحتاج إلى إبلاغ الرابط الذي ترغب في استخدامه user32.lib "مكتبة الاستيراد" حتى يتمكن رمز C الخاص بك بشفافية MessageBox().

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top