GammaCyber

כתיבת קוד — שיעור 30

מעבדת Low-Level מסכמת

כל 2 משימות הקוד שנשמרו מהשיעור מופיעות כאן, עם דרישות, דוגמאות וקוד פתיחה. אפשר לכתוב פתרון בעורך המקומי וללחוץ על „בדיקת AI” לקבלת ציון, רמזים והערות.

T4 · מתקדם550 נק'~45 דק'reverse
Crackme — XOR משורשר (רקורסיבי)
מסופק בינארי crackme2. פונקציית ה-check שלו רקורסיבית ומשתמשת ב-XOR *משורשר* (כל תו תלוי בקודמו). הפוך את הבינארי, הבן את השרשור, ומצא את ה-serial (6 תווים) שמדפיס 'Correct!' ואת ה-flag. המקור אינו מסופק.
דוגמאות
serial שגוי → Wrong.
פתרון-ייחוס Crackme — XOR משורשר (רקורסיבי) ›
# XOR משורשר: t[0]=s[0]^K ; t[i]=s[i]^s[i-1]^K (K=0x5a) # היפוך: s[0]=t[0]^K ; s[i]=t[i]^s[i-1]^K target=[0x8,0x3b,0xa,0x4c,0x5d,0x5b]; K=0x5a; s=[] for i in range(6): c = target[i]^K if i==0 else target[i]^ord(s[i-1])^K s.append(chr(c)) print(''.join(s)) # R3curs -> flag{gamma_re_R3curs}
הפתרון נשמר מקומית אוטומטית.
T3 · בינוני300 נק'~15 דק'analysis
מעקב אחר רקורסיה
נתונה פונקציה רקורסיבית (שוחזרה מ-disassembly): f(n) = n אם n < 3 f(n) = f(n-1) + f(n-3) אחרת חשבו ידנית והגישו את הערך של f(8).
דוגמאות
f(3) = f(2)+f(0) → = 2
פתרון-ייחוס מעקב אחר רקורסיה ›
f: 0,1,2 → 2,3,5,7,10,15 עבור n=0..8. f(8)=f(7)+f(5)=10+5=15.
הפתרון נשמר מקומית אוטומטית.