$ cat writeup.md…
$ cat writeup.md…
dawgctf_26
Task: a hex-encoded file decodes to integer frequencies wrapped in a DawgCTF flag template, with a clue pointing to Futurama's pilot transcript. Solution: decode the numbers, count characters in the raw transcript, and use the Futurama hint to reconstruct the obvious phrase 'REDACTED'.
One of my favorite TV shows of all time has to be Futurama. I decided to hide a message that can be solved by frequenting its pilot episode. Good luck and remember to drink lots of Slurm, 'it's highly addictive!'
English summary: the challenge ships a transcript for Futurama's pilot episode, Space Pilot 3000, plus a flag.txt file containing hex bytes. The goal is to decode the hex, interpret the resulting numbers as frequency values, and recover the hidden message from the transcript.
The first useful step is to inspect flag.txt. It is not plaintext, but a list of hexadecimal byte values. Decoding those bytes produces:
DawgCTF{ 390 1002 580 1314 191 1589 33 1526 141 762 352 88 1293 379 50 }
So the inner payload is a sequence of integers, not the flag itself.
The prompt makes the intended direction very clear:
Those clues point directly to the supplied Space Pilot 3000 Transcript.txt file and to frequency analysis. The natural interpretation is that each number corresponds to the frequency of a character in the transcript.
Using the raw transcript text as provided, counting character occurrences gives several exact matches immediately:
390 -> W1002 -> H580 -> Y191 -> 01589 -> T33 -> Z141 -> !762 -> D352 -> B88 -> 350 -> ?The remaining values are near-matches rather than perfect matches. That can happen if the transcript version or normalization differs slightly, for example due to spacing, punctuation, line ending, or formatting differences. Even so, the partial decode plus the Futurama theme makes the intended phrase obvious:
REDACTED
This is a leetspeak and punctuation variant of "Why not Zoidberg?", which fits the challenge theme perfectly.
flag.txt and notice it contains hexadecimal bytes.DawgCTF{...} wrapper.Space Pilot 3000 Transcript.txt while preserving the raw text context.Hex-decoding snippet:
#!/usr/bin/env python3 from pathlib import Path hex_bytes = Path("flag.txt").read_text(encoding="utf-8").split() decoded = bytes(int(b, 16) for b in hex_bytes).decode() print(decoded)
One possible frequency-counting snippet:
#!/usr/bin/env python3 import re from collections import Counter from pathlib import Path decoded = "DawgCTF{ 390 1002 580 1314 191 1589 33 1526 141 762 352 88 1293 379 50 }" nums = list(map(int, re.findall(r"\d+", decoded))) text = Path("Space Pilot 3000 Transcript.txt").read_text(encoding="utf-8") counts = Counter(text) for n in nums: matches = [repr(ch) for ch, cnt in counts.items() if abs(cnt - n) <= 2] print(n, matches[:12])
That output is enough to see the exact hits and the small set of near-hits. Combined with the episode clue, the intended plaintext is unmistakable:
REDACTED
Therefore the final flag is:
DawgCTF{REDACTED}
$ cat /etc/motd
Liked this one?
Pro unlocks every writeup, every flag, and API access. $9/mo.
$ cat pricing.md$ grep --similar