العمل مع القاطع - أساسيات عكس. عكس حل المشكلات باستخدام r0ot-mi. الجزء 3

صورة


في هذه المقالة ، سوف نفهم كيفية فك تجميع ملفات ELF في برنامج Cutter باستخدام مثال المهام الخفيفة. مقدمة سابقة



للأجزاء العكسية: الجزء 1: فك ترجمة C و C ++ و DotNet - أساسيات عكسية

الجزء 2: عكس MIPS و Golang - أساسيات عكسية



المعلومات التنظيمية
, - , :



  • PWN;
  • (Crypto);
  • c (Network);
  • (Reverse Engineering);
  • (Stegano);
  • WEB-.


, , , .



, , Telegram . , , .



. , - , .



تعليمات مزيفة







هذه هي المهمة الثامنة في هذه الفئة ويتم إخطارنا بوجود تعليمات مزيفة. لنبدأ بالنظر في معلومات الملف.







أفتح البرنامج في Cutter - واجهة مستخدم رسومية لـ radare2 مع أداة فك تشفير ghidra مضمنة لديها القدرة على محاكاة وتصحيح الأخطاء مؤخرًا. وعلى الفور نحصل على قائمة مهمة من الوظائف.







دعنا ننتقل إلى الوظيفة الرئيسية ونفككها.







في البداية ، تتم تهيئة الكناري والتحقق من عدد الوسائط. بعد ذلك ، يتم تخصيص 0x1f بايت ، حيث يتم نسخ السلسلة الثابتة المحددة ، ويتم حفظ العنوان في متغير iVar3 ، ثم يتم تغيير البايتات الفردية لهذه السلسلة. بعد ذلك ، تحدث التحويلات باستخدام السلسلة s1 ، والتي لا تهمنا. تتم أيضًا تهيئة وظيفة WPA ، وتتم كتابة كلمة المرور التي أدخلناها على عنوان auStack50 وتمريرها مع سلسلة iVar3 المحولة إلى وظيفة WPA ، وبعد ذلك يتم التحقق من قيمة الكناري وإنهاء البرنامج.



دعنا ننتقل إلى ميزة WPA.







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







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







الآن لنبدأ تصحيح الأخطاء - F9 ، وأدخل وسيطات البرنامج.







انقر فوق الزر بشكل أكبر على شريط التنقل حتى نصل إلى نقطة التوقف الخاصة بنا. ستتم كتابة نتيجة مقارنة السلاسل باستخدام الدالة strcmp () في سجل EAX ، والذي سيتم التحقق منه بعد ذلك. نظرًا لأن السلاسل غير متساوية ، فإن هذا السجل يحتوي على القيمة 1.







دعنا نغيره إلى 0 لتغيير فرع سلوك البرنامج ومواصلة التنفيذ. بعد الانتهاء في وحدة التحكم Cutter ، سنرى الإجابة الصحيحة ، والتي يجب تقديمها على الموقع.







بتراس







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







لا شيء رائع ، تحتاج إلى العثور على كلمة مرور. ولكن هناك القليل من الحماية ضد التصحيح (ptrace) والانتقالات التي يجب تحريرها يدويًا. هذه هي الطريقة التي يظهر بها الرسم البياني في IDA Pro.







سنقوم أيضًا بهذه المهمة في Cutter ، وسوف يصحح تلقائيًا جميع التحولات.







دعنا ننتقل إلى فك الوظيفة الرئيسية.







وكلمة المرور الصحيحة هي الأحرف الأربعة المقابلة من السلسلة المحددة في البداية.







ARM ELF







هذا ثنائي لمعمارية ARM ، نرميها في Cutter ونحدد الوظيفة الرئيسية. من الرسم البياني للوظائف ، نرى ما نتعامل معه ، وعلى الأرجح هذه مقارنة رمز برمز.







نفتح برنامج فك التحويل ونحلل البرنامج.







بادئ ذي بدء ، يتم التحقق من وجود وسيطة البرنامج وطولها ، ويجب أن تكون مساوية لـ 6.







لذا فإن المتغير var_14h يعمل كمؤشر ويأخذ القيمة 0. ثم يتم إجراء عدد من المقارنات ، والتي سنعتبرها كشرطين:



str [0] == str [5]

str [0] + 1 == str [1]

str [3] + 1 == str [0]

str [2] + 4 == str [5]

str [4] + 2 == str [2]

0 == str [3] ^ 0x72



دعونا ننفذ الخوارزمية ونحصل على كلمة المرور.







ونحصل على كلمة المرور المطلوبة. هذا كل شئ حتى الان.



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



All Articles