Skip to content
All posts
miscrevised April 3, 20264 min read

Esolangs and the misc pile

Brainfuck, Whitespace, Piet and the rest are recognisable on sight once you know what to look at. Plus the rest of the misc category: what it actually contains, and the triage that resolves most of it in under a minute.

"Misc" is where a CTF puts everything that does not fit, which makes it the one category you cannot prepare for by learning a technique. What you can prepare is the triage - because the majority of misc challenges are one of a dozen recognisable shapes, and recognising the shape is the whole difficulty.

Esolangs identify themselves by their alphabet

Every esoteric language that turns up in a CTF has a distinctive character set, and that is the entire identification problem. You do not need to know how any of them work to spot them.

Looks likeLanguageThe tell
+++++[->++++<]>.BrainfuckOnly +-<>[]., and nothing else. The most common by a distance.
Blank lines, invisibleWhitespaceSpaces, tabs and newlines only - the file looks empty in a browser.
A grid of colour blocksPietThe program is a bitmap; the flow is the colour transitions.
ook. ook? ook!Ook!Brainfuck with three tokens instead of eight. Same semantics.
Long runs of ᓚᘏᗢ-like glyphsOne of the many Brainfuck substitutionsCount the distinct symbols: eight means Brainfuck under a costume.
Dense punctuation, $_ heavyJSFuck or a Perl one-linerJSFuck uses only []()!+; if there are letters, it is Perl.
Hello, World in ShakespeareShakespeare / Chef / other joke languagesProse that is syntactically odd and semantically absurd.

Whitespace deserves its own warning because it is invisible by construction - and so does everything else in hiding in text, which uses the same blindness: a challenge that looks like an empty file, or like a normal text file with odd trailing space, may be a whole program. Anything that renders as blank and is not zero bytes is worth a hex view.

The rest of the misc pile

Beyond esolangs, misc is a fairly predictable set - it now includes whole sub-genres with their own posts, from smart contracts to hardware and signal captures to side channels. Recognising which one you are in narrows the tooling immediately.

  • Encoding chains. Base64 that decodes to hex that decodes to something else. Depth three or four is common; the identifier plus a decode search resolves most of them without a single manual step.
  • QR and barcodes, often damaged on purpose - a missing finder pattern, an inverted image, or a code split into pieces across several files.
  • Audio. A spectrogram with text drawn in it, DTMF tones, Morse, or SSTV. If a challenge gives you a .wav with no obvious content, look at it rather than listening to it.
  • Games and puzzles. A save file to edit, a client to patch, a scoring function to reverse. These are reversing challenges wearing a hat.
  • Steganography in text. Zero-width characters, homoglyph substitution, or capitalisation carrying bits.
  • Programming under a constraint. Solve five hundred instances in ten seconds; the challenge is the automation, not the maths.

The triage that resolves most of it

For anything textual, the order is fixed and takes under a minute, and it is the same order as the first-hour triage playbook narrowed to this category.

  1. Count distinct characters. Eight, three, or six-with-brackets is an esolang. Sixty-four-ish is an encoding. Two hundred and fifty-six is binary data mislabelled as text.
  2. Look at it in hex. Invisible characters, a BOM, trailing nulls and a file that is not what its extension says all become obvious immediately and are invisible otherwise.
  3. Run the decode search. A layered encoding falls out in one action, and a negative result is informative too.
  4. Check the length. A length that is a multiple of 4, 8, or 16, or exactly 32/40/64 hex characters, is telling you something specific.

When it is a joke

Some misc challenges are jokes, and the answer is to notice that. A file named flag.txt.gz.gz.gz.gz really does need unzipping fifty times, and the intended solution is a two-line loop rather than fifty clicks. A hundred-megabyte text file with one line different really is a sort | uniq -u. Recognising that a challenge is a joke is itself the skill being tested, and taking it seriously is the mistake.