Kategori
Reversering
Beskrivning
Enligt våra benchmarks slår denna tjänst UPX, zip och tarball. Kontakta oss om du vill ha full tillgång till produkten!
Lösning
Utmaninssidan är en enkel webbsida där vi kan ladda upp en fil. Vi kan testa att ladda upp en fil och se vad som händer.
Skickar vi upp en fil som innehåller texten AAAAA\x0a så kan vi hämta ner filen igen och se att texten har blivit ändrad till följande:

Från detta kan vi se att filen är uppdelad i tre bytes, där den första byten är originalvärdet plus 0x50, de andra två bytesen är antal gånger värdet ska upprepas.
Vi kan skriva ett enkelt skript för att packa upp filen.
#!/usr/bin/env python3
import sys
if len(sys.argv) != 2:
print("Usage: solve.py [input file]")
sys.exit(1)
data = None
with open(sys.argv[1], 'rb') as f:
data = f.read()
decoded = bytearray()
for i in range(0, len(data), 3):
val = data[i] + 0x50 & 0xff
times = data[i + 1] << 8 | data[i + 2]
print(val, times)
decoded.extend([val] * times)
with open('decoded', 'wb') as f:
f.write(decoded)
print("Decoded data written to 'decoded'")
Laddar vi ner filen flag.packed från utmaningssidan och kör skriptet på den så får vi ut en ELF-fil som vi kan köra.
./decoded
cratectf{AlltÄrÖppenSåsOmManKanReversera}