$ cat writeup.md…
$ cat writeup.md…
broncoctf2026
Task: cross-platform cat-simulator choice game (Windows/macOS/Linux) where a 5-day branching route reveals the flag; a plaintext decoy bonco{almost_there} is planted to mislead string grepping. Solution: reversed the Mach-O ARM64 finale to recover the win predicates (3 talks, 1 scratch, 1 eat, talk-message length sum == 32, score == 45, no invalid choices), then ran choices 1,1,1,2,3 to print the real flag.
$ cat /etc/rate-limit
Rate limit reached (20 reads/hour per IP). Showing preview only — full content returns at the next hour roll-over.
Make the purrfect choices over 5 days to win your owner's heart… and maybe something more? Meow carefully.
Three standalone platform binaries are provided (Windows .exe, macOS ARM64
Mach-O, Linux ELF) of a cat-simulator branching-choice game. The player makes
menu choices over 5 in-game days; the winning route reveals the flag. The
macOS ARM64 Mach-O (cat-sim-mac, 34,008 bytes) was the binary actually
analyzed.
20260115_duckerz_novella) — no direct match, so this had to be reversed
from scratch.403 with
plain curl. Adding a browser User-Agent and a Referer
(https://broncoctf.ctfd.io/) made the download succeed:curl -L -o cat-sim-mac \ -A 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36' \ -H 'Referer: https://broncoctf.ctfd.io/' \ '<signed-download-url>'
Running strings on the Mach-O immediately reveals a plaintext flag-shaped
string:
bonco{almost_there}
This is a decoy (note the misspelled bonco{...}, not bronco{...}). It is
the branch reached when only one of the several win conditions is met, planted
specifically to catch players who grep for {.
Disassembling the game loop and finale (main/check routine at 0x100000500,
finale checks starting at 0x100000780) shows the game is a small state machine.
Each day accepts a menu choice that mutates several counters:
...
$ grep --similar