Torna agli aggiornamenti
New releaseSep 17, 2026

Specter-FlipperZero v2.9

👻 Specter — spazzata passiva anti-microspie per lettori/skimmer NFC a 13,56 MHz per Flipper Zero. Misuratore EMF di contro-sorveglianza che utilizza il chip NFC integrato. Nessun hardware aggiuntivo.

Condividi

Specter — scanner NFC e bug-sweep per skimmer per Flipper Zero

Specter 👻

Scansiona i lettori che non puoi vedere.

Latest release Downloads Stars Build

Flipper Zero Onboard NFC No extra hardware Listen-only MIT

Specter trasforma il tuo Flipper Zero in un bug-sweep tascabile di controsorveglianza per lettori NFC attivi a 13,56 MHz. Ascolta passivamente il campo RF che un lettore acceso emette costantemente — uno skimmer nascosto inserito in un terminale di pagamento, un lettore occulto dietro un pannello di una porta, un logger abusivo attaccato sotto una scrivania — poi ti dice dov'è, che tipo di cosa è, se la stanza è pulita e — lasciato in sorveglianza — il momento in cui ne appare uno mentre sei via. Non trasmette mai.

I lettori sono invisibili. Specter li rende visibili.

Segnalato su
Help Net Security  ·  Cyber Security News


📟 Sul Flipper

Specter in uso: scansione di una stanza silenziosa, avvicinamento a un lettore, aggancio a MAX, fingerprinting della sua cadenza di polling, poi un verdetto di site-survey

Una scansione, dall'inizio alla fine: stanza silenziosa → avvicinamento → aggancio → cos'è → il verdetto della stanza.

Schermate di Specter

Sweep (silenzioso)  ·  Sweep (lettore agganciato)  ·  Fingerprint  ·  Survey (in esecuzione)  ·  Survey (verdetto)
Watch (pulito)  ·  Watch (lettore!)  ·  Logbook  ·  Calibrate  ·  Settings


✨ Le cinque modalità

Specter è cinque strumenti attorno a un unico sensore. Ognuno risponde a una domanda diversa, quindi quello giusto dipende da cosa stai effettivamente cercando di scoprire:

ModalitàLa domanda a cui rispondeUsala quando
🔍 SweepDov'è?Sospetti un dispositivo e vuoi individuarlo spostandoti
🔬 FingerprintChe tipo di cosa è?Hai trovato un emettitore e vuoi sapere come si comporta
🗺️ Site SurveyQuesta stanza è pulita?Vuoi un unico verdetto per un intero spazio, a mani libere
🛰️ Watch ModeNe è apparso uno mentre ero via?Lasci il Flipper da qualche parte a fare la guardia
📖 LogbookCosa ho trovato, e quando?Stai scrivendo un resoconto, o confrontando oggi con la settimana scorsa — filtra per tipo di rilevamento

🔍 Sweep — dov'è?

Sweep — lettore trovato, misuratore al massimo

Cosa fa. Un misuratore in stile EMF dal vivo. Tieni il Flipper piatto e muovilo lentamente sopra la cosa che stai controllando — un terminale per carte, un lettore per porte, il lato inferiore della fessura di un ATM, un pacco, una scrivania. L'ago segue l'intensità del campo in tempo reale.

Cosa vedi.

  • Il quadrante — l'ago = lettura dal vivo, il puntino = peak-hold (il punto più forte che hai toccato, così puoi confrontare le posizioni).
  • FIELD % — la stessa lettura come numero, con una freccia di tendenza ▲ / ▼ che ti dice se l'ultimo mezzo secondo ha reso le cose più calde o più fredde. Quando stai cacciando, quella freccia conta più del numero.
  • PK / C — lettura di picco e quanti contatti separati hai avuto.
  • Barra inferiore — la forma d'onda dal vivo e la tua sensibilità attuale quando è silenzioso; passa a una barra d'allarme nera ● ACTIVE READER con una parola di prossimità nel momento in cui viene rilevata una portante.
  • ProssimitàFAINT → NEAR → CLOSE → STRONG → MAX. MAX significa che il misuratore è al massimo: sei il più vicino che questa misurazione possa risolvere.

Suono. Click geiger opzionali che accelerano man mano che ti avvicini, così puoi scansionare con il Flipper in tasca e cacciare solo con l'udito.

TastoAzione
OKAzzera peak-hold e conteggio contatti
hold OKSalva questa lettura nel logbook
LEFTCalibra sul rumore di fondo della stanza (3 s)

🔬 Fingerprint — che tipo di cosa è?

Fingerprint — lettore in polling identificato

Cosa fa. Una volta che Sweep ha trovato qualcosa, tieni il Flipper fermo contro di esso. Fingerprint smette di misurare la prossimità e inizia a cronometrare i fronti on/off della portante, che è ciò che distingue realmente un tipo di emettitore da un altro.

Cosa vedi. Un verdetto, una barra di confidenza e le prove dietro entrambi:

ClasseCosa significa in pratica
CONTINUOUSLa portante è mantenuta permanentemente attiva
POLLINGUn ciclo di polling fisso, temporizzato al cristallo — il periodo è mostrato in ms
INTERMITTENTA raffiche ma irregolare — spesso un telefono o un lettore in uso

Sotto ci sono PER (periodo di polling), BST (larghezza della raffica), JIT (jitter) e DUTY (duty-cycle reale), più un treno di impulsi da logic analyser della portante grezza — così il verdetto non è mai qualcosa che devi prendere per fede. Un vero lettore in polling si presenta come un'onda quadra inconfondibile.

Un ~ prima di una temporizzazione significa che è vicina al limite di campionamento di 2 ms, e la confidenza è ridotta di conseguenza.

TastoAzione
OKSalva il rilevamento nel logbook
hold OKRiavvia la misurazione

🗺️ Site Survey — questa stanza è pulita?

Site Survey — verdetto

Cosa fa. Una scansione a tempo di un intero spazio. Avviala, cammina nella stanza normalmente e ottieni un unico verdetto alla fine — senza guardare l'ago.

Cosa vedi. Un conto alla rovescia e una barra di avanzamento mentre è in esecuzione, poi una scheda di verdetto:

  • CLEAN — nulla ha superato il rumore di fondo
  • TRACE — rilevamenti brevi o deboli; vale la pena una seconda passata più lenta
  • ACTIVE READER — qualcosa era davvero attivo ed emetteva

…con campo MAX / AVG, conteggio contatti e FIELD %per quanto tempo della survey una portante è stata effettivamente attiva, che spesso è il numero più rivelatore dei quattro. Dura 30 s, 60 s o 2 min, e registra il risultato automaticamente.

TastoAzione
OKEsegui di nuovo la survey

🛰️ Watch Mode — ne è apparso uno mentre ero via?

Watch Mode — lettore presente

Cosa fa. Fa la guardia indefinitamente. Attivalo, posa il Flipper, allontanati. Dove Sweep sei tu che cacci e Survey è un test a durata fissa, Watch si limita ad aspettare — per minuti o ore.

Cosa vedi. Un grande orologio del tempo trascorso e ALL CLEAR finché non c'è nulla. Nell'istante in cui appare un lettore la banda si inverte in READER PRESENT, lo schermo si risveglia e l'allarme suona. La banda è fissa anziché lampeggiante — invece pulsa un piccolo indicatore, così appare viva senza lampeggiarti addosso. Dopo che è passato, lo schermo conserva le prove: HITS (quanti contatti separati), PEAK, LAST (quanto tempo fa è stato il più recente) e SEEN (tempo totale in cui una portante è stata effettivamente attiva).

Watch ignora deliberatamente la modalità stealth — una guardia buia e silenziosa che non ti dice mai di aver visto qualcosa sarebbe peggio che inutile.

TastoAzione
OKRiattiva — azzera l'orologio e i contatori

📖 Logbook — cosa ho trovato, e quando?

I rilevamenti vengono salvati due volte, da una sola azione, così sono leggibili sul dispositivo e già un foglio di calcolo — nessun passaggio di esportazione da ricordare:

logbook.txt — raggruppato, per il visualizzatore sul dispositivologbook.csv — una riga piatta per voce
``` 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 … ```

Le voci sono contrassegnate con SWEEP, READER, SURVEY o WATCH e timbrate dall'orologio del Flipper. Entrambi i file risiedono in apps_data/specter/ sulla scheda SD. Nulla lascia mai il dispositivo. Cancellali da Settings → Clear logbook (confermato prima — è l'unica cosa irreversibile che l'app può fare).


⚙️ I componenti di supporto

🎯 Auto-calibrazione

Premi LEFT sulla schermata Sweep e Specter ascolta il rumore di fondo ambientale per 3 secondi, poi imposta la soglia di rilevamento appena sopra qualunque cosa abbia misurato — salvata come la tua sensibilità Custom. Ogni stanza ha un diverso fondo RF; questa si sintonizza su quella in cui ti trovi invece di un numero predefinito in fase di build. Posizionati in un luogo silenzioso quando la esegui.

🕶️ Modalità stealth

Mantiene schermo e LED spenti per tutta la sweep, così il Flipper non brilla mentre sei tu quello che sta osservando. Suono e vibrazione continuano a funzionare — il punto non è disabilitare il feedback con cui stai facendo la sweep. Uscire da una schermata stealth riaccende il display, così BACK ti porta sempre su un menu illuminato.

📏 Leggere il misuratore

Perché un reader che stai toccando non emette il 100% del tempo. Il rilevatore misura una sola cosa fisica: quale frazione del tempo una portante a 13,56 MHz è attiva. Ma i reader interrogano — un breve burst, una pausa, un altro burst. Un terminale tipico irradia solo per il 20–35% del tempo, quindi il duty-cycle grezzo satura intorno al 30% non importa quanto ti avvicini.

Mostrare quel numero grezzo sul misuratore faceva sembrare un rilevamento perfetto come un terzo di uno. Il misuratore è invece scalato rispetto a quella reale banda di polling:

Duty portante grezzoMisuratoreProssimità
3% (rumore della stanza)10%FAINT
12%40%NEAR
20%67%CLOSE
28%93%STRONG
≥30% (appoggiato su un reader)100%MAX

Il duty grezzo non viene mai perso: il rumore di fondo, l'auto-calibrazione e il DUTY della schermata Fingerprint funzionano ancora in vero duty-cycle, perché quelli descrivono il segnale, non la tua distanza da esso. Vuoi il numero letterale? Settings → Meter → Raw.

💾 Tutto persiste

Sensibilità, durata della survey, suono, vibrazione, LED, stealth, logging e modalità del misuratore sono salvati sulla scheda SD nel momento in cui li modifichi. Un kit di sweep che dimentica la sua configurazione è peggio di nessuna persistenza.


🧠 Come funziona

Ogni reader NFC acceso interroga continuamente l'aria con una portante a 13,56 MHz, in attesa che una carta si svegli. Non puoi vederla, ma il chip NFC del Flipper sì: l'ST25R3916 ha un rilevatore di campo esterno hardware (lo stesso circuito che permette al Flipper di emulare una carta e sapere quando un reader sta comunicando con essa). Specter mette il chip in modalità solo-rilevamento e campiona quel bit "campo presente?" ~500 volte al secondo — senza mai attivare la propria portante.

Quel singolo bit, campionato abbastanza velocemente, porta due segnali indipendenti:```mermaid flowchart LR R["🔍 Hidden 13.56 MHz reader / skimmer
(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
**Quanto → intensità.** Su una finestra breve Specter misura *in quale frazione di tempo* un carrier è
presente e la leviga nel **FIELD %**. Un lettore posizionato proprio sopra il Flipper fa schizzare il misuratore;
uno più debole o più lontano lo sposta appena. Questo guida l'ago, la parola di prossimità e la frequenza dei click.

**Quale ritmo → identità.** Separatamente, ogni transizione di quel bit viene cronometrata. Un lettore che si risveglia per
20 ms ogni 200 ms produce un pattern burst/gap con quasi nessun jitter, perché il suo ciclo di polling è
guidato da una macchina a stati temporizzata a cristallo. Il movimento della mano e il rumore RF non sono così stabili. Quella
differenza è ciò che separa **POLLING** da **INTERMITTENT**.

### I livelli decisionali sono testati su un computer reale

I punti in cui Specter trasforma i numeri in una *affermazione* — "questo è un lettore in polling", "questa stanza è
pulita", "questo è ciò che l'ago dovrebbe leggere" — sono puro C senza dipendenze hardware, e sono
fissati da test host anziché scoperti sul dispositivo:```bash
make -C test     # 300 checks: classifier, verdict, meter scaling, presence

🚀 Installazione

Nessuna devboard, nessun firmware da flashare — è un singolo .fap.

Opzione A — .fap precompilato (la più semplice)

  1. Scarica il .fap corretto dalla pagina Releases:

    Il tuo firmwareFile
    Ufficiale / stockspecter.fap
    Unleashed, RogueMaster, Momentum o qualsiasi versione più recentespecter-fw-dev.fap

    Se il Flipper mostra APP:87 < FW:88 — This app might not work, hai preso quello sbagliato — usa l'altro file. La versione API dell'app è fissa al momento della compilazione, quindi una singola build non può soddisfare entrambe le linee di firmware. Di solito funziona comunque se premi Continue, ma la build corrispondente non lo chiederà.

  2. Apri qFlipper, trascina il file in SD Card / apps / NFC /.

  3. Sul Flipper: Apps → NFC → Specter.

Opzione B — compilalo da solo con ufbt```bash

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

Il file `.fap` finisce in `dist/specter.fap`; `ufbt launch` lo copia in `apps/NFC/` e lo avvia per te.

> Le icone in `icons/`, gli screenshot e il banner in `images/` sono generati — rigenerali con
> `python3 tools_gen_icons.py`, `python3 tools_gen_mockups.py` e `python3 tools_gen_banner.py` (richiede `pillow`).

---

## 🎮 Come si usa

**Una scansione, dall'inizio alla fine:**

1. Avvia **Specter**. Nella schermata **Sweep**, premi **LEFT** e resta fermo per 3 secondi per
   calibrare sul rumore di fondo della stanza.
2. Tieni il Flipper piatto e muovilo **lentamente** sopra la cosa che stai controllando — un terminale
   per carte, un lettore di porte, la parte inferiore della fessura di un ATM, un pacco, una scrivania.
   - **Forma d'onda piatta / silenziosa** → nessun lettore attivo nel raggio d'azione.
   - **L'ago sale, i click accelerano** → ti stai avvicinando a un emettitore. Continua verso il picco.
   - **`● ACTIVE READER` + bordo d'allarme** → un lettore attivo è proprio qui.
3. Trovato qualcosa? Esci e apri **Fingerprint**. Tieni il Flipper fermo contro di esso e lascia che la
   cadenza si stabilizzi — qualche secondo di solito basta. Premi **OK** per salvare il risultato.
4. Vuoi invece bonificare un'intera stanza? Apri **Site Survey**, percorri lo spazio finché la barra non
   si riempie e leggi il verdetto.
5. Stai lasciando l'area? Metti il Flipper in **Watch Mode** e resterà di guardia, svegliandosi e
   suonando se compare un lettore mentre sei via.
6. Controlla il **Logbook** per tutto ciò che hai salvato, con timestamp — oppure estrai `logbook.csv`
   dalla scheda e importalo in un foglio di calcolo.

> 💡 Scansiona prima un lettore sicuro (il tuo telefono che fa NFC, o un terminale contactless di cui ti
> fidi) per vedere come appare un campo forte e legittimo sul misuratore — e cosa legge la sua impronta.
> Poi vai a caccia.

### Comandi

| Schermata | Tasto | Azione |
|---|---|---|
| **Sweep** | `OK` | Azzera picco / contatti |
| | `hold OK` | Registra la lettura corrente |
| | `LEFT` | Calibra il rumore di fondo (3 s) |
| **Fingerprint** | `OK` | Salva il risultato nel logbook |
| | `hold OK` | Riavvia la misurazione |
| **Site Survey** | `OK` | Esegui di nuovo la survey |
| **Watch Mode** | `OK` | Riarma (azzera conteggio e orologio) |
| *ovunque* | `BACK` | Torna su di un livello |

---

## 🔬 Limiti onesti

- **Solo 13,56 MHz (HF).** Specter rileva la **banda NFC** — quella usata dagli skimmer per pagamenti
  contactless, dalla maggior parte dei lettori di accesso moderni, dai lettori per trasporti e hotel.
  **Non** riesce a vedere i lettori a **125 kHz (LF)** (i vecchi pannelli per porte HID Prox / EM4100);
  il percorso LF del Flipper non ha un bit equivalente di rilevamento del campo.
- **Rileva la *portante* di un lettore, non ciò che legge.** Specter ti dice *che un lettore attivo è
  qui, all'incirca quanto è vicino e con che ritmo interroga* — non decodifica, identifica o cattura
  nulla di ciò che fa il lettore.
- **L'intensità è relativa, non calibrata.** `FIELD %` e le parole di prossimità sono una guida
  comparativa "più caldo / più freddo" per la scansione, non una distanza misurata in cm. È una lettura
  *riscalata* del duty-cycle della portante rispetto a una banda di polling tipica (vedi [Leggere il
  misuratore](#-reading-the-meter--fixed-in-23)); un lettore che interroga in modo insolitamente rado
  leggerà più basso alla stessa distanza, e uno in modalità onda continua andrà a fondo scala da più
  lontano.
- **Il misuratore arriva al massimo.** `MAX` significa che la portante è attiva tanto quanto questo
  lettore la tiene mai attiva — oltre quel punto, avvicinarsi davvero non può produrre un numero più
  grande. Usa il peak-hold `PK` per confrontare invece le posizioni.
- **La cadenza si risolve a ~2 ms.** Questo è il periodo di campionamento. Le tempistiche vicine a
  questo valore sono mostrate con un **`~`** e la confidenza viene ridotta di conseguenza — Specter
  preferisce segnalare il proprio limite di risoluzione piuttosto che citare un numero dall'aspetto
  preciso su cui non può garantire.
- **`CLEAN` significa pulito alla sensibilità che hai scelto.** Uno skimmer dormiente che si sveglia
  solo a un tap reale, o uno schermato, resta invisibile a *qualsiasi* soglia. L'assenza di una lettura
  non è garanzia di assenza.
- **Una radio alla volta.** Specter prende il controllo del chip NFC durante la scansione, quindi chiudi
  prima qualsiasi altra app NFC (dirà *NFC unavailable* se qualcos'altro tiene occupata la radio).

---

## ⚖️ Legale ed etico

Specter è uno strumento **difensivo, in sola ascolto** — **non trasmette** mai, non alimenta mai un
campo, non tocca mai il lettore. Usalo per scansionare la **tua** area POS, porta, scrivania o oggetti
personali, o hardware che sei **esplicitamente autorizzato** a valutare. Sei responsabile di come lo usi.
Conosci le leggi locali.

---

## 🗺️ Roadmap

- [x] Persistere sensibilità / suono / vibrazione / LED tra i riavvii
- [x] "Logbook" dei rilevamenti con timestamp sulla scheda SD
- [x] Scansione in background con lo schermo spento — *modalità stealth*
- [x] Soglia regolabile per un controllo più fine del range — *auto-calibrazione + sensibilità personalizzata*
- [x] Impronta di un emettitore tramite la sua cadenza di polling
- [x] Site survey a tempo con verdetto sulla stanza
- [x] Esportare il logbook come CSV per il reporting — *scritto in tempo reale insieme al .txt*
- [x] Modalità watch a lungo termine non presidiata con allarme wake-on-detection
- [x] Far usare al misuratore tutto il suo range contro lettori reali in polling
- [x] Freccia di tendenza più caldo/più freddo durante la caccia
- [ ] Studiare un rilevamento di lettori LF (125 kHz) basato su bobina come modalità separata
- [ ] Filtro del logbook per tipo sul dispositivo

---

## 🗂️ Struttura del progetto```
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

🎨 Branding

Tutte le grafiche sono generate, quindi non si discostano mai dall'app:

AssetDimensioneDove va
images/banner.png2560×800Intestazione del README (2× per rimanere nitida su retina)
images/social-preview.png1280×640Settings → Social preview — la dimensione consigliata da GitHub (min 640×320, limite 1 MB)
images/mark.png512×512Logo quadrato: avatar, favicon, slide
images/demo.gif768×384L'animazione sopra, ~9 s, costruita dalle costanti reali della vista
python3 tools_gen_banner.py # banner, social preview, logo mark
python3 tools_gen_gif.py # the demo animation
python3 tools_gen_mockups.py # screen stills
python3 tools_gen_icons.py # 1-bit Flipper icons
> L'anteprima social è l'unico asset che GitHub non riesce a recuperare dal repo — deve
> essere caricata una volta manualmente in **Settings → Social preview**. È ciò che viene renderizzato
> quando il repo viene condiviso su Slack, X, LinkedIn o Discord.

---

## 🙏 Crediti

- Creato da **[at0m-b0mb](https://github.com/at0m-b0mb)**.
- Parte di una famiglia di strumenti di sicurezza per Flipper: **[Argus](https://github.com/at0m-b0mb/Argus-FlipperZero)** (watchdog Wi-Fi deauth / evil-twin), **[GhostTag](https://github.com/at0m-b0mb/GhostTag-FlipperZero)** (hunter BLE anti-stalking) e **[Cerberus](https://github.com/at0m-b0mb/flipper-cerberus)** (watchdog RF Sub-GHz).
- Basato sul [firmware Flipper Zero](https://github.com/flipperdevices/flipperzero-firmware) NFC HAL (rilevamento campo `furi_hal_nfc`) + [ufbt](https://github.com/flipperdevices/flipperzero-ufbt).

## 📄 Licenza

[MIT](https://github.com/at0m-b0mb/specter-flipperzero/blob/main/LICENSE) © 2026 at0m-b0mb

Categorie