Zurück zu den Updates
New releaseSep 3, 2026

Specter-FlipperZero v2.8

👻 Specter — passiver 13,56-MHz-NFC-Leser/Skimmer-Bug-Sweep für Flipper Zero. Gegenüberwachungs-EMF-Messgerät, das den integrierten NFC-Chip nutzt. Keine zusätzliche Hardware nötig.

Teilen

Specter — NFC-Lesegerät- & Skimmer-Bug-Sweep für Flipper Zero

Specter 👻

Durchsuche die Lesegeräte, die du nicht sehen kannst.

Latest release Downloads Stars Build

Flipper Zero Onboard NFC No extra hardware Listen-only MIT

Specter verwandelt deinen Flipper Zero in einen Taschen-Überwachungsschutz-Bug-Sweep für aktive 13,56-MHz-NFC-Lesegeräte. Es lauscht passiv auf das RF-Feld, das ein eingeschaltetes Lesegerät ständig aussendet — ein versteckter Karten-Skimmer, der in ein Zahlungsterminal geschmuggelt wurde, ein verdecktes Lesegerät hinter einer Türverkleidung, ein rogue Logger, der unter einen Schreibtisch geklebt wurde — und sagt dir dann wo es ist, um welche Art von Gerät es sich handelt, ob der Raum sauber ist, und — auf Wache gelassen — den Moment, in dem eines auftaucht, während du weg bist. Es sendet niemals.

Die Lesegeräte sind unsichtbar. Specter macht sie sichtbar.

Bekannt aus
Help Net Security  ·  Cyber Security News


📟 Auf dem Flipper

Specter im Einsatz: einen ruhigen Raum durchsuchen, sich einem Lesegerät nähern, bei MAX einrasten, seine Polling-Frequenz per Fingerabdruck bestimmen, dann ein Site-Survey-Urteil

Ein Sweep, von Anfang bis Ende: ruhiger Raum → Annäherung → eingerastet → was es ist → das Urteil des Raums.

Specter-Bildschirme

Sweep (ruhig)  ·  Sweep (Lesegerät eingerastet)  ·  Fingerprint  ·  Survey (läuft)  ·  Survey (Urteil)
Watch (sauber)  ·  Watch (Lesegerät!)  ·  Logbook  ·  Calibrate  ·  Settings


✨ Die fünf Modi

Specter sind fünf Werkzeuge rund um einen Sensor. Jedes beantwortet eine andere Frage, daher hängt das richtige davon ab, was du tatsächlich herausfinden willst:

ModusDie Frage, die er beantwortetVerwende ihn, wenn
🔍 SweepWo ist es?Du ein Gerät vermutest und es durch Herumgehen lokalisieren willst
🔬 FingerprintUm welche Art von Gerät handelt es sich?Du einen Emitter gefunden hast und wissen willst, wie er sich verhält
🗺️ Site SurveyIst dieser Raum sauber?Du ein einziges Urteil für einen ganzen Raum willst, freihändig
🛰️ Watch ModeIst eines aufgetaucht, während ich weg war?Du den Flipper irgendwo zurücklässt, damit er Wache hält
📖 LogbookWas habe ich gefunden, und wann?Du es aufschreibst oder heute mit letzter Woche vergleichst — filtere nach Fundtyp

🔍 Sweep — wo ist es?

Sweep — Lesegerät gefunden, Messanzeige am Anschlag

Was es tut. Ein Live-Messgerät im EMF-Stil. Halte den Flipper flach und bewege ihn langsam über das Objekt, das du prüfst — ein Kartenterminal, ein Türlesegerät, die Unterseite einer ATM-Kante, ein Paket, einen Schreibtisch. Die Nadel folgt der Feldstärke in Echtzeit.

Was du siehst.

  • Die Skala — Nadel = Live-Messwert, der kleine Punkt = Peak-Hold (die stärkste Stelle, die du berührt hast, damit du Positionen vergleichen kannst).
  • FIELD % — derselbe Messwert als Zahl, mit einem ▲ / ▼ Trendpfeil, der dir sagt, ob die letzte halbe Sekunde die Sache wärmer oder kälter gemacht hat. Wenn du jagst, ist dieser Pfeil wichtiger als die Zahl.
  • PEAK % — der stärkste Messwert seit dem Scharfschalten, die Zahl hinter dem Peak-Hold-Punkt.
  • Die Markierung auf der Skala — wo READER bei deiner aktuellen Empfindlichkeit beginnt. Alles dahinter ist das, was Specter als Treffer wertet, sodass die Skala die Frage „Was zählt?" beantwortet, statt dich raten zu lassen.
  • Untere Leiste — bis du dein erstes Lesegerät gefunden hast, trägt sie die beiden Tasten, die du nicht durch Ausprobieren entdecken kannst (LEFT=cal, hold OK=log); danach deine Empfindlichkeit und eine Live-Wellenform. Sie wechselt zu einer schwarzen ● ACTIVE READER-Alarmleiste mit einem Näherungswort, sobald ein Träger erkannt wird.
  • NäherungFAINT → NEAR → CLOSE → STRONG → MAX. MAX bedeutet, dass die Messanzeige am Anschlag ist: du bist so nah, wie diese Messung auflösen kann.

Ton. Optionale Geiger-Klicks, die schneller werden, je näher du kommst, sodass du mit dem Flipper in der Tasche sweepen und allein nach Gehör jagen kannst.

TasteAktion
OKPeak-Hold und Kontaktzähler zurücksetzen
hold OKDiesen Messwert im Logbook speichern
LEFTAuf den Rauschpegel des Raums kalibrieren (3 s)
UP / DOWNEmpfindlichkeit ändern, ohne die Jagd zu verlassen

🔬 Fingerprint — um welche Art von Gerät handelt es sich?

Fingerprint — pollendes Lesegerät identifiziert

Was es tut. Sobald Sweep etwas gefunden hat, halte den Flipper still dagegen. Fingerprint hört auf, die Nähe zu messen, und beginnt, die Ein-/Aus-Flanken des Trägers zu messen, was tatsächlich eine Art von Emitter von einer anderen unterscheidet.

Was du siehst. Ein Urteil, einen Konfidenzbalken und die Beweise hinter beidem:

KlasseWas es in der Praxis bedeutet
CONTINUOUSDer Träger wird dauerhaft aufrechterhalten
POLLINGEin fester, quarzgetakteter Poll-Zyklus — die Periode wird in ms angezeigt
INTERMITTENTStoßweise, aber unregelmäßig — oft ein Telefon oder ein Lesegerät im Einsatz

Darunter stehen PER (Poll-Periode), BST (Burst-Breite), JIT (Jitter) und UP (echter Duty-Cycle), plus ein Logikanalysator-Pulszug des rohen Trägers — das Urteil ist also nie etwas, das du einfach glauben musst. Ein echtes pollendes Lesegerät erscheint als unverkennbare Rechteckwelle.

Ein ~ vor einer Zeitangabe bedeutet, dass sie nahe an der 2-ms-Abtastgrenze liegt, und die Konfidenz wird entsprechend abgewertet.

TasteAktion
OKDen Fund im Logbook speichern
hold OKDie Messung neu starten

🗺️ Site Survey — ist dieser Raum sauber?

Site Survey — Urteil

Was es tut. Ein zeitlich begrenzter Sweep eines ganzen Raums. Starte ihn, gehe den Raum normal ab und erhalte am Ende ein einziges Urteil — kein Nadelbeobachten.

Was du siehst. Ein Countdown und ein Fortschrittsbalken während des Laufs, dann eine Urteilskarte:

  • CLEAN — nichts hat den Rauschpegel überschritten
  • TRACE — kurze oder schwache Treffer; ein langsamerer zweiter Durchgang lohnt sich
  • ACTIVE READER — etwas war tatsächlich aktiv und hat gesendet

…mit PEAK / AVG-Feld, Kontaktzähler und UP %wie viel des Surveys ein Träger tatsächlich aktiv war, was oft die aussagekräftigste der vier Zahlen ist. Läuft 30 s, 60 s oder 2 min und protokolliert das Ergebnis automatisch. Die Karte nennt die Länge, über die bewertet wurde, denn ein 30-Sekunden-CLEAN ist nicht derselbe Fund wie ein Zwei-Minuten-CLEAN.

TasteAktion
OK (läuft)Jetzt stoppen und bewerten, was vorhanden ist
OK (auf der Karte)Einen weiteren Survey starten

🛰️ Watch Mode — ist eines aufgetaucht, während ich weg war?

Watch Mode — Lesegerät vorhanden

Was es tut. Hält unbegrenzt Wache. Scharfschalten, den Flipper abstellen, weggehen. Während Sweep du beim Jagen bist und Survey ein Test mit fester Länge ist, wartet Watch einfach — minuten- oder stundenlang.

Was du siehst. Eine große verstrichene Uhr und NO READER, solange nichts da ist. In dem Moment, in dem ein Lesegerät erscheint, invertiert das Band zu ACTIVE READER, ein Stärkebalken zeigt, wie nah es ist, der Bildschirm wacht auf und der Alarm ertönt. Das Band ist stabil statt blinkend — auf einem 1-Bit-Bildschirm ist ein solider invertierter Block bereits das Lauteste darauf, und die Anzeigen, die sich tatsächlich ändern, tragen die Lebendigkeit. Nachdem es vorbei ist, behält der Bildschirm die Beweise: HITS (wie viele separate Kontakte), PEAK, LAST (wie lange der jüngste her ist) und UP (Gesamtzeit, in der ein Träger tatsächlich aktiv war). Die Uhr läuft über 99:59 hinaus auf hh:mm weiter, statt einzufrieren, sodass eine Übernacht-Wache weiterhin summiert.

Watch ignoriert bewusst den Stealth-Modus — eine dunkle, stille Wache, die dir nie sagt, dass sie etwas gesehen hat, wäre schlimmer als nutzlos.

TasteAktion
OKNeu scharfschalten — löscht die Uhr und die Zähler

📖 Logbook — was habe ich gefunden, und wann?

Funde werden zweimal, aus einer Aktion gespeichert, sodass sie auf dem Gerät lesbar sind und bereits eine Tabellenkalkulation — kein Export-Schritt, an den man sich erinnern muss:

logbook.txt — gruppiert, für den Betrachter auf dem Gerätlogbook.csv — eine flache Zeile pro Eintrag
``` 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 … ```

Einträge werden mit SWEEP, READER, SURVEY oder WATCH getaggt und mit dem Zeitstempel der Flipper-Uhr versehen. Beide Dateien liegen in apps_data/specter/ auf der SD-Karte. Nichts verlässt jemals das Gerät. Löschen Sie sie über Einstellungen → Logbuch löschen (vorher bestätigen — es ist die einzige irreversible Aktion, die die App ausführen kann).


⚙️ Die unterstützenden Teile

🎯 Auto-Kalibrierung

Drücken Sie LEFT auf dem Sweep-Bildschirm und Specter hört 3 Sekunden lang auf den Umgebungsgeräuschpegel und setzt dann die Erkennungsschwelle knapp über den gemessenen Wert — gespeichert als Ihre Benutzerdefinierte Empfindlichkeit. Jeder Raum hat einen anderen HF-Grundpegel; dies stimmt auf den Raum ab, in dem Sie sich befinden, statt auf einen zur Build-Zeit fest eingebauten Wert. Stehen Sie an einem ruhigen Ort, wenn Sie ihn ausführen.

🕶️ Stealth-Modus

Hält Bildschirm und LED dunkel während des gesamten Sweeps, damit der Flipper nicht leuchtet, während Sie derjenige sind, der sucht. Ton und Vibration funktionieren weiter — der Sinn ist nicht, das Feedback zu deaktivieren, nach dem Sie sweepen. Das Verlassen eines Stealth-Bildschirms lässt das Display wieder aufleuchten, sodass BACK Sie immer auf einem beleuchteten Menü landen lässt.

📏 Den Messwert ablesen

Warum ein Leser, den Sie berühren, nicht 100 % der Zeit sendet. Der Detektor misst eine physikalische Sache: welchen Bruchteil der Zeit ein 13,56-MHz-Träger aktiv ist. Aber Leser pollen — ein kurzer Burst, eine Pause, ein weiterer Burst. Ein typisches Terminal strahlt nur 20–35 % der Zeit ab, sodass der rohe Duty-Cycle bei etwa 30 % sättigt, egal wie nah Sie kommen.

Diesen Rohwert auf der Anzeige darzustellen, ließ eine perfekte Erkennung wie ein Drittel davon aussehen. Das Messgerät ist stattdessen gegen dieses reale Polling-Band skaliert:

Roher Träger-DutyMessgerätNähe
3 % (Raumgeräusch)10 %FAINT
12 %40 %NEAR
20 %67 %CLOSE
28 %93 %STRONG
≥30 % (auf einem Leser aufliegend)100 %PEGGED

Der rohe Duty geht nie verloren: der Grundpegel, die Auto-Kalibrierung und das UP des Fingerprint-Bildschirms funktionieren weiterhin im echten Duty-Cycle, weil diese das Signal beschreiben, nicht Ihre Entfernung davon. Möchten Sie die wörtliche Zahl? Einstellungen → Messgerät-Skala → Duty %.

💾 Alles bleibt erhalten

Empfindlichkeit, Survey-Länge, Ton, Vibration, LED, Stealth, Protokollierung und Messgerät-Modus werden auf der SD-Karte gespeichert, sobald Sie sie ändern. Ein Sweep-Kit, das seine Konfiguration vergisst, ist schlimmer als gar keine Persistenz.


🧠 Wie es funktioniert

Jeder eingeschaltete NFC-Leser pingt kontinuierlich mit einem 13,56-MHz-Träger in die Luft, wartet darauf, dass eine Karte aufwacht. Sie können es nicht sehen, aber der NFC-Chip des Flippers kann es: Der ST25R3916 hat einen Hardware- Fremdfeld-Detektor (dieselbe Schaltung, die den Flipper eine Karte emulieren und erkennen lässt, wann ein Leser mit ihm spricht). Specter parkt den Chip im Nur-Erkennungs-Modus und sampelt dieses „Feld vorhanden?"-Bit ~500 Mal pro Sekunde — ohne jemals seinen eigenen Träger einzuschalten.

Dieses einzelne Bit trägt, schnell genug gesampelt, zwei unabhängige Signale:```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
**Wie stark → Signalstärke.** Über ein kurzes Zeitfenster misst Specter, *welchen Bruchteil der Zeit* ein Träger
präsent ist, und glättet diesen Wert zum **FELD %**. Ein Leser, der direkt auf dem Flipper sitzt, treibt das Messgerät
auf Anschlag; ein schwächerer oder weiter entfernter bewegt es nur leicht. Das steuert die Nadel, das Näherungswort und die Klickrate.

**Welcher Rhythmus → Identität.** Separat wird jeder Übergang dieses Bits zeitlich erfasst. Ein Leser, der alle
200 ms für 20 ms aufwacht, erzeugt ein Burst-/Lückenmuster mit nahezu keinem Jitter, weil seine Polling-Schleife
von einer quarzgetakteten Zustandsmaschine angetrieben wird. Handbewegung und HF-Rauschen sind nicht so gleichmäßig. Dieser
Unterschied ist es, was **POLLING** von **INTERMITTENT** trennt.

### Die Entscheidungsschichten werden auf einem echten Computer getestet

Die Stellen, an denen Specter Zahlen in eine *Behauptung* verwandelt — „das ist ein Polling-Leser", „dieser Raum ist
sauber", „das ist es, was die Nadel anzeigen sollte" — sind reines C ohne Hardware-Abhängigkeiten, und sie werden
durch Host-Tests festgenagelt statt auf dem Gerät entdeckt:```bash
make -C test     # 300 checks: classifier, verdict, meter scaling, presence

🚀 Installation

Kein Devboard, keine Firmware zum Flashen — es ist eine einzige .fap.

Option A — vorgefertigte .fap (am einfachsten)

  1. Lade die passende .fap von der Releases-Seite:

    Deine FirmwareDatei
    Offiziell / Stockspecter.fap
    Unleashed, RogueMaster, Momentum oder neuerspecter-fw-dev.fap

    Wenn der Flipper APP:87 < FW:88 — This app might not work anzeigt, hast du die falsche — nimm die andere Datei. Die API-Version der App ist beim Kompilieren festgelegt, daher kann ein einzelner Build nicht beide Firmware-Linien bedienen. Sie läuft meist trotzdem, wenn du auf Continue drückst, aber der passende Build fragt nicht nach.

  2. Öffne qFlipper, ziehe die Datei auf SD Card / apps / NFC /.

  3. Auf dem Flipper: Apps → NFC → Specter.

Option B — selbst bauen mit 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

Die `.fap` landet in `dist/specter.fap`; `ufbt launch` kopiert sie nach `apps/NFC/` und startet sie für dich.

> Symbole in `icons/`, Screenshots und das Banner in `images/` werden generiert — neu erzeugen mit
> `python3 tools_gen_icons.py`, `python3 tools_gen_mockups.py` und `python3 tools_gen_banner.py` (benötigt `pillow`).

---

## 🎮 Verwendung

**Ein Sweep, von Anfang bis Ende:**

1. Starte **Specter**. Drücke auf dem **Sweep**-Bildschirm **LEFT** und halte 3 Sekunden still, um
   auf den Grundgeräuschpegel des Raums zu kalibrieren.
2. Halte den Flipper flach und bewege ihn **langsam** über die Sache, die du prüfst — ein Kartenterminal, ein
   Türleser, die Unterseite einer ATM-Lippe, ein Paket, einen Schreibtisch.
   - **Ruhige / flache Wellenform** → kein aktiver Leser in Reichweite.
   - **Nadel steigt, Klicks werden schneller** → du näherst dich einem Emitter. Geh weiter Richtung Peak.
   - **`● ACTIVE READER` + Alarmrahmen** → ein aktiver Leser ist genau hier.
3. Etwas gefunden? Geh zurück und öffne **Fingerprint**. Halte den Flipper still dagegen und lass die
   Kadenz sich einpendeln — ein paar Sekunden reichen normalerweise. Drücke **OK**, um den Fund zu speichern.
4. Stattdessen einen ganzen Raum abklären? Öffne **Site Survey**, geh den Raum ab, bis sich der Balken füllt, und lies
   das Urteil.
5. Verlässt du den Bereich? Versetze den Flipper in den **Watch Mode** und er hält Wache, wacht auf und schlägt Alarm,
   wenn ein Leser auftaucht, während du weg bist.
6. Prüfe das **Logbook** auf alles, was du gespeichert hast, mit Zeitstempel — oder zieh `logbook.csv` von der Karte
   in eine Tabellenkalkulation.

> 💡 Sweepe zuerst einen bekannt guten Leser (dein eigenes Handy mit NFC oder ein kontaktloses Terminal, dem du vertraust), um
> zu sehen, wie ein starkes, legitimes Feld auf dem Messgerät aussieht — und wie sein Fingerprint sich liest. Dann
> geh auf die Jagd.

### Steuerung

| Bildschirm | Taste | Aktion |
|---|---|---|
| **Sweep** | `OK` | Peak / Kontakte zurücksetzen |
| | `hold OK` | Aktuelle Messung protokollieren |
| | `LEFT` | Grundgeräuschpegel kalibrieren (3 s) |
| **Fingerprint** | `OK` | Den Fund im Logbook speichern |
| | `hold OK` | Die Messung neu starten |
| **Site Survey** | `OK` | Die Survey erneut ausführen |
| **Watch Mode** | `OK` | Neu scharf schalten (Zähler und Uhr zurücksetzen) |
| *überall* | `BACK` | Eine Ebene nach oben |

---

## 🔬 Ehrliche Einschränkungen

- **Nur 13,56 MHz (HF).** Specter erfasst das **NFC-Band** — das, das von kontaktlosen Zahlungsskimmern,
  den meisten modernen Zutrittslesern, Transit- und Hotel-Lesern verwendet wird. Es **kann keine** **125 kHz (LF)**-Leser
  sehen (ältere HID Prox / EM4100-Türpanels); der LF-Pfad des Flippers hat kein äquivalentes Feld-Erkennungsbit.
- **Es erfasst den *Träger* eines Lesers, nicht das, was er liest.** Specter sagt dir, *dass ein aktiver Leser hier ist,
  ungefähr wie nah, und in welchem Rhythmus er pollt* — es dekodiert, identifiziert oder erfasst nichts,
  was der Leser tut.
- **Die Stärke ist relativ, nicht kalibriert.** `FIELD %` und die Näherungswörter sind ein vergleichender „wärmer /
  kälter"-Leitfaden zum Sweepen, keine gemessene Entfernung in cm. Es ist eine *skalierte* Messung des Träger-
  Duty-Cycle gegen ein typisches Polling-Band (siehe [Reading the meter](#-reading-the-meter--fixed-in-23));
  ein Leser, der ungewöhnlich spärlich pollt, wird bei gleicher Entfernung niedriger anzeigen, und einer im Dauerstrich-
  Modus wird aus größerer Entfernung anschlagen.
- **Das Messgerät läuft am Anschlag auf.** `PEGGED` bedeutet, der Träger ist so hoch, wie dieser Leser ihn überhaupt hält — darüber
  hinaus kann ein Näherkommen wirklich keine größere Zahl erzeugen. Der Flipper summt einmal, wenn das passiert,
  damit du weißt, dass du aufhören solltest, dich zu bewegen, auch wenn du den Bildschirm nicht sehen kannst. Nutze den `PEAK`-Hold, um
  stattdessen Positionen zu vergleichen.
- **Die Kadenz löst auf ~2 ms auf.** Das ist die Abtastperiode. Zeitmessungen in der Nähe davon werden mit einer
  **`~`** angezeigt und die Konfidenz wird entsprechend abgewertet — Specter markiert lieber seine eigene Auflösungs-
  grenze, als eine präzise aussehende Zahl zu nennen, hinter der es nicht stehen kann.
- **`CLEAN` bedeutet sauber bei der Sensitivität, die du gewählt hast.** Ein ruhender Skimmer, der nur bei einem echten Tap aufwacht,
  oder einer, der abgeschirmt ist, bleibt bei *jedem* Schwellenwert unsichtbar. Das Fehlen einer Messung ist keine Garantie für
  Abwesenheit.
- **Ein Funkgerät zur Zeit.** Specter übernimmt den NFC-Chip während des Sweepens, also schließe zuerst jede andere NFC-App
  (es wird *NFC unavailable* anzeigen, wenn etwas anderes das Funkgerät belegt).

---

## ⚖️ Rechtliches & ethisches

Specter ist ein **defensives, nur zuhörendes** Tool — es **sendet nie**, erzeugt nie ein Feld, berührt nie
den Leser. Nutze es, um **deinen eigenen** POS-Bereich, deine Tür, deinen Schreibtisch oder deine Habseligkeiten zu sweepen, oder Hardware, für deren Bewertung du **ausdrücklich
autorisiert** bist. Du bist für die Art und Weise verantwortlich, wie du es nutzt. Kenne deine lokalen Gesetze.

---

## 🗺️ Roadmap

- [x] Sensitivität / Ton / Vibration / LED über Neustarts hinweg beibehalten
- [x] „Logbook" der Erkennungen mit Zeitstempeln auf der SD-Karte
- [x] Hintergrund-Sweep bei ausgeschaltetem Bildschirm — *Stealth-Modus*
- [x] Einstellbarer Schwellenwert für feinere Bereichskontrolle — *Auto-Kalibrierung + Custom-Sensitivität*
- [x] Einen Emitter anhand seiner Polling-Kadenz fingerprinten
- [x] Zeitgesteuerte Site Survey mit einem Raumurteil
- [x] Das Logbook als CSV für die Berichterstattung exportieren — *live neben der .txt geschrieben*
- [x] Langlaufender unbeaufsichtigter Watch-Modus mit einem Wake-on-Detection-Alarm
- [x] Das Messgerät seinen vollen Bereich gegen echte pollende Leser nutzen lassen
- [x] Wärmer/kälter-Trendpfeil während der Jagd
- [ ] Eine LF (125 kHz)-spulenbasierte Lesererkennung als separater Modus untersuchen
- [ ] Geräteinterne Logbook-Filterung nach Typ

---

## 🗂️ Projektstruktur```
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

Alle Grafiken werden generiert, damit sie nie von der App abweichen:

AssetGrößeWohin es gehört
images/banner.png2560×800README-Header (2×, damit es auf Retina-Displays scharf bleibt)
images/social-preview.png1280×640Settings → Social preview — GitHubs empfohlene Größe (min. 640×320, max. 1 MB)
images/mark.png512×512Quadratisches Logo: Avatare, Favicons, Folien
images/demo.gif768×384Die Animation oben, ~9 s, erstellt aus den echten View-Konstanten
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
> Die soziale Vorschau ist das einzige Asset, das GitHub nicht aus dem Repo übernehmen kann — sie
> muss einmal manuell unter **Settings → Social preview** hochgeladen werden. Sie wird angezeigt,
> wenn das Repo auf Slack, X, LinkedIn oder Discord geteilt wird.

---

## 🙏 Credits

- Entwickelt von **[at0m-b0mb](https://github.com/at0m-b0mb)**.
- Teil einer Flipper-Sicherheitstool-Familie: **[Argus](https://github.com/at0m-b0mb/Argus-FlipperZero)** (Wi-Fi-Deauth-/Evil-Twin-Watchdog), **[GhostTag](https://github.com/at0m-b0mb/GhostTag-FlipperZero)** (BLE-Anti-Stalking-Jäger) und **[Cerberus](https://github.com/at0m-b0mb/flipper-cerberus)** (Sub-GHz-RF-Watchdog).
- Basiert auf der [Flipper Zero Firmware](https://github.com/flipperdevices/flipperzero-firmware) NFC HAL (`furi_hal_nfc`-Felderkennung) + [ufbt](https://github.com/flipperdevices/flipperzero-ufbt).

## 📄 Lizenz

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

Kategorien