01 ·You don't need permission to start
The gate you are waiting at is not locked. The one that actually matters is somewhere else entirely.
02 ·How to learn while using AI
It has never been easier to learn with AI. The key is how you use it. This example uses Claude Code to learn gdb
03 ·Abusing eBPF, Part 1: What even is eBPF?
What eBPF actually is, why it is interesting from an attacker's seat, and a first counter running in the kernel with Rust and aya.
04 ·Abusing DNS, Part 7: Who is in charge here?
The NS records that make a subdomain yours, and the delegation that lets any resolver on the internet find your server.
05 ·Abusing DNS, Part 6: It's all about who you know
Routing queries through the host's own resolver instead of straight at our server, so the traffic looks like everyone else's.
06 ·Abusing DNS, Part 5: Client says what?
Sending arbitrary data the other way, packed into the 63 characters a single DNS label will carry.
07 ·Abusing DNS, Part 4: Let the fun begin?
Getting real data out of a protocol built for tiny answers, by chunking it across repeated TXT queries.
08 ·Brain explode: AI is getting a little scary
A PE checksum problem, three AI tools, and the one that went and read the docs instead of inventing functions.
09 ·Abusing DNS, Part 3: What do you want?
The client side: a Rust CLI that asks our own DNS server for records, so we stop leaning on dig to test it.
10 ·Abusing DNS, Part 2: Serving up some fun
Building a DNS server in Rust that answers real queries — the first working piece of a key-value store that talks over DNS.
11 ·Abusing DNS, Part 1: How does DNS do what it do?
How DNS resolution actually works, and why a protocol every network lets out is such a useful place to hide data.
12 ·Spooky simple Python tricks
The handful of Python tricks I reach for almost daily to reshape, encode and explore data.