Repository navigation
Releases: 7h30th3r0n3/Flipper-EvilRelay
Release list
v1.2.0 - EMV reader + ESP32 app-opener
Adds a standalone EMV reader to the Android app and an "app-opener" captive portal to the ESP32 bridge.
Android reader (v1.12)
- New EMV Info mode: read-only, offline EMV read (SELECT PPSE -> AID -> GPO -> READ RECORD) with a BER-TLV parser, shown on a styled payment-card panel (PAN, expiry, cardholder, scheme, AID, Track 2, country, currency). For your own cards.
- Persistent reader link: the TCP connection to the bridge/emulator opens as soon as Reader mode is active (not per card), so the emulator sees the app before any card; cards are served over one link and a swap re-sends IDENT.
- Faster card-removal detection, UID refresh, "Card lost/removed" feedback, evilrelay:// deep link, log de-dup.
ESP32 bridge
- Captive app-opener: DNS -> AP IP + HTTP :80. Before a reader connects it serves a page linking to evilrelay://relay (opens the app); once a reader is connected it answers HTTP 204 so Android keeps the AP and stops offering to switch to mobile data.
Flipper FAP: unchanged (it already re-arms emulation on a changed IDENT, so card swap works as-is).
Assets
- evil_relay.fap: Flipper app (copy to SD apps/NFC).
- EvilRelayESP32-C3.bin: ESP32-C3 bridge, merged image, flash to offset 0x0.
- EvilRelay-v1.12.apk: Android reader (debug-signed).
EvilRelay v1.1.1 "stability+"
Robustness backport on top of v1.1 step feedback.
FAP:
- seq-matched RESP: a late response to a timed-out command is dropped instead of being served as the answer to the next command.
- 6F00 on an oversize reader-chained command (never relays a truncated APDU).
- seq is passed through the relay callback.
ESP32 bridge:
- ESP-NOW reassembly double-buffer: a completed message is copied out before the recv callback can refill it (plus the dup-safe fragment bitmask from v1.1).
These address the relay dropping / 0-response behaviour observed under repeated back-to-back transactions. Step-by-step feedback UI (Flipper multi-view + STATUS frames) unchanged from v1.1.
Assets: evil_relay.fap (Flipper), EvilRelay-v1.8.apk (Android), EvilRelayESP32-C3.bin (ESP32-C3 app image, flash at 0x10000).
EvilRelay v1.1 "stability"
Step-by-step relay feedback on both sides.
- Flipper FAP: modern multi-view UI. Status shows the chain live - Bridge -> Reader -> Card (UID) -> Relay (APDU count + RTT) - with a bridge heartbeat, uptime and rx counters. About view carries version, repo and license. Consumes new STATUS frames from the bridge.
- ESP32 bridge: emits STATUS frames (bridge heartbeat, reader connected over Wi-Fi/ESP-NOW, reader lost). ESP-NOW reassembly now tracks distinct fragment indices via a duplicate-safe bitmask.
- Android reader: persistent connection to the bridge, so "connected" and "card scanned" are distinct steps (the chain lights up at connect, not only at read). 3 s connect timeout; HCE response delivered asynchronously.
Assets: evil_relay.fap (Flipper), EvilRelay-v1.8.apk (Android), EvilRelayESP32-C3.bin (ESP32-C3 app image, flash at 0x10000).
Flipper-EvilRelay v1.0
ISO-DEP NFC relay for the Flipper Zero. Three ready-to-flash components:
evil_relay.fap: the Flipper FAP. Drop it inapps/NFC/on the Flipper SD (built against the Momentum SDK, Target 7 / API 87.1).EvilRelayESP32-esp32c3.bin: the ESP32-C3 bridge. Flash at offset 0x0 withesptool.py --chip esp32c3 write_flash 0x0 EvilRelayESP32-esp32c3.bin, or any ESP web flasher. Generic ESP32-C3, 4 MB.EvilRelay-v1.8.apk: the Android reader (NFC phone; debug-signed, sideload).
See the README for wiring and usage. Authorised and lawful testing only.