כתיבת קוד — שיעור 47
תרגול CTF טקטי
כל 4 משימות הקוד שנשמרו מהשיעור מופיעות כאן, עם דרישות, דוגמאות וקוד פתיחה. אפשר לכתוב פתרון בעורך המקומי וללחוץ על „בדיקת AI” לקבלת ציון, רמזים והערות.
T5 · שיא800 נק'~15 דק'algorithmic⏱ בונוס-זמן
Crypto — פיצוח RSA (מודולוס קטן)
אתגר קריפטו קלאסי של CTF. נתונים n (מכפלת שני ראשוניים קטנים), e, ו-ciphertext c. שחזר את ה-plaintext m: פרק את n, חשב phi=(p-1)(q-1), מצא d=e⁻¹ mod phi, והחזר m=c^d mod n.
דוגמאות
rsa_decrypt(3233, 17, pow(42,17,3233)) → 42
הפתרון נשמר מקומית אוטומטית.
T5 · שיא800 נק'~15 דק'algorithmic⏱ בונוס-זמן
Forensics — ציד flag ב-XOR
blob של בתים (רשימת ints) מכיל flag שהוצפן ב-XOR עם מפתח בית-יחיד ומוסתר ברעש. ממש find_flag(data) שמנסה את כל 256 המפתחות, מפענח, ומחזיר את המחרוזת בפורמט flag{...} שמופיעה. אם אין — None.
דוגמאות
find_flag(blob) # blob = flag{...} ^ key ברעש → 'flag{f0r3ns1cs}'
הפתרון נשמר מקומית אוטומטית.
T5 · שיא800 נק'~15 דק'algorithmic⏱ בונוס-זמן
Reverse — היפוך בדיקת Serial
פונקציית check ששוחזרה מ-disassembly בודקת: (ord(s[i]) ^ 0x2a) + i == target[i] לכל i. נתון target — ממש solve(target) שמחזיר את ה-serial (המחרוזת s) שעובר את הבדיקה.
דוגמאות
solve(target) # target שנגזר מ-'c7f2' → 'c7f2'
הפתרון נשמר מקומית אוטומטית.
T5 · שיא800 נק'~20 דק'algorithmic⏱ בונוס-זמן
Algo — תת-סדרה עולה ארוכה ביותר
מצא את אורך תת-הסדרה העולה-ממש הארוכה ביותר (LIS) ברשימת מספרים. חובה O(n log n) (patience sorting עם חיפוש בינארי): קלט של 200,000 איברים חייב לרוץ בזמן. פתרון DP של O(n²) ייפסל ב-timeout.
דוגמאות
lis_length([10,9,2,5,3,7,101,18]) → 4
lis_length([3,3,3]) → 1
הפתרון נשמר מקומית אוטומטית.