Zurรผck zu den Updates
Dieser Inhalt wird auf Englisch angezeigt. Eine รœbersetzung fรผr Ihre Sprache ist noch nicht verfรผgbar.
New releaseAug 20, 2026

Specter-FlipperZero v2.7

๐Ÿ‘ป Specter โ€” passive 13.56 MHz NFC reader/skimmer bug-sweep for Flipper Zero. Counter-surveillance EMF meter using the onboard NFC chip. No extra hardware.

Teilen

Specter โ€” NFC reader & skimmer bug-sweep for Flipper Zero

Specter ๐Ÿ‘ป

Sweep for the readers you can't see.

Flipper Zero Version 2.7 Onboard NFC No extra hardware ufbt MIT

Specter turns your Flipper Zero into a pocket counter-surveillance bug-sweep for active 13.56 MHz NFC readers. It passively listens for the RF field that a powered-on reader is constantly emitting โ€” a hidden card skimmer slipped into a payment terminal, a covert reader behind a door panel, a rogue logger taped under a desk โ€” then tells you where it is, what kind of thing it is, whether the room is clean, and โ€” left on watch โ€” the moment one appears while you're away. It never transmits.

The readers are invisible. Specter makes them visible.


๐Ÿ“Ÿ On the Flipper

Specter screens

Sweep (quiet) ย ยทย  Sweep (reader locked) ย ยทย  Fingerprint ย ยทย  Survey (running) ย ยทย  Survey (verdict)
Watch (clear) ย ยทย  Watch (reader!) ย ยทย  Logbook ย ยทย  Calibrate ย ยทย  Settings


โœจ The five modes

Specter is five tools around one sensor. Each answers a different question, so the right one depends on what you are actually trying to find out:

ModeThe question it answersUse it when
๐Ÿ” SweepWhere is it?You suspect a device and want to pinpoint it by moving around
๐Ÿ”ฌ FingerprintWhat kind of thing is it?You have found an emitter and want to know how it behaves
๐Ÿ—บ๏ธ Site SurveyIs this room clean?You want one verdict for a whole space, hands-free
๐Ÿ›ฐ๏ธ Watch ModeDid one appear while I was away?You are leaving the Flipper somewhere to stand guard
๐Ÿ“– LogbookWhat did I find, and when?You are writing it up, or comparing today with last week

๐Ÿ” Sweep โ€” where is it?

Sweep โ€” reader found, meter pegged

What it does. A live EMF-style meter. Hold the Flipper flat and move it slowly over the thing you're checking โ€” a card terminal, a door reader, the underside of an ATM lip, a parcel, a desk. The needle rides the field strength in real time.

What you see.

  • The dial โ€” needle = live reading, the small dot = peak-hold (the strongest spot you've touched, so you can compare positions).
  • FIELD % โ€” the same reading as a number, with a โ–ฒ / โ–ผ trend arrow telling you whether the last half-second made things warmer or colder. When you're hunting, that arrow matters more than the number.
  • PK / C โ€” peak reading and how many separate contacts you've had.
  • Bottom strip โ€” the live waveform and your current sensitivity while quiet; it flips to a black โ— ACTIVE READER alarm bar with a proximity word the moment a carrier is detected.
  • Proximity โ€” FAINT โ†’ NEAR โ†’ CLOSE โ†’ STRONG โ†’ MAX. MAX means the meter is pegged: you're as close as this measurement can resolve.

Sound. Optional geiger clicks that speed up as you get closer, so you can sweep with the Flipper in your pocket and hunt by ear alone.

KeyAction
OKReset peak-hold and contact count
hold OKSave this reading to the logbook
LEFTCalibrate to the room's noise floor (3 s)

๐Ÿ”ฌ Fingerprint โ€” what kind of thing is it?

Fingerprint โ€” polling reader identified

What it does. Once Sweep has found something, hold the Flipper still against it. Fingerprint stops measuring proximity and starts timing the carrier's on/off edges, which is what actually distinguishes one kind of emitter from another.

What you see. A verdict, a confidence bar, and the evidence behind both:

ClassWhat it means in practice
CONTINUOUSThe carrier is held permanently up
POLLINGA fixed, crystal-timed poll cycle โ€” the period is shown in ms
INTERMITTENTBursty but irregular โ€” often a phone or a reader in use

Underneath are PER (poll period), BST (burst width), JIT (jitter) and DUTY (true duty-cycle), plus a logic-analyser pulse train of the raw carrier โ€” so the verdict is never something you have to take on faith. A genuine polling reader shows up as an unmistakable square wave.

A ~ before a timing means it's close to the 2 ms sampling floor, and the confidence is discounted to match.

KeyAction
OKSave the finding to the logbook
hold OKRestart the measurement

๐Ÿ—บ๏ธ Site Survey โ€” is this room clean?

Site Survey โ€” verdict

What it does. A timed sweep of a whole space. Start it, walk the room normally, and get a single verdict at the end โ€” no needle-watching.

What you see. A countdown and progress bar while it runs, then a verdict card:

  • CLEAN โ€” nothing crossed the noise floor
  • TRACE โ€” brief or faint hits; worth a slower second pass
  • ACTIVE READER โ€” something was genuinely up and emitting

โ€ฆwith MAX / AVG field, contact count, and FIELD % โ€” how much of the survey a carrier was actually up, which is often the most telling number of the four. Runs for 30 s, 60 s or 2 min, and logs the result automatically.

KeyAction
OKRun the survey again

๐Ÿ›ฐ๏ธ Watch Mode โ€” did one appear while I was away?

Watch Mode โ€” reader present

What it does. Stands guard indefinitely. Arm it, set the Flipper down, walk away. Where Sweep is you hunting and Survey is a fixed-length test, Watch just waits โ€” for minutes or hours.

What you see. A large elapsed clock and ALL CLEAR while nothing is there. The instant a reader appears the band inverts to READER PRESENT, the screen wakes, and the alarm sounds. The band is steady rather than flashing โ€” a small marker pulses instead, so it reads as live without strobing at you. After it passes, the screen keeps the evidence: HITS (how many separate contacts), PEAK, LAST (how long ago the most recent one was) and SEEN (total time a carrier was actually up).

Watch deliberately ignores stealth mode โ€” a dark, silent guard that never tells you it saw something would be worse than useless.

KeyAction
OKRe-arm โ€” clears the clock and counters

๐Ÿ“– Logbook โ€” what did I find, and when?

Findings are saved twice, from one action, so they're readable on the device and already a spreadsheet โ€” no export step to remember:

logbook.txt โ€” grouped, for the on-device viewerlogbook.csv โ€” one flat row per entry
2026-07-18 14:35:11
  SURVEY 60s ACTIVE max74โ€ฆ
2026-07-18 14:32:07
  READER POLLING 204msโ€ฆ
timestamp,type,detail
2026-07-18 14:35:11,SURVEY,60s ACTIVE โ€ฆ
2026-07-18 14:32:07,READER,POLLING 204ms โ€ฆ

Entries are tagged SWEEP, READER, SURVEY or WATCH and stamped from the Flipper's clock. Both files live in apps_data/specter/ on the SD card. Nothing ever leaves the device. Clear them from Settings โ†’ Clear logbook (confirmed first โ€” it's the one irreversible thing the app can do).


โš™๏ธ The supporting bits

๐ŸŽฏ Auto-calibration

Press LEFT on the Sweep screen and Specter listens to the ambient noise floor for 3 seconds, then sets the detection threshold just above whatever it measured โ€” saved as your Custom sensitivity. Every room has a different RF floor; this tunes to the one you're standing in rather than a number baked in at build time. Stand somewhere quiet when you run it.

๐Ÿ•ถ๏ธ Stealth mode

Keeps the screen and LED dark for the whole sweep, so the Flipper doesn't glow while you're the one doing the looking. Sound and vibration keep working โ€” the point isn't to disable the feedback you're sweeping by. Exiting a stealth screen re-lights the display, so BACK always lands you on a lit menu.

๐Ÿ“ Reading the meter

Why a reader you're touching doesn't emit 100% of the time. The detector measures one physical thing: what fraction of the time a 13.56 MHz carrier is up. But readers poll โ€” a short burst, a sleep, another burst. A typical terminal is only radiating 20โ€“35% of the time, so raw duty-cycle saturates around 30% no matter how close you get.

Showing that raw number on the gauge made a perfect detection look like a third of one. The meter is scaled against that real polling band instead:

Raw carrier dutyMeterProximity
3% (room noise)10%FAINT
12%40%NEAR
20%67%CLOSE
28%93%STRONG
โ‰ฅ30% (resting on a reader)100%MAX

The raw duty is never lost: the noise floor, auto-calibration and the Fingerprint screen's DUTY all still work in true duty-cycle, because those describe the signal, not your distance from it. Want the literal number? Settings โ†’ Meter โ†’ Raw.

๐Ÿ’พ Everything persists

Sensitivity, survey length, sound, vibe, LED, stealth, logging and meter mode are saved to the SD card the moment you change them. A sweep kit that forgets its setup is worse than no persistence at all.


๐Ÿง  How it works

Every powered-on NFC reader continuously pings the air with a 13.56 MHz carrier, waiting for a card to wake up. You can't see it, but the Flipper's NFC chip can: the ST25R3916 has a hardware external-field detector (the same circuit that lets the Flipper emulate a card and know when a reader is talking to it). Specter parks the chip in detect-only mode and samples that "field present?" bit ~500 times a second โ€” without ever switching on its own carrier.

That single bit, sampled fast enough, carries two independent signals:

flowchart LR
    R["๐Ÿ” Hidden 13.56 MHz reader / skimmer<br/>(constantly polling its field)"] -- "RF carrier" --> A

    subgraph FLIP["Flipper Zero โ€” Specter.fap"]
      A["ST25R3916 NFC chip<br/>external-field detector"] --> S["Sampler thread<br/>~500 samples/s"]
      S --> M["<b>How much?</b><br/>carrier duty-cycle<br/>peak ยท average ยท contacts"]
      S --> C["<b>What rhythm?</b><br/>burst / gap edge timing<br/>period ยท jitter"]
      M --> G["EMF gauge ยท waveform<br/>geiger clicks ยท LED ยท vibe"]
      M --> V["Survey verdict<br/>CLEAN / TRACE / ACTIVE"]
      C --> K["Emitter class<br/>CONTINUOUS / POLLING /<br/>INTERMITTENT + pulse train"]
      V --> L["๐Ÿ“– SD logbook"]
      K --> L
    end

How much โ†’ strength. Over a short window Specter measures what fraction of the time a carrier is present and smooths it into the FIELD %. A reader sitting right on top of the Flipper pegs the meter; a weaker or further one nudges it. That drives the needle, the proximity word and the click rate.

What rhythm โ†’ identity. Separately, every transition of that bit is timed. A reader that wakes for 20 ms every 200 ms produces a burst/gap pattern with almost no jitter, because its polling loop is driven by a crystal-timed state machine. Hand movement and RF noise are not that steady. That difference is what separates POLLING from INTERMITTENT.

The decision layers are tested on a real computer

The places where Specter turns numbers into a claim โ€” "this is a polling reader", "this room is clean", "this is what the needle should read" โ€” are pure C with no hardware dependencies, and they're pinned down by host tests rather than discovered on the device:

make -C test     # 300 checks: classifier, verdict, meter scaling, presence

๐Ÿš€ Install

No devboard, no firmware to flash โ€” it's a single .fap.

Option A โ€” prebuilt .fap (easiest)

  1. Grab the right .fap from the Releases page:

    Your firmwareFile
    Official / stockspecter.fap
    Unleashed, RogueMaster, Momentum or anything newerspecter-fw-dev.fap

    If the Flipper says APP:87 < FW:88 โ€” This app might not work, you have the wrong one โ€” take the other file. The app's API version is fixed when it's compiled, so a single build can't satisfy both firmware lines. It usually still runs if you press Continue, but the matching build won't ask.

  2. Open qFlipper, drag the file onto SD Card / apps / NFC /.

  3. On the Flipper: Apps โ†’ NFC โ†’ Specter.

Option B โ€” build it yourself with ufbt

# one-time
python3 -m pip install --upgrade ufbt

# from the repo root, with your Flipper plugged in over USB:
ufbt            # build specter.fap into ./dist
ufbt launch     # build, upload to the Flipper and open it
make -C test    # run the host tests for the pure logic

The .fap lands in dist/specter.fap; ufbt launch copies it to apps/NFC/ and starts it for you.

Icons in icons/, screenshots and the banner in images/ are generated โ€” regenerate with python3 tools_gen_icons.py, python3 tools_gen_mockups.py and python3 tools_gen_banner.py (needs pillow).


๐ŸŽฎ Using it

A sweep, end to end:

  1. Launch Specter. On the Sweep screen, press LEFT and hold still for 3 seconds to calibrate to the room's noise floor.
  2. Hold the Flipper flat and move it slowly across the thing you're checking โ€” a card terminal, a door reader, the underside of an ATM lip, a parcel, a desk.
    • Quiet / flat waveform โ†’ no active reader in range.
    • Needle climbing, clicks speeding up โ†’ you're approaching an emitter. Keep going toward the peak.
    • โ— ACTIVE READER + alarm border โ†’ an active reader is right here.
  3. Found something? Back out and open Fingerprint. Hold the Flipper still against it and let the cadence settle โ€” a few seconds is usually enough. Press OK to save the finding.
  4. Clearing a whole room instead? Open Site Survey, walk the space until the bar fills, and read the verdict.
  5. Leaving the area? Drop the Flipper in Watch Mode and it'll stand guard, waking and sounding off if a reader turns up while you're gone.
  6. Check Logbook for everything you've saved, timestamped โ€” or pull logbook.csv off the card into a spreadsheet.

๐Ÿ’ก Sweep a known-good reader first (your own phone doing NFC, or a contactless terminal you trust) to see what a strong, legitimate field looks like on the meter โ€” and what its fingerprint reads as. Then go hunting.

Controls

ScreenKeyAction
SweepOKReset peak / contacts
hold OKLog the current reading
LEFTCalibrate the noise floor (3 s)
FingerprintOKSave the finding to the logbook
hold OKRestart the measurement
Site SurveyOKRun the survey again
Watch ModeOKRe-arm (clear count and clock)
anywhereBACKUp a level

๐Ÿ”ฌ Honest limitations

  • 13.56 MHz (HF) only. Specter senses the NFC band โ€” the one used by contactless payment skimmers, most modern access readers, transit and hotel readers. It cannot see 125 kHz (LF) readers (older HID Prox / EM4100 door panels); the Flipper's LF path has no equivalent field-detect bit.
  • It senses a reader's carrier, not what it reads. Specter tells you an active reader is here, roughly how close, and what rhythm it polls on โ€” it does not decode, identify, or capture anything the reader does.
  • Strength is relative, not calibrated. FIELD % and the proximity words are a comparative "warmer / colder" guide for sweeping, not a measured distance in cm. It's a scaled reading of carrier duty-cycle against a typical polling band (see Reading the meter); a reader that polls unusually sparsely will read lower at the same distance, and one in continuous-wave mode will peg from further away.
  • The meter tops out. MAX means the carrier is up as much as this reader ever keeps it up โ€” past that point, closing in genuinely cannot produce a bigger number. Use the PK peak-hold to compare positions instead.
  • Cadence resolves to ~2 ms. That's the sampling period. Timings anywhere near it are shown with a ~ and the confidence is discounted accordingly โ€” Specter would rather flag its own resolution floor than quote a precise-looking number it can't stand behind.
  • CLEAN means clean at the sensitivity you chose. A dormant skimmer that only wakes on a real tap, or one that's shielded, stays invisible at any threshold. Absence of a reading isn't a guarantee of absence.
  • One radio at a time. Specter takes over the NFC chip while sweeping, so close any other NFC app first (it'll say NFC unavailable if something else holds the radio).

Specter is a defensive, listen-only tool โ€” it never transmits, never powers a field, never touches the reader. Use it to sweep your own POS area, door, desk or belongings, or hardware you're explicitly authorised to assess. You are responsible for how you use it. Know your local laws.


๐Ÿ—บ๏ธ Roadmap

  • Persist sensitivity / sound / vibe / LED across reboots
  • "Logbook" of detections with timestamps to the SD card
  • Background sweep with the screen off โ€” stealth mode
  • Adjustable threshold for finer range control โ€” auto-calibration + Custom sensitivity
  • Fingerprint an emitter by its polling cadence
  • Timed site survey with a room verdict
  • Export the logbook as CSV for reporting โ€” written live alongside the .txt
  • Long-run unattended watch mode with a wake-on-detection alarm
  • Make the meter use its full range against real polling readers
  • Warmer/colder trend arrow while hunting
  • Investigate an LF (125 kHz) coil-based reader sense as a separate mode
  • On-device logbook filtering by type

๐Ÿ—‚๏ธ Project layout

Specter-FlipperZero/
โ”œโ”€โ”€ application.fam               # Flipper app manifest (category: NFC)
โ”œโ”€โ”€ specter.c / specter_i.h       # app entry, wiring, alert feedback, stealth
โ”œโ”€โ”€ helpers/
โ”‚   โ”œโ”€โ”€ field_detector.{c,h}      # worker thread: samples the field-present bit,
โ”‚   โ”‚                             #   duty-cycle + edge timing + calibration
โ”‚   โ”œโ”€โ”€ emitter_classify.{c,h}    # pure: cadence -> CONTINUOUS/POLLING/INTERMITTENT
โ”‚   โ”œโ”€โ”€ survey_verdict.{c,h}      # pure: survey stats -> CLEAN/TRACE/ACTIVE
โ”‚   โ”œโ”€โ”€ field_scale.{c,h}         # pure: raw carrier duty -> full-scale meter
โ”‚   โ”œโ”€โ”€ present_hold.h            # pure: debounce presence across poll gaps
โ”‚   โ”œโ”€โ”€ specter_settings.{c,h}    # persisted settings (saved_struct)
โ”‚   โ””โ”€โ”€ specter_log.{c,h}         # SD logbook, RTC-stamped .txt + live .csv
โ”œโ”€โ”€ views/
โ”‚   โ”œโ”€โ”€ sweep_view.{c,h}          # the EMF gauge / waveform / alarm screen
โ”‚   โ”œโ”€โ”€ fingerprint_view.{c,h}    # classification card + pulse-train trace
โ”‚   โ”œโ”€โ”€ survey_view.{c,h}         # progress + verdict card
โ”‚   โ””โ”€โ”€ watch_view.{c,h}          # unattended guard: clock + count + alarm
โ”œโ”€โ”€ scenes/                       # scene-manager navigation
โ”œโ”€โ”€ test/                         # host tests for the pure decision layers
โ”œโ”€โ”€ icons/                        # 1-bit Flipper icons (generated)
โ”œโ”€โ”€ images/                       # banner + screen mockups (generated)
โ””โ”€โ”€ tools_gen_*.py                # regenerate icons / mockups / banner

๐Ÿ™ Credits

๐Ÿ“„ License

MIT ยฉ 2026 at0m-b0mb

Kategorien