Retour aux mises Ă  jour
New releaseAug 4, 2026

Specter-FlipperZero v2.3

👻 Specter — balayage passif de détection de lecteurs/écrémeurs NFC 13.56 MHz pour Flipper Zero. Mesureur EMF de contre-surveillance utilisant la puce NFC embarquée. Aucun matériel supplémentaire requis.

Partager

Specter — détection de lecteurs NFC et de skimmers pour Flipper Zero

Specter đź‘»

Repérez les lecteurs que vous ne pouvez pas voir.

Flipper Zero Version 2.3 Onboard NFC No extra hardware ufbt MIT

Specter transforme votre Flipper Zero en détecteur de mouchards de poche pour les lecteurs NFC actifs à 13,56 MHz. Il écoute passivement le champ RF qu'un lecteur sous tension émet en permanence — un skimmer de carte caché glissé dans un terminal de paiement, un lecteur clandestin derrière un panneau de porte, un enregistreur pirate scotché sous un bureau — puis vous indique où il se trouve, de quel type d'appareil il s'agit, si la pièce est propre et — laissé en surveillance — le moment où l'un d'eux apparaît pendant votre absence. Il n'émet jamais.

Les lecteurs sont invisibles. Specter les rend visibles.


📟 Sur le Flipper

Écrans de Specter

Sweep (silencieux)  ·  Sweep (lecteur accroché)  ·  Fingerprint  ·  Survey (en cours)  ·  Survey (verdict)
Watch (aucun lecteur)  ·  Watch (lecteur !)  ·  Logbook  ·  Calibrate  ·  Settings


✨ Ce qu'il fait

Specter répond à quatre questions différentes — où est-il, qu'est-ce que c'est, la pièce est-elle propre, et un lecteur est-il apparu pendant mon absence — et chacune a son propre écran.

🔍 Sweep — où est-il ?

Sweep — lecteur actif détecté

La pièce maîtresse : un indicateur EMF de type analogique. L'aiguille suit le FIELD % en temps réel, un marqueur de crête mémorise le signal le plus fort, et le haut du cadran est une zone chaude. Une forme d'onde en direct trace le bruit de fond quand tout est calme.

Dès qu'une porteuse de lecteur est détectée, l'écran s'encadre d'une bordure d'alarme, un anneau pulsant bat autour du cadran, et la bande bascule sur ● ACTIVE READER avec une indication de proximité (FAINT → NEAR → CLOSE → STRONG). Des clics Geiger optionnels s'accélèrent à mesure que le champ se renforce, pour que vous puissiez balayer une surface avec le Flipper en poche et entendre que vous vous rapprochez.

OK réinitialise le pic/les contacts · hold OK journalise la lecture · LEFT calibre selon la pièce où vous vous trouvez.


🔬 Fingerprint — qu'est-ce que c'est ?  NOUVEAU en 2.0

Fingerprint — lecteur à interrogation identifié

Vous avez trouvé quelque chose ? Restez immobile dessus. Specter arrête de chercher la proximité et se met à mesurer les fronts montants/descendants de la porteuse, puis vous indique à quel type d'émetteur vous avez affaire :

ClasseSignification
CONTINUOUSPorteuse maintenue en permanence
POLLINGCycle d'interrogation fixe — la période est affichée en ms
INTERMITTENTPar rafales mais irrégulier

Vous obtenez la période d'interrogation, la largeur de rafale, la gigue, le rapport cyclique et une barre de confiance — plus un train d'impulsions d'analyseur logique de la porteuse brute le long du bas de l'écran, pour que le verdict n'ait jamais à être cru sur parole. La boucle d'interrogation d'un lecteur est cadencée par quartz ; une vraie interrogation apparaît donc comme une onde carrée impossible à confondre.

OK enregistre la découverte dans le journal · hold OK relance la mesure.


🗺️ Site Survey — cette pièce est-elle propre ?  NOUVEAU en 2.0

Site Survey — verdict

Un balayage minuté d'un espace entier. Lancez-le, parcourez la pièce, et obtenez un seul verdict à la fin au lieu de devoir surveiller une aiguille en permanence :

  • CLEAN — rien n'a franchi le bruit de fond
  • TRACE — brèves ou faibles dĂ©tections, un second passage est utile
  • ACTIVE READER — quelque chose Ă©tait actif et Ă©mettait pour de bon

…avec le champ max/moyen, le nombre de contacts, et la part du balayage pendant laquelle une porteuse était réellement active. Dure 30 s, 60 s ou 2 min, et journalise automatiquement le résultat.


🛰️ Watch Mode — préviens-moi si un lecteur apparaît  NOUVEAU en 2.1

Watch Mode — lecteur présent

Là où Sweep, c'est vous qui chassez, et Survey, un verdict limité, Watch monte la garde indéfiniment. Armez-le, posez le Flipper, et éloignez-vous. Il garde un chronomètre et un compteur de détections, mémorise l'heure du dernier contact et — c'est tout l'intérêt — réveille l'écran et donne l'alarme dès qu'un lecteur apparaît. Chaque nouveau contact est automatiquement journalisé avec son horodatage.

Il ignore volontairement la furtivité : un gardien silencieux et sombre qui ne vous dit jamais qu'il a vu quelque chose serait pire qu'inutile. OK le réarme (efface le compteur et le chrono).


📖 Logbook + CSV en direct  CSV NOUVEAU en 2.1

Chaque découverte est écrite deux fois, en une seule action — lisible sur l'appareil et déjà exploitable en tableau, sans étape d'export à retenir :

logbook.txt — regroupé, pour la consultation sur l'appareillogbook.csv — une ligne simple par entrée
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 …

Les deux se trouvent dans apps_data/specter/ sur la carte SD. Rien ne quitte l'appareil.

🎯 Auto-calibration  NOUVEAU en 2.0

Appuyez sur LEFT sur l'écran Sweep et Specter écoute le bruit de fond ambiant pendant 3 secondes, puis règle le seuil de détection juste au-dessus de ce qu'il a mesuré — enregistré comme votre sensibilité Custom. Chaque pièce a un plancher RF différent ; cette fonction s'accorde à celui où vous vous trouvez plutôt qu'à un nombre figé au moment de la compilation.

🕶️ Mode furtif  NOUVEAU en 2.0

Maintient l'écran et la LED éteints pendant tout le balayage, pour que le Flipper ne s'illumine pas pendant que c'est vous qui observez. Le son et les vibrations continuent de fonctionner — le but n'est pas de désactiver le retour qui guide votre balayage. Quitter un écran furtif rallume l'affichage, pour que BACK vous ramène toujours sur un menu éclairé (corrigé en 2.2 — auparavant l'écran restait sombre, ce qui donnait l'impression que BACK ne répondait plus).

📏 Lire le cadran  CORRIGÉ en 2.3

Pourquoi un lecteur que vous touchez n'émet pas 100 % du temps. Le détecteur mesure une seule chose physique : la fraction du temps pendant laquelle une porteuse à 13,56 MHz est réellement active. Mais les lecteurs interrogent (poll) — une courte rafale, une pause, une autre rafale. Un terminal ou un lecteur d'accès typique n'émet que 20 à 35 % du temps, si bien que le rapport cyclique brut sature vers 30 % quelle que soit votre proximité.

Specter affichait auparavant ce nombre brut sur le cadran, ce qui faisait ressembler une détection parfaite à un tiers de détection — et rendait CLOSE/STRONG ainsi que le test de crête du balayage définitivement inaccessibles. Le cadran est désormais mis à l'échelle sur cette bande d'interrogation réelle :

Rapport cyclique brut de la porteuseCadranProximité
3 % (bruit de fond de la pièce)9 %FAINT
12 %34 %NEAR
20 %57 %CLOSE
31 % (posé sur un lecteur)89 %STRONG
≥ 35 % / onde continue100 %MAX

MAX signifie en butée — vous êtes aussi près que cette mesure peut le résoudre, et vous rapprocher encore ne changera rien. C'est indiqué explicitement plutôt que dissimulé, pour qu'une aiguille bloquée ne ressemble jamais à une aiguille cassée.

Le rapport cyclique brut n'est jamais perdu : le bruit de fond, l'auto-calibration et le DUTY de l'écran Fingerprint fonctionnent toujours en rapport cyclique réel, car ils décrivent le signal, pas votre distance par rapport à lui. Vous préférez le nombre littéral ? Settings → Meter → Raw.

💾 Tout est conservé  NOUVEAU en 2.0

La sensibilité, la durée du balayage, le son, les vibrations, la LED, la furtivité, la journalisation et le mode du cadran sont enregistrés sur la carte SD dès que vous les modifiez. Un kit de balayage qui oublie sa configuration est pire que l'absence totale de persistance.


🧠 Comment ça marche

Chaque lecteur NFC sous tension émet en continu une porteuse à 13,56 MHz dans l'air, en attendant qu'une carte se réveille. Vous ne pouvez pas la voir, mais la puce NFC du Flipper le peut : la ST25R3916 dispose d'un détecteur de champ externe matériel (le même circuit qui permet au Flipper d'émuler une carte et de savoir quand un lecteur lui parle). Specter place la puce en mode détection seule et échantillonne ce bit « champ présent ? » environ 500 fois par seconde — sans jamais activer sa propre porteuse.

Ce seul bit, échantillonné assez rapidement, porte deux signaux indépendants :

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

Combien → intensité. Sur une courte fenêtre, Specter mesure la fraction du temps pendant laquelle une porteuse est présente et la lisse pour obtenir le FIELD %. Un lecteur posé directement sur le Flipper met le cadran en butée ; un plus faible ou plus éloigné le fait bouger légèrement. C'est ce qui pilote l'aiguille, l'indication de proximité et le rythme des clics.

Quel rythme → identité. Parallèlement, chaque transition de ce bit est chronométrée. Un lecteur qui se réveille 20 ms toutes les 200 ms produit un motif rafale/pause avec presque aucune gigue, car sa boucle d'interrogation est pilotée par une machine à états cadencée par quartz. Les mouvements de la main et le bruit RF ne sont pas aussi réguliers. C'est cette différence qui distingue POLLING de INTERMITTENT.

Les couches de décision sont testées sur un vrai ordinateur

Les endroits où Specter transforme des nombres en affirmation — « c'est un lecteur à interrogation », « cette pièce est propre », « voici ce que l'aiguille devrait indiquer » — sont en C pur, sans dépendance matérielle, et ils sont verrouillés par des tests hôte plutôt que découverts sur l'appareil :

make -C test     # 284 checks: classifier, survey verdict, meter scaling

🚀 Installation

Pas de carte de développement, pas de firmware à flasher — c'est un simple .fap.

Option A — .fap précompilé (le plus simple)

  1. Téléchargez specter.fap depuis la page Releases.
  2. Ouvrez qFlipper, glissez le fichier dans SD Card / apps / NFC /.
  3. Sur le Flipper : Apps → NFC → Specter.

Option B — compilez-le vous-même avec 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

Le .fap se retrouve dans dist/specter.fap ; ufbt launch le copie dans apps/NFC/ et le lance pour vous.

Les icônes dans icons/, les captures d'écran et la bannière dans images/ sont générées — régénérez-les avec python3 tools_gen_icons.py, python3 tools_gen_mockups.py et python3 tools_gen_banner.py (nécessite pillow).


🎮 Utilisation

Un balayage, de bout en bout :

  1. Lancez Specter. Sur l'écran Sweep, appuyez sur LEFT et restez immobile pendant 3 secondes pour calibrer le bruit de fond de la pièce.
  2. Tenez le Flipper à plat et déplacez-le lentement sur l'objet que vous vérifiez — un terminal de carte, un lecteur de porte, le dessous de la lèvre d'un distributeur, un colis, un bureau.
    • Forme d'onde plate / calme → aucun lecteur actif Ă  portĂ©e.
    • L'aiguille monte, les clics s'accĂ©lèrent → vous approchez d'un Ă©metteur. Continuez vers le pic.
    • â—Ź ACTIVE READER + bordure d'alarme → un lecteur actif est juste lĂ .
  3. Vous avez trouvé quelque chose ? Revenez en arrière et ouvrez Fingerprint. Maintenez le Flipper immobile contre lui et laissez la cadence se stabiliser — quelques secondes suffisent généralement. Appuyez sur OK pour enregistrer la découverte.
  4. Vous préférez vérifier toute une pièce ? Ouvrez Site Survey, parcourez l'espace jusqu'à ce que la barre se remplisse, puis lisez le verdict.
  5. Vous quittez les lieux ? Placez le Flipper en Watch Mode et il montera la garde, se réveillant et donnant l'alarme si un lecteur apparaît pendant votre absence.
  6. Consultez le Logbook pour tout ce que vous avez enregistré, horodaté — ou récupérez logbook.csv depuis la carte vers un tableur.

💡 Balayez d'abord un lecteur dont le fonctionnement est connu (votre propre téléphone en NFC, ou un terminal sans contact de confiance) pour voir à quoi ressemble un champ fort et légitime sur le cadran — et ce que son empreinte indique. Ensuite, partez en chasse.

Commandes

ÉcranToucheAction
SweepOKRéinitialiser le pic / les contacts
hold OKJournaliser la lecture en cours
LEFTCalibrer le bruit de fond (3 s)
FingerprintOKEnregistrer la découverte dans le journal
hold OKRedémarrer la mesure
Site SurveyOKRelancer le balayage
Watch ModeOKRéarmer (effacer le compteur et le chrono)
n'importe oĂąBACKRemonter d'un niveau

🔬 Limites honnêtes

  • 13,56 MHz (HF) uniquement. Specter dĂ©tecte la bande NFC — celle utilisĂ©e par les skimmers de paiement sans contact, la plupart des lecteurs d'accès modernes, les lecteurs de transport et d'hĂ´tel. Il ne peut pas voir les lecteurs 125 kHz (LF) (anciens panneaux de porte HID Prox / EM4100) ; la voie LF du Flipper ne dispose d'aucun bit de dĂ©tection de champ Ă©quivalent.
  • Il dĂ©tecte la porteuse d'un lecteur, pas ce qu'il lit. Specter vous dit qu'un lecteur actif est prĂ©sent, Ă  quelle distance approximativement, et selon quel rythme il interroge — il ne dĂ©code, n'identifie et ne capture rien de ce que fait le lecteur.
  • L'intensitĂ© est relative, pas calibrĂ©e. FIELD % et les indications de proximitĂ© sont un repère comparatif « plus chaud / plus froid » pour le balayage, pas une distance mesurĂ©e en cm. C'est une lecture mise Ă  l'Ă©chelle du rapport cyclique de la porteuse par rapport Ă  une bande d'interrogation typique (voir Lire le cadran) ; un lecteur qui interroge de façon exceptionnellement espacĂ©e indiquera une valeur plus basse Ă  distance Ă©gale, et un lecteur en onde continue saturera depuis plus loin.
  • Le cadran plafonne. MAX signifie que la porteuse est active au maximum de ce que ce lecteur peut produire — au-delĂ , se rapprocher ne peut rĂ©ellement plus faire grimper le nombre. Utilisez plutĂ´t la mĂ©morisation de crĂŞte PK pour comparer les positions.
  • La cadence se rĂ©sout Ă  ~2 ms. C'est la pĂ©riode d'Ă©chantillonnage. Les durĂ©es qui s'en approchent sont affichĂ©es avec un ~ et la confiance est rĂ©duite en consĂ©quence — Specter prĂ©fère signaler sa propre limite de rĂ©solution plutĂ´t que d'afficher un nombre Ă  l'apparence prĂ©cise qu'il ne peut pas assumer.
  • CLEAN signifie propre Ă  la sensibilitĂ© que vous avez choisie. Un skimmer dormant qui ne se rĂ©veille qu'Ă  un vrai passage, ou un skimmer blindĂ©, reste invisible Ă  n'importe quel seuil. L'absence de dĂ©tection n'est pas une garantie d'absence.
  • Une seule radio Ă  la fois. Specter s'empare de la puce NFC pendant le balayage : fermez d'abord toute autre application NFC (il affichera NFC unavailable si quelque chose d'autre occupe la radio).

Specter est un outil défensif, en écoute uniquement — il n'émet jamais, n'alimente jamais un champ, ne touche jamais au lecteur. Utilisez-le pour balayer votre propre zone de paiement, votre porte, votre bureau ou vos effets personnels, ou du matériel que vous êtes explicitement autorisé à évaluer. Vous êtes responsable de votre usage. Connaissez vos lois locales.


🗺️ Feuille de route

  • Conserver la sensibilitĂ© / le son / les vibrations / la LED entre les redĂ©marrages
  • « Logbook » des dĂ©tections horodatĂ©es sur la carte SD
  • Balayage en arrière-plan avec l'Ă©cran Ă©teint — mode furtif
  • Seuil rĂ©glable pour un contrĂ´le de portĂ©e plus fin — auto-calibration + sensibilitĂ© Custom
  • Identifier un Ă©metteur par empreinte via sa cadence d'interrogation
  • Balayage de site minutĂ© avec verdict sur la pièce
  • Exporter le journal en CSV pour les rapports — Ă©crit en direct Ă  cĂ´tĂ© du .txt
  • Mode veille de longue durĂ©e sans surveillance avec alarme de rĂ©veil Ă  la dĂ©tection
  • Faire en sorte que le cadran exploite toute sa plage face aux vrais lecteurs Ă  interrogation
  • Étudier une dĂ©tection de lecteur LF (125 kHz) basĂ©e sur une bobine comme mode sĂ©parĂ©
  • Filtrage du journal par type sur l'appareil

🗂️ Structure du projet

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
│   ├── 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

🙏 Crédits

  • Créé par at0m-b0mb.
  • Il fait partie d'une famille d'outils de sĂ©curitĂ© pour Flipper : Argus (watchdog Wi-Fi deauth / evil-twin), GhostTag (chasseur anti-harcèlement BLE) et Cerberus (watchdog RF Sub-GHz).
  • PropulsĂ© par la HAL NFC du firmware Flipper Zero (furi_hal_nfc dĂ©tection de champ) + ufbt.

đź“„ Licence

MIT © 2026 at0m-b0mb

Catégories