Keyboard-first pentesting firmware for the M5Stack Cardputer-Adv. 164 features across six radio bands plus wired Ethernet. Sub-GHz. 2.4 GHz. LoRa. WiFi. BLE. Zigbee. RJ45. All from your pocket.
A pentest deck is only as good as the moment you actually need it. This pass is all about reliability: a full memory safety audit, a real heap budget so the radios stop starving each other on cold boot, and an active indicator on every screen you wait on so nothing ever reads as a hang.
Four fronts, one goal: a deck you can trust in the field.
Eleven memory safety and lifecycle bugs traced and fixed: use after free, double free, unchecked allocations, and teardown races that crashed features mid run. Closed at the source.
The radios share a tight heap. A heap budget guard plus the removal of idle BSS and DMA hogs stopped the cold boot WiFi scan from dying on ENOMEM, so scans come up on the first try.
Every scan, connect, and capture screen now animates while you wait: a live radar sweep and a moving count, or a labeled working frame where a radio call has to block. No more guessing whether it hung.
Portable logic carries native unit tests that run off device, so the safety fixes stay fixed. Green on the host before it ever reaches the metal.
The unglamorous work that separates a demo from a tool: it comes up, it stays up, and it always tells you what it is doing.
Press k from the root menu and the Cardputer becomes a real hardware security key. Not a wrapper around a library β the U2F and CTAP2 stacks are hand written on the ESP32-S3. It registers and authenticates as a FIDO2 and U2F key over USB, creates on device passkeys, and signs in usernameless. Every signature it produces is checked against Yubico's own reference library.
One feature key on the Cardputer. The whole FIDO protocol underneath it, written from scratch.
U2F and CTAP2 implemented from scratch on the ESP32-S3: CBOR, COSE key encoding, ECDSA over NIST P256, attestation objects, authenticator data. No off the shelf FIDO library. Credential private keys never leave the device.
It enumerated as a FIDO device but went silent. I put live packet counters on the Cardputer screen, traced the fault to the Arduino USB layer jamming the IN endpoint on its first reply, and fixed it by driving TinyUSB directly. That one bug was the line between a device that looks like a key and one that is a key.
A portable protocol core carries native unit tests over the CBOR, COSE, and command logic. Then the real device is checked end to end against python-fido2. Green on the host, verified on the metal.
A commercial key is a blind button. This one has a screen and a keyboard, so approval happens on the device itself, and it opens the door to showing you which site is asking and taking a PIN on device. Hardware a sealed key cannot match.
Lives in src/features/kerberos* and lib/kerberos_core. Design, plan, and full test suite in the repo. Built and verified in a single day. It guards your own keys, on your own device.
The biggest single drop since 0.5.0. Argus finally has a real character β a 96x96 mood sprite that watches every handshake and shifts mood live. Six full themes (POSEIDON / MATRIX / E-INK / SYNTHWAVE / PHANTOM / BLOOD). Seven idle screensavers keyed off the active theme. Carousel menu style with cyberpunk pictographs. Ambient procedural motion painted behind every menu draw. The whole device feels alive.
Twelve mood portraits (Watching, Pleased, Annoyed, Resigned, Calculating, Old Fury, Sleeping, Reflectiveβ¦). Mood-mapped to hunt state β Argus sleeps when idle, gets pleased on catch, fully unhinged on Feral burst. Sprite is cached to internal SRAM to dodge MMU stalls during raw-TX.
POSEIDON, MATRIX, E-INK, SYNTHWAVE, PHANTOM, BLOOD. Magenta splashes across the dashboard chrome, matrix rain on a 4x speed-up, ambient procedural motion painted under every screen. Carousel menu style toggles in System β big-card single-focus with pictograph icons.
Bruce's pinned libnet80211.a crashes Arduino's WiFi.softAP() in ieee80211_hostap_attach +0x2c. New path bypasses Arduino entirely β esp_bt_controller_mem_release(BTDM) β raw netif β 4/16 buffer init β esp_wifi_set_config(WIFI_IF_AP) β post-start channel set. Portal, Beacon Spam, Evil Twin all back on-air.
Sonar sweep, port scan, hex cascade, terminal crack, neural arc, glitch BSOD, tide waves. Kicks in at 2 min idle, pulled from a pool keyed off the active theme. Pick your favorite at System β Screensaver.
Sour Apple, Spam, Karma, Flood, FindMy refactored from xTaskCreate (silent rc=-1 because NimBLE eats 4 KB of heap) to cooperative ticks called from each feature's UI loop. Every nearby phone now sees the spam. Confirmed against iOS + Android.
TRIDENT C5 satellite jumps to wire protocol v3 β 9 new commands (clients hunt, beacon spam, probe sniff, deauth detect, karma, AP clone, spectrum, CIW). Critical fix: C5 now sends a zero-payload terminator when a scan finishes so POSEIDON stops spinning forever on empty results.
Plus IR LED polarity finally fixed (active-HIGH, not active-LOW), Samsung remote codes verified against Flipper-IRDB, Evil Twin, AP Signal Test, BLE BlueDucky, SATCOM Tracker, Drone Remote ID, Surveillance Hunter, Defensive Monitor, and four nRF52 hat features. Full changelog on GitHub.
Press j from the root menu. Full wired/wireless LAN attack suite with a pirate UX β DHCP starvation, rogue DHCP (STA + AP), Responder (LLMNR/NBT-NS/SMB), WPAD PAC harvest, on-device NTLMv2 cracker. No PC tether. No Pi server. Pocket-sized.
Six modules behind one menu key. Phase 1 shipped in v0.3, phase 2 in v0.4.
Floods the network's DHCP server with random-MAC Discover/Request cycles until the pool exhausts. Live counters. Auto-detects exhaustion on NAK β₯ 20.
Races the real server with our own Offer/Ack (STA mode) or is the DHCP server for clients on our SoftAP (AP mode). Gateway + DNS poisoning for chained MitM.
LLMNR + NBT-NS name-poisoning plus SMB1 NTLMv2 Type-2 builder. Captured hashes logged to SD in hashcat mode-5600 format. Feed directly to the on-device cracker.
Serves PAC file on port 80 + HTTP 407 Proxy-Authenticate challenge. Windows clients auto-fetch WPAD, auto-auth with current domain creds.
Pure-C HMAC-MD5 wordlist runner. Reads hashcat-5600 lines from SD, tries each password. No PC needed. Seeds a starter wordlist on first run.
Own renderer β list / grid / carousel views, RaspyJack-faithful info pages, screensaver, 7-sprite pirate icon pack baked from PNG via tools/sprite_sheet_to_icons.py.
Every file in src/features/saltyjack/ opens with an attribution header crediting @7h30th3r0n3. Authorized testing only β hunt your own LAN.
Press W in the BLE menu. Scans for Google Fast Pair accessories β Sony XM5, Pixel Buds Pro, Jabra, JBL, Marshall, Nothing, OnePlus, Soundcore, Logitech β and probes each one for CVE-2025-36911. Vulnerable firmware responds to a Key-Based Pairing write even when it's not in pairing mode, silently letting an attacker take over the device in about ten seconds.
Active scan for Fast Pair service UUID 0xFE2C. Classifies each hit as pairable (spec-compliant) or in-use (shouldn't accept pairing β the vulnerable column). Model-ID lookup names the device on-screen.
secp256r1 ephemeral keypair via mbedTLS (hardware accelerated on ESP32-S3). AES-128-ECB encrypts a valid Key-Based Pairing plaintext. 80-byte envelope lands on the target's KBP characteristic.
Response in 3 seconds = VULNERABLE. Silent drop = patched. When we have the accessory's anti-spoofing pubkey, we decrypt the response and extract the hidden BR/EDR MAC. Logged to /poseidon/whisperpair.csv.
Probe-only. ESP32-S3 has no Classic Bluetooth radio so the full attack (bond + HFP mic capture + Find Hub registration) needs external hardware. Roadmap: nRF52 companion hat closes the loop. Authorized targets only β patches are rolling out unevenly, scan your own gear.
The flagship in the pipeline turns the TRIDENT C5 into a through-wall sensing radar. Beyond it: a real nRF52840 BLE dongle, Thread/Matter recon, and the Hydra RF hat sweep. Everything below is planned, not promised.
USB-CDC nRF52840 dongle for full BLE 5.0 sniffing, LE Secure Connection attacks, Coded PHY S=8 long-range, and direction finding. The S3 can scan and spam BLE but can't MITM a real pairing β nRF52 closes that gap. The four nRF52 features (scan, scout-strike, MITM relay, WiFi+BLE combo) shipped in v0.6.0 against a Feather hat; v0.7 hardens the path with a dedicated dongle.
Dual-core PBKDF2-SHA1 runner that eats .22000 files straight from SD. Seeded wordlist, custom dictionary support, resume-from-last-line. No PC tether. Listed here because testers keep asking and we have the hashcat-format captures already.
Dedicated Hydra RF hat regression sweep β CC1101 RF / nRF24 mousejack / sub-GHz replay / Pocket SDR all queued for hardening once the hat is on the bench.
TRIDENT's 802.15.4 radio already sniffs Zigbee. Next step: passive Thread discovery, node enumeration, commissioning-invite detection, Matter bridge fingerprinting. Output to SD as structured JSON.
Design sketch, not code. Future companion drop-box on a Banana Pi BPI-M4 Zero running hcxdumptool + WPA2 cracker + Bjorn-style action DAG. POSEIDON would act as the USB-C control client. No ETA, no implementation today.
Full timeline on the roadmap page. Want to shape priorities? File a GitHub issue.
Six sections, each its own page. Pick what you care about β there's a lot here.
Flash with M5Burner, esptool, or build from source with PlatformIO. Full walkthrough on the install page.