
Specter-FlipperZero v2.3
👻 Specter — barrido pasivo de lectores/skimmers NFC de 13.56 MHz para Flipper Zero. Medidor EMF de contravigilancia que utiliza el chip NFC integrado. Sin hardware adicional.
Specter 👻
Rastrea los lectores que no puedes ver.
Specter convierte tu Flipper Zero en un barrido de contravigilancia de bolsillo para lectores NFC activos de 13.56 MHz. Escucha pasivamente el campo RF que un lector encendido está emitiendo constantemente — un skimmer de tarjetas oculto metido en un terminal de pago, un lector encubierto tras el panel de una puerta, un registrador no autorizado pegado bajo un escritorio — y luego te dice dónde está, qué tipo de cosa es, si la sala está limpia y, si lo dejas vigilando, el momento en que aparece uno mientras no estás. Nunca transmite.
Los lectores son invisibles. Specter los hace visibles.
📟 En el Flipper
Barrido (en calma) · Barrido (lector fijado) · Huella · Inspección (en curso) · Inspección (veredicto)
Vigilancia (sin lectores) · Vigilancia (¡lector!) · Bitácora · Calibración · Configuración
✨ Qué hace
Specter responde a cuatro preguntas distintas — ¿dónde está?, ¿qué es?, ¿está limpia la sala y ¿apareció uno mientras no estaba? — y cada una tiene su propia pantalla.
🔍 Barrido — ¿dónde está?
La pieza central: un indicador EMF de estilo analógico. La aguja sigue el FIELD % en tiempo real, un marcador de retención de pico recuerda la detección más fuerte, y la parte superior del dial es una zona caliente. Una forma de onda en vivo traza el piso de ruido mientras está en calma.
En el instante en que se detecta la portadora de un lector, la pantalla se enmarca con un borde de alarma, un anillo pulsante late alrededor del dial y la franja cambia a ● ACTIVE READER con una lectura de proximidad (FAINT → NEAR → CLOSE → STRONG). Los clics de Geiger opcionales se aceleran a medida que el campo se fortalece, de modo que puedes barrer una superficie con el Flipper en el bolsillo y oír que te vas acercando.
OK reinicia el pico/los contactos · mantener OK registra la lectura · LEFT calibra con la sala en la que estás.
🔬 Huella — ¿qué es? NUEVO en 2.0
¿Has encontrado algo? Mantén el dispositivo quieto sobre ello. Specter deja de perseguir la proximidad y comienza a medir los flancos de encendido/apagado de la portadora, y luego te dice qué tipo de emisor estás mirando:
| Clase | Qué significa |
|---|---|
| CONTINUOUS | Portadora mantenida permanentemente arriba |
| POLLING | Ciclo de sondeo fijo: el período se muestra en ms |
| INTERMITTENT | A ráfagas pero irregular |
Obtienes el período de sondeo, el ancho de ráfaga, el jitter, el ciclo de trabajo (duty-cycle) y una barra de confianza — además de un tren de pulsos de analizador lógico de la portadora cruda en la parte inferior, para que el veredicto nunca tenga que creerse por sí solo. El bucle de sondeo de un lector está sincronizado por cristal, por lo que un sondeo genuino aparece como una onda cuadrada inconfundible.
OK guarda el hallazgo en la bitácora · mantener OK reinicia la medición.
🗺️ Inspección de sitio — ¿está limpia esta sala? NUEVO en 2.0
Un barrido cronometrado de todo un espacio. Inícialo, recorre la sala y obtén un único veredicto al final, en lugar de tener que vigilar una aguja todo el tiempo:
CLEAN— nada superó el piso de ruidoTRACE— golpes breves o débiles, vale la pena una segunda pasadaACTIVE READER— algo estuvo activo y emitiendo de verdad
…con campo máximo/promedio, número de contactos y cuánto tiempo de la inspección estuvo realmente activa una portadora. Funciona durante 30 s, 60 s o 2 min, y registra el resultado automáticamente.
🛰️ Modo Vigilancia — avísame si aparece uno NUEVO en 2.1
Donde el Barrido es tu caza y la Inspección es un veredicto acotado, Vigilancia se queda de guardia indefinidamente. Actívalo, deja el Flipper en algún lugar y aléjate. Mantiene un reloj en marcha y un contador de detecciones, recuerda cuándo fue el último contacto y — ese es el punto — despierta la pantalla y suena en el instante en que aparece un lector. Cada nuevo contacto se registra automáticamente con su marca de tiempo.
Deliberadamente prescinde del modo sigiloso: un guardián silencioso y oscuro que nunca te dice que vio algo sería peor que inútil. OK lo rearma (borra el contador y el reloj).
📖 Bitácora + CSV en vivo CSV NUEVO en 2.1
Cada hallazgo se escribe dos veces con una sola acción — de modo que es legible en el dispositivo y ya es una hoja de cálculo, sin ningún paso de exportación que recordar:
logbook.txt — agrupado, para el visor del dispositivo | logbook.csv — una fila plana por entrada |
|---|---|
|
|
Ambos se encuentran en apps_data/specter/ de la tarjeta SD. Nada sale del dispositivo.
🎯 Autocalibración NUEVO en 2.0
Pulsa LEFT en la pantalla de Barrido y Specter escucha el piso de ruido ambiental durante 3 segundos; luego fija el umbral de detección justo por encima de lo que haya medido — guardado como tu sensibilidad Personalizada. Cada sala tiene un piso RF diferente; esto se ajusta a la sala en la que estás, en lugar de a un número fijado en tiempo de compilación.
🕶️ Modo sigiloso NUEVO en 2.0
Mantiene la pantalla y el LED oscuros durante todo el barrido, para que el Flipper no brille mientras eres tú quien mira. El sonido y la vibración siguen funcionando: la idea no es desactivar la retroalimentación con la que barres. Al salir de una pantalla sigilosa se vuelve a encender la pantalla, de modo que BACK siempre te deja en un menú iluminado (corregido en 2.2 — antes dejaba la pantalla oscura, lo que hacía que BACK pareciera no responder).
📏 Lectura del indicador CORREGIDO en 2.3
Por qué un lector que estás tocando no emite el 100% del tiempo. El detector mide una sola cosa física: qué fracción del tiempo está realmente activa una portadora de 13.56 MHz. Pero los lectores hacen sondeo (polling) — una ráfaga corta, una pausa, otra ráfaga. Un terminal o lector de acceso típico solo está radiando entre el 20 y el 35% del tiempo, por lo que el ciclo de trabajo bruto se satura alrededor del 30% por muy cerca que estés.
Specter solía imprimir ese número bruto en el indicador, lo que hacía que una detección perfecta pareciera una tercera parte de una — y dejaba CLOSE/STRONG y la prueba de pico de la inspección permanentemente fuera de alcance. El indicador ahora se escala contra esa banda real de sondeo:
| Ciclo de trabajo bruto de la portadora | Indicador | Proximidad |
|---|---|---|
| 3% (ruido de sala) | 9% | FAINT |
| 12% | 34% | NEAR |
| 20% | 57% | CLOSE |
| 31% (encima de un lector) | 89% | STRONG |
| ≥35% / onda continua | 100% | MAX |
MAX significa al tope — estás tan cerca como esta medición puede resolver, y acercarte más no lo cambiará. Eso se indica en lugar de ocultarse, para que una aguja clavada nunca parezca una aguja rota.
El ciclo de trabajo bruto no se pierde nunca: el piso de ruido, la autocalibración y el DUTY de la pantalla Huella siguen funcionando con el ciclo de trabajo real, porque describen la señal, no tu distancia respecto a ella. ¿Prefieres el número literal? Configuración → Indicador → Crudo.
💾 Todo persiste NUEVO en 2.0
La sensibilidad, la duración de la inspección, el sonido, la vibración, el LED, el modo sigiloso, el registro y el modo del indicador se guardan en la tarjeta SD en el momento en que los cambias. Un kit de barrido que olvida su configuración es peor que no tener persistencia alguna.
🧠 Cómo funciona
Cada lector NFC encendido emite continuamente una portadora de 13.56 MHz al aire, esperando a que una tarjeta despierte. No puedes verlo, pero el chip NFC del Flipper sí puede: el ST25R3916 tiene un detector de campo externo por hardware (el mismo circuito que permite al Flipper emular una tarjeta y saber cuándo un lector le está hablando). Specter deja el chip en modo solo-detección y muestrea ese bit de «¿hay campo?» unas 500 veces por segundo — sin encender jamás su propia portadora.
Ese único bit, muestreado con la suficiente rapidez, transporta dos señales independientes:
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
Cuánto → fuerza. En una ventana corta, Specter mide qué fracción del tiempo está presente una portadora y lo suaviza en el FIELD %. Un lector justo encima del Flipper clava el indicador; uno más débil o más lejano lo mueve ligeramente. Eso impulsa la aguja, la palabra de proximidad y la velocidad de los clics.
Qué ritmo → identidad. Por separado, se mide cada transición de ese bit. Un lector que se despierta durante 20 ms cada 200 ms produce un patrón de ráfaga/pausa con casi nada de jitter, porque su bucle de sondeo está impulsado por una máquina de estados sincronizada por cristal. El movimiento de la mano y el ruido RF no son tan estables. Esa diferencia es lo que separa POLLING de INTERMITTENT.
Las capas de decisión se prueban en una computadora real
Los puntos donde Specter convierte números en una afirmación — «esto es un lector con sondeo», «esta sala está limpia», «esto es lo que debería marcar la aguja» — son C puro sin dependencias de hardware, y están fijados por pruebas en el host en lugar de descubiertos en el dispositivo:
make -C test # 284 checks: classifier, survey verdict, meter scaling
🚀 Instalación
Sin placa de desarrollo, sin firmware que flashear: es un único .fap.
Opción A — .fap precompilado (lo más fácil)
- Descarga
specter.fapdesde la página de Releases. - Abre qFlipper, arrastra el archivo a
SD Card / apps / NFC /. - En el Flipper: Apps → NFC → Specter.
Opción B — compílalo tú mismo con 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
El .fap queda en dist/specter.fap; ufbt launch lo copia a apps/NFC/ y lo abre por ti.
Los iconos en
icons/, las capturas y el banner enimages/se generan; se regeneran conpython3 tools_gen_icons.py,python3 tools_gen_mockups.pyypython3 tools_gen_banner.py(necesitapillow).
🎮 Cómo usarlo
Un barrido, de principio a fin:
- Inicia Specter. En la pantalla Barrido, pulsa LEFT y mantén el dispositivo quieto durante 3 segundos para calibrar el piso de ruido de la sala.
- Sostén el Flipper plano y muévelo lentamente sobre lo que estés revisando: un terminal de tarjetas, un lector de puerta, la parte inferior del borde de un cajero automático, un paquete, un escritorio.
- Onda plana / en calma → no hay ningún lector activo en el rango.
- La aguja sube, los clics se aceleran → te estás acercando a un emisor. Continúa hacia el pico.
● ACTIVE READER+ borde de alarma → hay un lector activo justo aquí.
- ¿Encontraste algo? Sal y abre Huella. Mantén el Flipper quieto contra ello y deja que la cadencia se asiente: unos segundos suelen bastar. Pulsa OK para guardar el hallazgo.
- ¿Prefieres revisar una sala completa? Abre Inspección de sitio, recorre el espacio hasta que la barra se llene y lee el veredicto.
- ¿Te vas de la zona? Deja el Flipper en Modo Vigilancia y se quedará de guardia, despertándose y sonando si aparece un lector mientras no estás.
- Revisa la Bitácora para ver todo lo que has guardado, con marca de tiempo — o extrae
logbook.csvde la tarjeta a una hoja de cálculo.
💡 Barre primero un lector que sepas que es bueno (tu propio teléfono haciendo NFC, o un terminal contactless de confianza) para ver cómo se ve un campo fuerte y legítimo en el indicador — y qué lectura arroja su huella. Luego ve a cazar.
Controles
| Pantalla | Tecla | Acción |
|---|---|---|
| Barrido | OK | Reiniciar pico / contactos |
mantener OK | Registrar la lectura actual | |
LEFT | Calibrar el piso de ruido (3 s) | |
| Huella | OK | Guardar el hallazgo en la bitácora |
mantener OK | Reiniciar la medición | |
| Inspección de sitio | OK | Volver a ejecutar la inspección |
| Modo Vigilancia | OK | Rearmar (borrar contador y reloj) |
| en cualquier lugar | BACK | Subir un nivel |
🔬 Limitaciones honestas
- Solo 13.56 MHz (HF). Specter detecta la banda NFC — la que usan los skimmers de pago sin contacto, la mayoría de los lectores de acceso modernos, los lectores de transporte y de hotel. No puede ver lectores de 125 kHz (LF) (paneles de puerta antiguos HID Prox / EM4100); la vía LF del Flipper no tiene un bit equivalente de detección de campo.
- Detecta la portadora de un lector, no lo que lee. Specter te dice que hay un lector activo aquí, aproximadamente a qué distancia y con qué ritmo hace sondeo — no decodifica, identifica ni captura nada de lo que el lector hace.
- La fuerza es relativa, no calibrada.
FIELD %y las palabras de proximidad son una guía comparativa de «más caliente / más frío» para el barrido, no una distancia medida en cm. Es una lectura escalada del ciclo de trabajo de la portadora frente a una banda de sondeo típica (ver Lectura del indicador); un lector que hace sondeo de forma inusualmente dispersa marcará menos a la misma distancia, y uno en modo de onda continua se fijará al máximo desde más lejos. - El indicador tiene un tope.
MAXsignifica que la portadora está activa tanto como este lector puede mantenerla; más allá de ese punto, acercarse de verdad no puede producir un número mayor. Usa el retenedor de picoPKpara comparar posiciones. - La cadencia se resuelve en ~2 ms. Ese es el período de muestreo. Los tiempos cercanos a ese valor se muestran con un
~y la confianza se descuenta en consecuencia: Specter prefiere señalar su propio límite de resolución antes que citar un número de aspecto preciso que no puede respaldar. CLEANsignifica limpio con la sensibilidad que elegiste. Un skimmer inactivo que solo se despierta con un toque real, o uno blindado, permanece invisible con cualquier umbral. La ausencia de una lectura no es una garantía de ausencia.- Una sola radio a la vez. Specter toma el chip NFC mientras barre, así que cierra primero cualquier otra app NFC (dirá NFC no disponible si algo más tiene la radio).
⚖️ Legal y ética
Specter es una herramienta defensiva y de solo escucha — nunca transmite, nunca alimenta un campo, nunca toca el lector. Úsalo para revisar tu propia zona de POS, puerta, escritorio o pertenencias, o hardware que estés explícitamente autorizado a evaluar. Eres responsable de cómo lo uses. Conoce tus leyes locales.
🗺️ Hoja de ruta
- Persistir sensibilidad / sonido / vibración / LED entre reinicios
- «Bitácora» de detecciones con marcas de tiempo en la tarjeta SD
- Barrido en segundo plano con la pantalla apagada — modo sigiloso
- Umbral ajustable para un control de rango más fino — autocalibración + sensibilidad personalizada
- Identificar por huella un emisor según su cadencia de sondeo
- Inspección de sitio cronometrada con veredicto de sala
- Exportar la bitácora como CSV para informes — se escribe en vivo junto al .txt
- Modo vigilancia desatendido de larga duración con alarma de activación por detección
- Hacer que el indicador use todo su rango con lectores de sondeo reales
- Investigar una detección de lector por bobina LF (125 kHz) como modo separado
- Filtrado de la bitácora por tipo en el dispositivo
🗂️ Estructura del proyecto
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éditos
- Creado por at0m-b0mb.
- Parte de una familia de herramientas de seguridad para Flipper: Argus (vigilante de deauth Wi-Fi / evil-twin), GhostTag (cazador antiacoso BLE) y Cerberus (vigilante RF Sub-GHz).
- Impulsado por el firmware de Flipper Zero, la HAL NFC (detección de campo
furi_hal_nfc) + ufbt.
📄 Licencia
MIT © 2026 at0m-b0mb