$ cat writeup.md…
$ cat writeup.md…
ASIS CTF 2026
Task: a 9.4 MB obfuscated C source and a stripped RISC-V 64 binary validating a 28-byte flag. Solution: decode whitespace/comment steganography, invert a custom ARX hash for key chunks, reimplement the 32768-word array VM, and solve the final checker as a GF(2) linear system.
$ cat /etc/rate-limit
Rate limit reached (20 reads/hour per IP). Showing preview only — full content returns at the next hour roll-over.
Organizers provided two files (no interactive service):
scouting_report.c— a 9.4 MB C source file, 345,236 linesbeyond.elf— a stripped RISC-V 64 (RV64) PIE Linux binary
English summary: beyond.elf accepts exactly one 28-byte command-line argument — the flag candidate — and prints a success message only for the correct value. scouting_report.c is "a C file that compiles, but that is not its only purpose": its layout (indentation widths, the shape of survey(w^w^...) call chains, comment lengths, blank-line rhythm) smuggles a 334,767-byte data container. Recovering the flag requires four cooperating stages:
The title is a hint at the finale: after the three visible stages, the VM is silently reset and re-run a fourth time.
The source consists of encoded lines of the form
survey(w^w^w^w^w);/*hhh*/
separated by blank lines. Every encoded line carries exactly one byte:
byte = indent | ((wcount - 1) << 3) | (comment_index << 6)
...
$ grep --similar