Hi, I'm

Chris Stahly

I hack shit(and listen to space trash)

Reverse engineer and application security specialist with 20+ years breaking, protecting, and understanding software. OSCP certified. Purdue CS.

P25 digital voice

Live APCO P25 Phase II decoding off a local HackRF. OP25 demods the digital voice, a Python web server handles talkgroup routing, audio archiving, and live streaming, with a web dashboard and iOS companion app on top.

  • //Hardware · HackRF One · 8.8 cm V-dipole
  • //Decoder · OP25 (GNU Radio-based P25 stack)
  • //Server · Python, talkgroup routing, audio archive, live stream
  • //Web app · Live activity feed at p25.sadbabyrabbit.com
  • //iOS app · Native companion for browsing and playback
connecting…

Aircraft, two stations, one map

Two ADS-B receivers. One in a in , one in . Both decode 1090 MHz Mode S off dump1090. Every marker is a position one of them is hearing right now, colored by which one caught it. Arrowheads point along the track.

▲ Destin 0·▲ Indiana 0·0 aircraft live

·· refreshes every 8s · tap a station to highlight its planes, tap a plane for details0 live

Marine traffic off the Gulf

A discone on the Florida coast hears every ship and boat in VHF range. AIS-catcher decodes both marine channels at once, plots them, and forwards the traffic to MarineTraffic and the other aggregators.

  • //Hardware · Nooelec NESDR SmarTee v5 ·
  • //Decoder · AIS-catcher, dual channel, 161.975 / 162.025 MHz
  • //Feeds · MarineTraffic · VesselFinder · aiscatcher.org
  • //Site · Destin, FL. Gulf coast, in a
connecting…

Home mood engine

One full day, clockwise, starting where the engine starts its own. Each band is the color the lights were holding, and a thinner band is a dimmer one.

reading the engine

reading the house…

Quest 1 to postmarketOS

A first-generation Quest is a decent computer welded to an OS you do not control. The bootloader had just become unlockable, and the community Linux port existed but did not boot.

Snapdragon 835, dual 1440 by 1600 panels, four global-shutter cameras · 4.4.205. systemd will not boot on it, so OpenRC. · 19.5 to 72 per second. None of 1,200 intervals over 25 ms.

Stereo VR view from the headset: wireframe cube on a curved grid floor, diagnostics overlay, live camera panel
Straight off the headset's framebuffer. Both eyes, pre-warped for the lenses. The overlay line with the device's address is blacked out.
Stereo wireframe cube and grid floor with an overlay reading 89.8 frames per second
The grid curves because the lenses bend it back straight.

Warren

Say the phrase and audio streams to a server in the house, which transcribes it, asks a model and answers out loud. Nothing leaves the building. The same microphone feeds a listener that groups speech into conversations and writes each one up.

ESP32-S3 and a MEMS microphone on a 58 by 42 mm board of my own · Trained from scratch on synthesized speech. 62 KB. · Voice detection, Whisper, speaker embedding, grouped on a three-minute gap

Front copper and silkscreen of the Warren board: ESP32-S3 module, USB-C, castellated edge pads and a keep-out under the antenna
Front copper. The clear rectangle at the left is the antenna keep-out, which no trace or pour is allowed to cross.
Back copper of the Warren board with the pin map printed in silkscreen next to the header
Back copper. The pin map is printed next to the header so the board documents itself.
The sadbabyrabbit line drawing that is etched into the back of the board as bare copper
This goes on the back as bare copper, by leaving a hole in the solder mask in the shape of the drawing.

Fathom

A Swift rewrite of Disk Inventory X, which has been unmaintained for years. Every file is a rectangle sized by how much room it takes.

838 GB, 9,142,686 files, 1,277,267 folders, 48.4 seconds · Bulk directory reads across eight workers. Eight is the measured sweet spot. · About 60 bytes a node, depth-first, in flat arrays

Fathom showing a whole Mac disk as a treemap of thousands of shaded rectangles
A full scan of this Mac: 838 GB in 48.4 seconds, with the unreadable folders counted and named rather than ignored.

Play Lex, five by five

A whole game on a small board. Drag tiles out, or tap a tile and tap a square. First word covers the middle. Lex is the same opponent as the real game, reading the same dictionary.

loading the word list

Regexword

Every row and column is a pattern. Fill the grid so all of them match at once. The real ones are crossword grids, black squares and all.

0 of 16 filled

^[DFH][MOR][BEF][MNP]$^[ACI]+$^.[KLNO][ACD][PR]$^(.)[VXY]\1[BEFH]$
^(CH|FI)(VF|SH)$
^O[IK]L[YZ]$
^[EH][AB]CH$
^[PQ]I[PQ]E$

Tap a square and type. A clue goes green when its line matches, red when it cannot.

The full grids

Builds

Radios, reverse engineering, home automation, a word game. Source is linked where the repo is public.

  • Police and fire scanner

    One radio follows both county trunked systems, transcribes every transmission, and groups them into incidents on a map.

    • SDR
    • OP25
    • Whisper
  • Scanner for CarPlay

    The native client for the scanner: the same incident map and live audio, on the dashboard screen.

    • Swift
    • CarPlay
  • Weather satellite capture

    Predicts the pass, records it, decodes it, judges whether it came out, and publishes the good ones. It runs unattended.

    • RTL-SDR
    • LRPT
    • Python
  • ORBCOMM fixes

    These satellites broadcast their own GPS position. This is where they said they were.

    • RTL-SDR
    • 137 MHz
  • Aircraft, two stations

    One receiver in Indiana, one in a weatherproof box on a Florida roof, on the same map.

    • ADS-B
    • 1090 MHz
  • Ships off the Gulf

    A discone on the Florida coast hearing every vessel in VHF range, both AIS channels at once.

    • AIS
    • VHF
  • Quest 1 to postmarketOS

    Putting Linux on a locked VR headset, then writing a stereo renderer, lens correction and head tracking from nothing.

    • Reverse Engineering
    • ARM64
    • Linux
  • Wordrack

    A crossword tile game with a computer opponent. No accounts, no install. Send someone the link.

    • Game
    • Node
  • Home mood engine

    Lighting that follows the day. A color rotation runs continuously, and what is happening in the house bends it.

    • Home Assistant
    • Python
  • Warren

    A wake-word speaker on a board I generated from a script, and a listener that groups the day's speech into conversations.

    • ESP32-S3
    • Whisper
    • KiCad
  • Fathom

    A Metal treemap of a whole volume that reconciles what it can see against what the system claims is used.

    • Swift
    • Metal
    • macOS
  • Wardriving rig

    A Pi that logs every Wi-Fi network and Bluetooth device it hears with a position, starts and stops on geography, and writes up each drive.

    • Kismet
    • BLE
    • GPS
  • Latch

    An iPhone panel for the house on the Camera Control button, which opens from the lock screen.

    • Swift
    • iOS
    • ExtensionKit

About

A bit about me

I take software apart to see how it works, then either break it or make it harder to break. Mostly at the binary level.

Twenty years of it: binary analysis, crypto architecture, anti-tamper, anti-cheat, threat modeling, and running security engineering at the director level. The useful part of the job is usually working out what is actually at risk, which is rarely what anyone expected.

  • ▸Reverse Engineering
  • ▸Cryptography
  • ▸Application Security
  • ▸Threat Modeling
  • ▸Binary Analysis
  • ▸Anti-Tamper
  • ▸Penetration Testing
  • ▸OSCP

Work

Selected work

  • Mobile Application Protection

    Anti-tamper and anti-reverse-engineering for banking, health and gaming apps. Binary instrumentation, runtime integrity checks, crypto obfuscation. It shipped on hundreds of millions of devices.

    • Binary Analysis
    • Anti-Tamper
    • Cryptography
    • iOS/Android
  • Medical Device Security Program

    Built the security engineering program at a regulated medical device maker, starting from nothing: threat modeling, vulnerability assessment, code review, and a pen-test framework that reported numbers the executives could act on.

    • Threat Modeling
    • Penetration Testing
    • Risk Assessment
    • SDLC
  • Game Anti-Cheat & DRM

    Anti-cheat and DRM for desktop and mobile games. Each protection plan was built from that game's own threat data: anti-debugging, license enforcement, integrity checks, and hiding the assets worth stealing.

    • Anti-Cheat
    • DRM
    • Reverse Engineering
    • Gaming

Contact

Get in touch

Mail reaches me. Say what you want.

Built with ✨magic✨ · 2026