2026

Posts from this year

Posts

  • The CSC 2026 Payslip Portal: Three Bugs Where the File You Can Write Is the File You Run

    Part two of the CSC 2026 finals. After the ransomware recovery came the attack-and-defence round, and one service fell to a chain of three — an unauthenticated CBC cookie became a padding oracle that forged an HR role, an HR-only template preview handed the live PDF generator to a Go template and turned it into a file write, and that file write landed on the one Go source the service re-interprets on every payslip.

    13 min read 2,576 words Category: Security Tags: ctf, web, cryptography

  • Reversing the CSC 2026 Ransomware Unlocker: A Fake gdb, a Salt Born in a SIGTRAP Handler, and an Invertible Check

    How our team recovered the files a CTF ransomware encrypted at the CSC 2026 finals, by reversing the 4.9 KB unlocker it left behind, finding the salt it computes only inside a SIGTRAP handler, inverting its flag check, and rebuilding its SHA-256 and RC4 key schedule in Python, then restoring 43 files on six hosts from the organisers' inventory with a runbook and two scripts.

    20 min read 3,908 words Category: Security Tags: ctf, reverse engineering, ransomware

  • EEG Basics for Machine Learners: Sampling, Filtering and Band Power

    The signal-processing vocabulary needed before training anything on EEG, worked through on a clearly synthetic signal in NumPy, with the pitfalls that quietly inflate reported accuracies.

    11 min read 2,039 words Category: AI Research Tags: neuroai, bci, signal processing

  • Binary Hardening on Linux: What Canaries, NX, ASLR, RELRO, FORTIFY and CET Actually Stop

    A tour of the compiler, linker and kernel mitigations inside a modern Linux binary, what each one prevents and does not prevent, and how to verify all of them with readelf, objdump and checksec.

    16 min read 3,078 words Category: Security Tags: binary security, linux, compilers

  • TCP from the Wire: Reading a Real Handshake

    A tcpdump capture of one HTTP request over loopback, packet by packet: the three-way handshake, sequence numbers, window scaling, teardown, and where flow and congestion control fit in.

    14 min read 2,720 words Category: Software Tags: networking, tcp, tcpdump

  • Lock-Free Queues and Memory Ordering: An SPSC Ring Buffer Measured Against a Mutex

    A single-producer single-consumer ring buffer in C11 atomics, the happens-before argument that makes acquire/release enough, ABA and MPMC caveats, and a measured comparison with pthread_mutex queues.

    11 min read 2,106 words Category: HPC Tags: lock free, atomics, memory ordering

  • Contrastive Learning Intuition: InfoNCE, Temperature, Alignment and Uniformity

    What the InfoNCE loss actually optimizes, why the temperature matters, and a NumPy experiment that trains a two-dimensional embedding with a hand-derived gradient and shows the before and after.

    8 min read 1,558 words Category: AI Research Tags: representation learning, self supervised, contrastive

  • conero: Spending One Note Eight Times Because the Subgroup Check Is in the Wrong Function

    A write-up of the blockchain challenge conero from the Codegate 2026 qualifiers, where a patched geth implements Monero-style ring signatures, writes a careful canonical-key-image check, and then verifies proofs in a function that never calls it — so one note yields eight key images and drains the pool.

    9 min read 1,724 words Category: Security Tags: ctf, blockchain, cryptography

  • GPU Memory Hierarchy and Occupancy: Why a Tiled Kernel Is Just Cache Blocking by Hand

    The CUDA execution model, global versus shared memory, coalescing, bank conflicts and occupancy, with a tiled matrix multiplication and a block reduction written out in full and traced back to the cache ideas of the CPU posts.

    16 min read 3,196 words Category: HPC Tags: cuda, gpu, memory hierarchy

  • Small ROS: Eighty-One Random-Oracle Equations That Collapse Into One Subset-Sum

    A write-up of the crypto challenge Small ROS from the m0leCon 2026 finals, where choosing the rows of an overdetermined random-oracle system turns eighty of its equations into coordinate lookups, leaves one, and reduces the whole verifier to a modular subset-sum that a lattice solves.

    9 min read 1,712 words Category: Security Tags: ctf, cryptography, lattices

  • A Post-Quantum Cryptography Primer: Shor, Grover, ML-KEM and the Hybrid Handshake

    Which parts of today's cryptography a large quantum computer would break, what NIST standardised in FIPS 203, 204 and 205, how X25519MLKEM768 protects TLS 1.3 sessions, and how to try ML-KEM yourself with OpenSSL 3.5.

    13 min read 2,406 words Category: Security Tags: cryptography, post quantum, tls

  • Twelve-Factor on a Single VM

    Running a real application on one virtual machine with Docker Compose, environment-based config, log streams, automatic TLS and tested backups, without pretending it is a cluster.

    11 min read 2,063 words Category: Software Tags: devops, docker, infrastructure

  • flagchecker3: A Bytecode VM That Decrypts Itself Only If You Already Know the Flag

    A write-up of the Android reversing challenge flagchecker3 from VSLCTF 2026, where the native checker runs a bytecode VM whose instruction stream is XOR-encrypted under a key that every comparison result feeds back into, so a wrong byte derails the decryption and turns the obfuscation into an oracle.

    8 min read 1,474 words Category: Security Tags: ctf, reverse engineering, android

  • What Happens at Generation Time: KV Cache, RoPE and Sampling

    The decode loop of a decoder-only transformer explained from the memory up, with KV-cache arithmetic for 7B-class models, a NumPy check of rotary embeddings, and temperature and top-p sampling.

    10 min read 1,931 words Category: AI Research Tags: llm, inference, transformers

  • MPI from Zero: Ranks, Messages and a 1-D Heat Equation with Halo Exchange

    What an MPI program is, how point-to-point and collective communication differ, the deadlock everyone writes once, and a complete heat-equation solver with ghost cells and non-blocking overlap, compiled and checked against Open MPI on a single laptop.

    15 min read 2,899 words Category: HPC Tags: mpi, distributed memory, c