Filer: Download challenge files
Writeup: Unbake The Cake
Indledende Observationer
Jeg fik udleveret to filer:
Cake.txtRecipe.py
Beskrivelsen indikerede, at en “hemmelig string” manglede fra en ASCII-kage. SHA256-hash var angivet for at verificere filens integritet.
Formuleringen “Unbake the cake” antydede, at transformationen skulle reverseres.
Recon / Kortlægning
1. Analyse af Cake.txt
Cake.txt indeholdt primært ASCII-art af en kage. Midt i indholdet fandt jeg en lang streng bestående af små bogstaver og underscores:
| |
2. Analyse af Recipe.py
I Recipe.py blev en funktion mix(a, b) defineret:
| |
Observation:
mix(a, b)laver et swap mellem to indeks i en liste.Swap-operationen er selvinverterende.
Hvis man anvender samme swap igen, får man original tilstand tilbage.
Derfor kan hele transformationen reverseres ved at udføre alle swaps i omvendt rækkefølge.
Dette var kerneobservationen.
Analyse
“Baking”-processen bestod udelukkende af en sekvens af swaps.
Da swaps er deterministiske og reversible, kunne jeg:
Udtrække den færdige
dough-streng fraCake.txtParse
Recipe.pyEkstrahere alle
mix(a,b)kald i korrekt rækkefølgeAnvende dem baglæns
Angrebet
1. Ekstraher swaps fra Recipe.py
Jeg brugte Python ast til at finde alle mix(a,b) kald.
2. Reverse alle swaps
Da swap er selvinverterende:
| |
3. Resultat
Efter at have reverseret hele sekvensen fik jeg:
| |
Strukturen var som følgende:
Prefix:
floursugarSecret:
lets_go_unbakingSuffix:
milkeggs
Ved at fjerne base-ingredienserne stod den hemmelige string tilbage.
Flaget
Den hemmelige string var:
| |
Flag-formatet var DDC{...}.
Final Flag
| |
Konklusion
Challenge var en ren permutation-reversal opgave.
Vigtige pointer:
Swap-operationer er selvinverterende.
En sekvens af swaps kan reverseres ved at køre dem baglæns.
AST-parsing gjorde løsningen robust og automatiseret.
Ingen brute-force nødvendig.