$ cat writeup.md…
$ cat writeup.md…
asisctf2026
Task: a headerless 298 MB float32 IQ capture in four blocks (real baseband, constant-envelope PM, conjugate sideband pair), each an SSTV-like image holding one strip of a QR code. Solution: Robot36 sync-anchored FM demod, bang-bang PM period decode, strip stitching into a V3 QR, pyzbar.
$ cat /etc/rate-limit
Rate limit reached (20 reads/hour per IP). Showing preview only — full content returns at the next hour roll-over.
Organizer description fragments as recorded in working notes: "…an unusual transmission… …poor condition… …the signal is a mess."
English summary: the entire artifact is one ~299 MB headerless file, challenge.raw inside an xz archive — a raw little-endian float32 stream with no container, no header, and no stated sample rate. The goal is to find and decode the payload carried by this deliberately mangled "transmission".
Artifact facts: challenge.raw.xz → challenge.raw, 298,828,800 bytes,
sha256 c41eb259855150b97cb6ac8bb99268769dd4385936e59af8a38a6140cc529307.
Interpreted as interleaved float32 I/Q: 74,707,200 floats → 37,353,600 complex samples. Quartering the stream shows four structurally distinct blocks:
| block | span | structure | spectrum |
|---|---|---|---|
| 0 | 0–25% | strictly real (Q == 0 exactly), mean ≈ 0.5, swings ±0.32 | audio-like, energy at DC |
| 1 | 25–50% | complex, constant envelope |s| ≈ 0.90 (std 0.013) → pure phase modulation | energy at DC |
| 2 | 50–75% | exact conjugate of block 3 | one-sided lines at −1900/−2300 Hz |
| 3 | 75–100% | exact conjugate of block 2 | one-sided lines at +1900/+2300 Hz |
The conjugacy is exact (correlation 1+0j over multi-million-sample prefixes, MSE ≈ 2e-20): blocks 2 and 3 are the lower and upper sideband copies of one real signal. That literal reading of the title — baseband + LSB + USB + one odd block out, each needing separate "surgery" — is the core insight of the challenge.
...
$ grep --similar