Math Lock | Inverse Me

Math Lock | Inverse Me

215النقاط
8بدأوه
2حلّوه
16 سبتمبر 2026تاريخ النشر

سهل·هندسة عكسية

التعليمات

Math Lock | Inverse Me

الهدف

الهدف من هذا التحدي هو تحليل البرنامج وفهم منطق التحقق من الـ Code بشكل كامل، ثم استنتاج المدخل الصحيح الذي يقود إلى مسار النجاح وظهور رسالة:

"Access granted."

لا يعتمد هذا التحدي على وجود كلمة سر مخزنة كنص واضح داخل البرنامج، ولا على مقارنة مباشرة من نوع "strcmp"، وإنما يعتمد على مجموعة من العمليات الحسابية وعمليات bitwise transformations التي تُطبّق على الـ input قبل التحقق منه.

المطلوب منك ليس التخمين أو تجربة كلمات عشوائية، بل فهم منطق البرنامج من خلال الـ Disassembly و/أو الـ Pseudocode، ثم ربط شروط التحقق مع بعضها للوصول إلى الـ valid Code الصحيح.

---

القيود

ممنوع اعتبار الوصول إلى رسالة "Access granted." عن طريق patching أو تعديل منطق البرنامج حلًا صحيحًا.

بمعنى آخر، لا يُقبل كحل:

  • تعديل تعليمات القفز الشرطية مثل "JNZ" أو "JZ".
  • تغيير قيمة الإرجاع الخاصة بدالة التحقق.
  • حذف أو تعطيل شروط التحقق.
  • تعديل الـ binary لإجبار البرنامج على الوصول إلى مسار النجاح.
  • إجبار البرنامج على طباعة النتيجة الصحيحة بدون استخراج الـ input الحقيقي.

مسموح استخدام أدوات التحليل المناسبة لفهم البرنامج، مثل:

  • أي أدوات static analysis أو dynamic analysis أخرى

الهدف من التحدي هو فهم منطق البرنامج نفسه من منظور Reverse Engineering، وليس تجاوز الحماية أو التحايل على مسار التنفيذ.

---

ما يجب تحليله

أثناء الحل ستحتاج إلى تحليل عدة عناصر أساسية داخل البرنامج، أهمها:

  • كيفية قراءة الـ input ومعالجته داخل main أو داخل دالة التحقق.
  • الطول المطلوب للمدخل.
  • كيفية انتقال البيانات من الـ input إلى المتغيرات أو الـ registers.
  • منطق الـ validation loop وكيف تتم معالجة كل byte.
  • العمليات المستخدمة أثناء التحقق، مثل:

- XOR - ADD - SUB - ROL - ROR

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

قد تحتاج كذلك إلى تتبع القيم الثابتة داخل أقسام مثل ".rdata" أو أي section أخرى تحتوي على بيانات يعتمد عليها منطق التحقق.

---

ما ستتعلمه

هذا التحدي مصمم لتدريبك على عدد من المهارات الأساسية في مجال Reverse Engineering، أهمها:

  • تحليل الـ validation logic بدل البحث عن password صريح.
  • تتبع الـ data flow بين الـ input والـ registers والذاكرة.
  • فهم طريقة عمل الـ loops داخل الـ Assembly.
  • إعادة بناء المنطق على شكل Pseudocode مفهوم.
  • تحليل العمليات الحسابية وعمليات bitwise transformations.
  • فهم الفرق بين ROL, ROR, SHL, SHR.
  • التعامل مع state يتغير بين iterations ويؤثر على التحقق.
  • عكس transformations للوصول من النتيجة إلى المدخل الأصلي.
  • التمييز بين مسار النجاح ومسار الفشل داخل البرنامج.

المتطلبات

يفضّل قبل بدء التحدي أن تكون لديك معرفة أساسية بـ:

  • x86-64 Assembly
  • Registers
  • Memory Operands
  • "MOV" و"MOVZX"
  • CMP
  • Conditional Jumps
  • Loops
  • Arrays / Indexing
  • Basic Bitwise Operations

ولا تحتاج إلى معرفة متقدمة في Cryptography، لأن التحدي لا يعتمد على خوارزمية تشفير حقيقية، بل على transformations قابلة للتحليل والعكس.

التسليم :

الأسئلة

0 / 8
0%
  1. 01

    ما هو الطول المطلوب الكود للادخال ؟

    10
  2. 02

    ما هي القيمة الأولية لحالة التحقق قبل بدء الحلقة ؟ (Hexadeimcal)

    15
  3. 03

    ما هو اول بايت في المفتاح المستخدم في التحويل ؟ (Hexadecimal)

    20
  4. 04

    ما هي القيمة المحوّلة التي يجب أن ينتجها بايت المدخل الأول لاجتياز عملية المقارنة الأولى ؟ (Hexadecimal)

    20
  5. 05

    كم عدد البت التي تم تدويره (rotated) الذي تم في اول بايت المحول في اول محاولة للحلقة ؟ (Decimal)

    20
  6. 06

    ما هي اول قيمة صحيحة يجب ان تدخلها ؟ (character)

    35
  7. 07

    ما هي القيمة النهائية المطلوبة للحالة (state) بعد اكتمال جميع عمليات التحقق من صحة المدخلات ؟ (Hexadecimal)

    25
  8. 08

    ما هو الكود الصالح الكامل ؟ (character [string])

    70

التصفّح مجاني بالكامل — لكن تسليم الإجابات وحفظ تقدّمك يحتاج حساباً مجانياً. أنشئ حساباً·لديك حساب؟ ادخل