الدرس 3 من 6

قفل الآلة الصغيرة

هدف الدرس

محاكاة الآلة بأمر الإدخال وعكسها لاستخراج المفتاح

01

الشرح

البرنامج PROGRAM مكتوب لآلة صغيرة تشبه آلة مسار تحليل البرامج، لكن أُضيف إليها أمر إدخال (IN) يقرأ بايتًا من مفتاح يكتبه المستخدم. فالبرنامج قفلٌ: يأخذ كل بايت من المفتاح، يحوّله بأوامر ثابتة، ثم يقارن ناتجه ببايتات الهدف المخزّنة في TARGET. والمفتاح الصحيح هو الذي يعطي الهدف نفسه، وهو العلم المطلوب.

0x00  HALT       stop
0x01  LOAD imm   acc = imm
0x02  ADD  imm   acc = (acc + imm) & 0xFF
0x03  XOR  imm   acc = acc ^ imm
0x04  SUB  imm   acc = (acc - imm) & 0xFF
0x05  OUT        output.append(acc)
0x06  IN         acc = بايت الإدخال التالي

والمُراكِم (acc) يبدأ بصفر، والأمر IN يملؤه بالبايت التالي من مفتاح الدخل، فلا مُعامَل له. ولتستخرج المفتاح تعكس القفل: لكل موضع جرّب بايتات الدخل حتى يعطي محاكيك بايت الهدف، أو اقرأ أوامر الموضع واعكسها بالترتيب المعكوس.

02

المطلوب

اكتب الدالة run(program, data) التي تنفّذ البرنامج وتقرأ بايتات الدخل من data عند كل أمر IN وتُرجع المخرجات bytes، والدالة recover(program, target) التي تُرجع مفتاح الدخل الذي يجعل البرنامج يُخرج target. ثم احفظ العلم نصًّا في flag. والفحص يبني أقفالًا أخرى، فلا يكفي أن تكتب العلم وحده.

الفحوص

6 فحوص
  1. المحاكي يقرأ الدخل عند IN
  2. المتغيّر flag علم القفل
  3. يسترجع مفتاح القفل من هدفه
  4. يعكس قفلًا مخفيًّا آخر
  5. الحساب يلتفّ بالباقي 256
  6. يتوقّف عند HALT
03

تلميحات

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

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

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

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

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

–/6

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

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

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

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

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