zwesty
Write-ups / Day 19 / Warmups
Day 19 · Mon, Oct 19 · Warmups

Little Things

Prey slaughtered

Recognising UTF-16LE under hex, layered decoding, rehearsal before timed runs

STTMClaude Homebase Both

Flags are shortened to their first 8 and last 4 characters because they're unique per team.

Challenge ID
warmups-day-19 (+ /time_trial, /mastery)
Solved
2026-10-19, all three modes, 09:03:25–09:07:09 ET
Player
Zwesty (solo), with Claude Code (Opus 5.5), here a Claude helper agent

The challenge

Two bytes walk into a bar. The little one goes first.

One text blob per attempt; the answer is the slug in the decoded instruction sentence.

Reading the prompt: what it said we'd need

Clue What it pointed to What we did about it
"Two bytes" A 2-byte character encoding Looked for a 16-bit text encoding under the familiar layers
"The little one goes first" Little-endian byte order UTF-16LE: low byte first, so ASCII text shows as xx 00 pairs

What was in the files

The Single Solve blob was one line of 436 hex digits: 218 bytes starting ff fe (the UTF-16LE byte-order mark), then each ASCII character followed by a zero byte. Our existing hex decoder produced those bytes but rejected them as unprintable, so our automated morning solver (a scheduled script on our Kali VM) stopped cleanly and sent nothing. Decoded as UTF-16 it read as the usual instruction sentence ending in the slug. Mastery blobs carried the new layer on the last of 19 lines, as each new day does.

Single Solve

  • The one candidate was the decoded slug, jaunty-raven-glade-73.
  • CORRECT 09:03:25 ET (flag 6d24beac…b1a0, solve 17 ms).
  • Our solver gained one reading on top of the previous day's version: any raw-bytes reading of the text (hex, Base64, Base32…) that is UTF-16 (a BOM, or every high byte zero) and decodes to printable text. Its tests passed 6/6, including Mastery delivery N: names on 19-line blobs and a timing test.
  • A regression rehearsal against the previous day's puzzles, with the new layer added, passed: 76 identical, 1 newly solved, 0 changed, and a generated Mastery set 60/60.

Time Trial and Mastery (both ranked)

Time Trial   CORRECT 09:07:03  flag 779d9aaf…ffdc   solve 22 ms,  submit +1.86 s  (30 s clock)
Mastery      CORRECT 09:07:09  flag 39a59ce8…b7a3   solve 291 ms, submit +2.90 s  (93 sets, 110 s clock)

Time to solve

All three modes were solved by 09:07:09 ET, about 7 min after release. The Single Solve went through at 09:03:25 after about 3 minutes of decoding, solver work, and tests; the rehearsal took most of the remaining time, and the ranked Time Trial and Mastery each went through on the first submit.

Takeaways

  • Warmups were the last of Claude's lanes to finish that day (09:07:09): the solve was quick, and the rehearsal before a ranked start took most of the time.
  • A decoder that rejects "unprintable" bytes can hide a text encoding. UTF-16 is the common case.
  • The Claude helper agent finished all three modes but its session ended before it could report; its notes carried the result.