Filer: Download challenge files

Writeup: Unbake The Cake

Indledende Observationer

Jeg fik udleveret to filer:

  • Cake.txt

  • Recipe.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:

1
oligrunggflerk__oluubnstagmiagekss

2. Analyse af Recipe.py

I Recipe.py blev en funktion mix(a, b) defineret:

1
2
def mix(a, b):
    doughmix[a], doughmix[b] = doughmix[b], doughmix[a]

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:

  1. Udtrække den færdige dough-streng fra Cake.txt

  2. Parse Recipe.py

  3. Ekstrahere alle mix(a,b) kald i korrekt rækkefølge

  4. Anvende 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:

1
2
for a, b in reversed(swaps):
    dough[a], dough[b] = dough[b], dough[a]

3. Resultat

Efter at have reverseret hele sekvensen fik jeg:

1
floursugarlets_go_unbakingmilkeggs

Strukturen var som følgende:

  • Prefix: floursugar

  • Secret: lets_go_unbaking

  • Suffix: milkeggs

Ved at fjerne base-ingredienserne stod den hemmelige string tilbage.


Flaget

Den hemmelige string var:

1
lets_go_unbaking

Flag-formatet var DDC{...}.

Final Flag

1
DDC{lets_go_unbaking}

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.