الدرس 6 من 6

التحدّي الأخير

هدف الدرس

سلسلة خطوات تنتهي بالعلم

01

الشرح

هذا آخر تحدٍّ، ويجمع ما تعلّمته في المنطقة كلّها. الكتلة BLOB قطعة من ملف تنفيذي مخترَع، بين بايتاتها نصوص مطبوعة، والعلم مخبّأ خلف أربع طبقات:

  1. استخرج النصوص المطبوعة التي طولها أربعة محارف فأكثر.
  2. النصّ الذي يبدأ بـ KEYSEED= يحمل بعده بذرة المفتاح، والمفتاح هو مجموع بايتات البذرة بالباقي 256.
  3. النصّ الذي يبدأ بـ DATA= يحمل بعده حمولة مرمّزة بـ base64، وترميز base64 يكتب البايتات حروفًا مطبوعة، وتعيدها الدالة base64.b64decode(text) بايتات، ثم فكّ XOR بالمفتاح.
  4. الحمولة بعد فكّها سجلّ يبدأ بالتوقيع RE في بايتين، ثم طول العلم في بايتين بترتيب صغير الطرف، ثم العلم، وبعده بايتات زائدة، فاقرأ الطول واقطع العلم به ولا تعتمد على رمز نهايته.
02

المطلوب

اكتب الدالة solve(blob) لتُرجع العلم نصًّا، واحفظ علم BLOB في المتغيّر flag. والفحص يبني كتلًا أخرى ببذور وأعلام مختلفة، وقد يتغيّر فيها ترتيب النصوص.

الفحوص

5 فحوص
  1. يحلّ كتلة مخفيّة
  2. يحلّ كتلة ببذرة وعلم آخرين
  3. لا يتأثّر بترتيب النصوص
  4. يقطع العلم بطوله لا برمز نهايته
  5. المتغيّر flag يحمل علم الكتلة BLOB
03

تلميحات

0/3
دروس المسارأتممت 0 من 6

ستّة تحدّيات متدرّجة تعكس فيها دالة تحقّق أو بايتكود لتستخرج المفتاح بكودك أنت لا بنسخه.

مستواه متقدّم، وفيه 6 دروس مجموع مدّتها ساعتان.

main.py
المخرجاتPython (Pyodide)

نحمّل بيئة Python الآن. يحدث هذا مرّة واحدة فقط، ثم يحفظها متصفّحك.

–/5

يبدأ الفحص حين تجهز البيئة.

تجد 5 فحوص في بطاقة «المطلوب».

دروس المسارأتممت 0 من 6

ستّة تحدّيات متدرّجة تعكس فيها دالة تحقّق أو بايتكود لتستخرج المفتاح بكودك أنت لا بنسخه.

مستواه متقدّم، وفيه 6 دروس مجموع مدّتها ساعتان.