Reversim MIPS و Golang - أساسيات العكس. حل المشاكل للانعكاس باستخدام r0ot-mi. الجزء 2

صورة

في هذه المقالة ، سنتعامل مع إلغاء ترجمة MIPS الثنائية في Ghidra وعكس البرنامج المكتوب بلغة golang في المؤسسة الدولية للتنمية.

جزء 1 - C ، C ++ و DotNet فك.

المعلومات التنظيمية
خاصةً لأولئك الذين يرغبون في تعلم شيء جديد وتطويره في أي من مجالات أمن المعلومات والحاسوب ، سأكتب وأتحدث عن الفئات التالية:

  • PWN.
  • التشفير (التشفير) ؛
  • تقنيات الشبكات (الشبكة) ؛
  • عكس (الهندسة العكسية) ؛
  • إخفاء المعلومات (Stegano) ؛
  • بحث واستغلال مواطن الضعف WEB.

بالإضافة إلى ذلك ، سوف أشارك تجربتي في الطب الشرعي للكمبيوتر ، وتحليل البرامج الضارة والبرامج الثابتة ، والهجمات على الشبكات اللاسلكية وشبكات المناطق المحلية ، وإجراء عمليات pentests واستغلال الكتابة.

حتى تتمكن من معرفة المقالات الجديدة والبرامج والمعلومات الأخرى ، أنشأت قناة في Telegram ومجموعة لمناقشة أي مشاكل في مجال التصنيف الدولي للأمراض. أيضًا ، سأدرس شخصيًا طلباتك الشخصية وأسئلتك واقتراحاتك وتوصياتك شخصيًا وسأجيب على الجميع .

يتم توفير جميع المعلومات للأغراض التعليمية فقط. لا يتحمل مؤلف هذا المستند أية مسؤولية عن أي ضرر يلحق بشخص ما نتيجة استخدام المعرفة والأساليب التي تم الحصول عليها نتيجة لدراسة هذا المستند.

ELF MIPS


صورة

قم بتنزيل الملف وتحقق منه.

صورة

هذا ملف قابل للتنفيذ 32 بت لمعالجات MIPS المعمارية. لحل هذه المشكلة ، سوف نستخدم Ghidra. افتح hydra ، أنشئ مشروعًا جديدًا وأضفه إلى الملف القابل للتنفيذ.

صورة

افتح الآن الملف الذي تم التحقيق فيه ، وانتقل إلى نافذة Symbol Tree. في البحث ، اكتب main للعثور على نقطة دخول البرنامج.

صورة

عند تحديد وظيفة ، يتم فتحها على الفور في أداة فك التشفير.

صورة

دعنا تحويل الكود.

صورة

نرى أن 64 بايت تتم قراءتها في المتغير local_54 ، دعنا نسميها لإدخالها (hotkey L) وعمل صفيف char مكون من 64 حرفًا (hotkey Ctrl + L). يمكنك أيضًا إعادة تسمية المتغير sVar1.

صورة

صورة

بعد إجراء بعض التحويلات ، بدأ الرمز في الظهور بشكل أكثر جمالًا.

صورة

نحن نحلل الرمز. يجب أن يكون طول السلسلة التي ندخلها 19 حرفًا. في أي موقف يجب أن تكون الشخصية واضحة من الشفرة. في هذه الحالة ، من الثامن إلى السابع عشر يجب أن يكون الرمز "i". نحن استعادة ، تمرير كلمة المرور.

Golang الأساسية


صورة

في هذه المهمة ، يتم تزويدنا بملف قابل للتنفيذ مكتوب في Go. يمكنك حتى معرفة أي إصدار. أنا رمي في المؤسسة الدولية للتنمية. يجب أن يقال على الفور أن الوظيفة الرئيسية لا تسمى main ، ولكن تسمى main_main. لذلك ، نحن نقوم بالبحث حسب الوظيفة وننتقل إلى الرئيسية الحقيقية.

صورة

دعونا تحليل الرمز. لنبدأ من البداية.

صورة

هناك تعريفات لمفتاح الإدخال. الكتلة اليسرى مسؤولة عن إكمال وظيفة main_main. النظر في كتلة اليسار.

صورة

تم تصميم وظيفة fmt_Scanln لقراءة سطر من وحدة التحكم. نلاحظ أيضًا بيانات main_statictmp_2 المحفوظة بالفعل في البرنامج.

صورة

بعد ذلك ، يتم استدعاء وظيفة runtime_stringtoslicebyte ، وفقًا للرمز ، يمكننا افتراض أنها تأخذ البايتات الست الأولى من السطر التالي.

صورة

سيشير Key.ptr إلى بداية هذه الشريحة. دعونا نرى ما يأتي بعد ذلك.

صورة

اعتمادًا على المقارنة بين السجل r9 الملغى والسجل rsi ، حيث يوجد طول مدخلات المستخدم. من هذا يمكننا أن نستنتج أن r9 سيكون على الأرجح عدادًا. دعونا نلقي نظرة على الكتلة اليمنى ، حيث سيذهب التحكم ، بعد البيع على السطر الذي دخلنا إليه.

صورة

تسمى الدالة bytes_Compare ، والتي ، بناءً على نتيجة المقارنة ، تعرض أحد الخطوط.

صورة

صورة

اكتشفنا إخراج البرنامج ، والآن دعونا نلقي نظرة على فواصل الأسطر (في الفرع الأيسر).

صورة

يتم إدخال الحرف من إدخال المستخدم في سجل r10 ، ثم هناك مجموعة من التعليمات البرمجية المعقدة لإجراء مقارنات للتحكم في الاستثناءات مثل الفجوة الهزلية ومؤشر الذعر. سلطت الضوء على فرع تنفيذ البرنامج.

صورة

وبالتالي ، يتم وضع بايت من سلسلة محددة بشكل ثابت في EDX والشجار مع r10 ، حيث هو البايت من الشريحة. بعد ذلك ، يزيد العداد r9. هناك حاجة على الأرجح إلى كتلتين متجاورتين وسطيتين للتحكم في طول القطع.

دعنا نجمع كل شيء معًا: الخط الذي تم إدخاله ملوث بشريحة ومقارنًا بسطر محدد بشكل ثابت. دعونا الوكيل لمعرفة كلمة المرور الصحيحة.

صورة

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

هذا كل شيء الآن. أن تستمر ... يمكنك الانضمام إلينا على Telegram . هناك يمكنك اقتراح الموضوعات الخاصة بك والتصويت على اختيار الموضوعات للمقالات التالية.

Source: https://habr.com/ru/post/ar474656/


All Articles