Volver a actualizaciones
Nuevo releaseAug 20, 2026

Specter-FlipperZero v2.7

👻 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.

Compartir

Specter — barrido de lectores y skimmers NFC para Flipper Zero

Specter 👻

Barre en busca de los lectores que no puedes ver.

Última versión Descargas Estrellas Compilación

Flipper Zero NFC integrado Sin hardware adicional Solo escucha MIT

Specter convierte tu Flipper Zero en un barrido de contravigilancia de bolsillo para lectores NFC activos de 13.56 MHz. Escucha pasivamente el campo de RF que un lector encendido emite constantemente — un skimmer de tarjetas oculto en un terminal de pago, un lector encubierto detrás de un panel de puerta, un registrador malicioso pegado bajo un escritorio — y luego te dice dónde está, qué tipo de dispositivo es, si la habitación está limpia y — si lo dejas en vigilancia — el momento en que uno aparece mientras estás ausente. Nunca transmite.

Los lectores son invisibles. Specter los hace visibles.

Destacado en
Help Net Security  ·  Cyber Security News


📟 En el Flipper

Specter en uso: barriendo una habitación tranquila, acercándose a un lector, fijándose en MAX, identificando su cadencia de sondeo y luego un veredicto de inspección del sitio

Un barrido, de principio a fin: habitación tranquila → acercándose → fijado → qué es → el veredicto de la habitación.

Pantallas de Specter

Barrido (tranquilo)  ·  Barrido (lector fijado)  ·  Huella  ·  Inspección (en curso)  ·  Inspección (veredicto)
Vigilancia (despejado)  ·  Vigilancia (¡lector!)  ·  Registro  ·  Calibrar  ·  Ajustes


✨ Los cinco modos

Specter son cinco herramientas alrededor de un solo sensor. Cada una responde a una pregunta distinta, por lo que la adecuada depende de lo que realmente intentas averiguar:

ModoLa pregunta que respondeÚsalo cuando
🔍 Barrido¿Dónde está?Sospechas de un dispositivo y quieres localizarlo moviéndote
🔬 Huella¿Qué tipo de dispositivo es?Has encontrado un emisor y quieres saber cómo se comporta
🗺️ Inspección del sitio¿Está limpia esta habitación?Quieres un veredicto para todo un espacio, sin usar las manos
🛰️ Modo Vigilancia¿Apareció uno mientras estaba ausente?Vas a dejar el Flipper en algún lugar para que haga guardia
📖 Registro¿Qué encontré y cuándo?Estás documentando los hallazgos o comparando hoy con la semana pasada — filtra por tipo de hallazgo

🔍 Barrido — ¿dónde está?

Barrido — lector encontrado, medidor al máximo

Qué hace. Un medidor EMF en vivo. Sostén el Flipper en horizontal 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. La aguja sigue la intensidad del campo en tiempo real.

Qué ves.

  • El dial — la aguja = lectura en vivo, el punto pequeño = retención de pico (el punto más fuerte que has tocado, para que puedas comparar posiciones).
  • FIELD % — la misma lectura como número, con una flecha de tendencia ▲ / ▼ que te indica si el último medio segundo fue más cálido o más frío. Cuando estás cazando, esa flecha importa más que el número.
  • PK / C — lectura máxima y cuántos contactos separados has tenido.
  • Franja inferior — la forma de onda en vivo y tu sensibilidad actual mientras está en silencio; cambia a una barra de alarma negra ● ACTIVE READER con una palabra de proximidad en el momento en que se detecta una portadora.
  • ProximidadFAINT → NEAR → CLOSE → STRONG → MAX. MAX significa que el medidor está al tope: estás tan cerca como esta medición puede resolver.

Sonido. Clics geiger opcionales que se aceleran a medida que te acercas, para que puedas barrer con el Flipper en el bolsillo y cazar solo con el oído.

TeclaAcción
OKRestablecer retención de pico y contador de contactos
mantener OKGuardar esta lectura en el registro
IZQUIERDACalibrar con el ruido de fondo de la habitación (3 s)

🔬 Huella — ¿qué tipo de dispositivo es?

Huella — lector con sondeo identificado

Qué hace. Una vez que el Barrido ha encontrado algo, sostén el Flipper quieto contra él. La Huella deja de medir proximidad y comienza a cronometrar los flancos de encendido/apagado de la portadora, que es lo que realmente distingue un tipo de emisor de otro.

Qué ves. Un veredicto, una barra de confianza y la evidencia detrás de ambos:

ClaseQué significa en la práctica
CONTINUOLa portadora se mantiene permanentemente activa
SONDEOUn ciclo de sondeo fijo y sincronizado por cristal — el período se muestra en ms
INTERMITENTERáfagas irregulares — a menudo un teléfono o un lector en uso

Debajo están PER (período de sondeo), BST (ancho de ráfaga), JIT (jitter) y DUTY (ciclo de trabajo real), además de un tren de pulsos de analizador lógico de la portadora cruda — para que el veredicto nunca sea algo que debas aceptar a ciegas. Un lector de sondeo genuino aparece como una onda cuadrada inconfundible.

Un ~ antes de un tiempo significa que está cerca del límite de muestreo de 2 ms, y la confianza se descuenta en consecuencia.

TeclaAcción
OKGuardar el hallazgo en el registro
mantener OKReiniciar la medición

🗺️ Inspección del sitio — ¿está limpia esta habitación?

Inspección del sitio — veredicto

Qué hace. Un barrido cronometrado de todo un espacio. Inícialo, camina por la habitación con normalidad y obtén un único veredicto al final — sin mirar la aguja.

Qué ves. Una cuenta regresiva y una barra de progreso mientras se ejecuta, luego una tarjeta de veredicto:

  • CLEAN — nada cruzó el ruido de fondo
  • TRACE — golpes breves o débiles; vale la pena una segunda pasada más lenta
  • ACTIVE READER — algo estaba realmente activo y emitiendo

…con campo MAX / AVG, contador de contactos y FIELD %cuánto del tiempo de la inspección una portadora estuvo realmente activa, que a menudo es el número más revelador de los cuatro. Se ejecuta durante 30 s, 60 s o 2 min, y registra el resultado automáticamente.

TeclaAcción
OKEjecutar la inspección nuevamente

🛰️ Modo Vigilancia — ¿apareció uno mientras estaba ausente?

Modo Vigilancia — lector presente

Qué hace. Hace guardia indefinidamente. Ármalo, deja el Flipper en algún lugar, aléjate. Donde el Barrido es tú cazando y la Inspección es una prueba de duración fija, la Vigilancia solo espera — durante minutos u horas.

Qué ves. Un gran reloj de tiempo transcurrido y ALL CLEAR mientras no hay nada. En el instante en que aparece un lector, la banda se invierte a READER PRESENT, la pantalla se despierta y suena la alarma. La banda es estable en lugar de parpadear — un pequeño marcador pulsa en su lugar, para que se lea como en vivo sin estroboscopiar. Después de que pasa, la pantalla conserva la evidencia: HITS (cuántos contactos separados), PEAK, LAST (hace cuánto tiempo ocurrió el más reciente) y SEEN (tiempo total en que una portadora estuvo realmente activa).

La Vigilancia ignora deliberadamente el modo sigiloso — un guardia oscuro y silencioso que nunca te dijera que vio algo sería peor que inútil.

TeclaAcción
OKRe-armar — restablece el reloj y los contadores

📖 Registro — ¿qué encontré y cuándo?

Los hallazgos se guardan dos veces, con una sola acción, para que sean legibles en el dispositivo y ya sean una hoja de cálculo — sin pasos de exportación que recordar:

logbook.txt — agrupado, para el visor en el dispositivologbook.csv — una fila plana por entrada
``` 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 … ```

Las entradas están etiquetadas como SWEEP, READER, SURVEY o WATCH y llevan la marca de tiempo del reloj del Flipper. Ambos archivos viven en apps_data/specter/ de la tarjeta SD. Nada sale jamás del dispositivo. Bórralos desde Settings → Clear logbook (con confirmación previa — es lo único irreversible que la app puede hacer).


⚙️ Las piezas de apoyo

🎯 Auto-calibración

Pulsa LEFT en la pantalla de Sweep y Specter escucha el suelo de ruido ambiente durante 3 segundos y luego fija el umbral de detección justo por encima de lo que haya medido — guardado como tu sensibilidad Custom. Cada sala tiene un suelo de RF distinto; esto lo ajusta al de la sala en la que estás en lugar de a un número fijado en el momento de compilar. Ponte en un sitio silencioso cuando lo ejecutes.

🕶️ Modo sigiloso

Mantiene la pantalla y el LED apagados durante todo el barrido, para que el Flipper no brille mientras eres tú quien mira. El sonido y la vibración siguen funcionando — el objetivo no es desactivar la retroalimentación con la que estás barriendo. Salir de una pantalla sigilosa vuelve a encender la pantalla, así que BACK siempre te lleva a un menú iluminado.

📏 Lectura del medidor

Por qué un lector que estás tocando no emite el 100% del tiempo. El detector mide una única cosa física: qué fracción del tiempo está activa una portadora de 13.56 MHz. Pero los lectores hacen polling — una ráfaga corta, una pausa, otra ráfaga. Un terminal típico solo está radiando entre el 20 y el 35% del tiempo, así que el ciclo de trabajo bruto se satura en torno al 30% por muy cerca que te pongas.

Mostrar ese número bruto en el indicador hacía que una detección perfecta pareciera un tercio de una. El medidor está escalado contra esa banda real de polling en su lugar:

Ciclo de trabajo bruto de la portadoraMedidorProximidad
3% (ruido de sala)10%FAINT
12%40%NEAR
20%67%CLOSE
28%93%STRONG
≥30% (apoyado sobre un lector)100%MAX

El ciclo de trabajo bruto nunca se pierde: el suelo de ruido, la auto-calibración y el DUTY de la pantalla de Fingerprint siguen funcionando con el ciclo de trabajo real, porque esos describen la señal, no tu distancia a ella. ¿Quieres el número literal? Settings → Meter → Raw.

💾 Todo persiste

La sensibilidad, la duración del survey, el sonido, la vibración, el LED, el sigilo, el registro y el modo del medidor 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

Todo lector NFC encendido emite continuamente una portadora de 13.56 MHz al aire, esperando que una tarjeta se despierte. No puedes verlo, pero el chip NFC del Flipper sí: 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 "¿campo presente?" unas 500 veces por segundo — sin activar jamás su propia portadora.

Ese único bit, muestreado con la suficiente rapidez, transporta dos señales independientes:```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
**Cuánto → intensidad.** En una ventana corta, Specter mide *qué fracción del tiempo* una portadora está
presente y la suaviza en el **FIELD %**. Un lector situado justo encima del Flipper fija el medidor;
uno más débil o más lejano lo mueve ligeramente. Eso impulsa la aguja, la palabra de proximidad y la tasa de clics.

**Qué ritmo → identidad.** Por separado, se cronometra cada transición de ese bit. Un lector que se activa
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 de RF no son tan estables. Esa
diferencia es lo que separa **POLLING** de **INTERMITTENT**.

### Las capas de decisión se prueban en un ordenador real

Los lugares donde Specter convierte números en una *afirmación* — "esto es un lector de sondeo", "esta sala está
limpia", "esto es lo que debería leer 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:```bash
make -C test     # 300 checks: classifier, verdict, meter scaling, presence

🚀 Instalación

Sin placa de desarrollo, sin firmware que flashear — es un único .fap.

Opción A — .fap precompilado (lo más fácil)

  1. Descarga el .fap correcto desde la página de Releases:

    Tu firmwareArchivo
    Oficial / stockspecter.fap
    Unleashed, RogueMaster, Momentum o cualquier versión más recientespecter-fw-dev.fap

    Si el Flipper dice APP:87 < FW:88 — This app might not work, tienes el equivocado — toma el otro archivo. La versión de la API de la app se fija cuando se compila, por lo que una sola compilación no puede satisfacer ambas líneas de firmware. Normalmente sigue funcionando si pulsas Continue, pero la compilación correcta no lo preguntará.

  2. Abre qFlipper, arrastra el archivo a SD Card / apps / NFC /.

  3. En el Flipper: Apps → NFC → Specter.

Opción B — compílalo tú mismo 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

El `.fap` termina en `dist/specter.fap`; `ufbt launch` lo copia a `apps/NFC/` y lo inicia por ti.

> Los iconos en `icons/`, las capturas de pantalla y el banner en `images/` se generan — regenera con
> `python3 tools_gen_icons.py`, `python3 tools_gen_mockups.py` y `python3 tools_gen_banner.py` (necesita `pillow`).

---

## 🎮 Cómo usarlo

**Un barrido, de principio a fin:**

1. Inicia **Specter**. En la pantalla **Sweep**, pulsa **LEFT** y mantén pulsado durante 3 segundos para
   calibrar el ruido de fondo de la sala.
2. Mantén el Flipper plano y muévelo **lentamente** sobre lo que estás revisando — un terminal de tarjeta, un
   lector de puerta, la parte inferior del borde de un cajero automático, un paquete, un escritorio.
   - **Forma de onda plana / silenciosa** → no hay ningún lector activo en el alcance.
   - **La aguja sube, los clics se aceleran** → te estás acercando a un emisor. Sigue hacia el pico.
   - **`● ACTIVE READER` + borde de alarma** → hay un lector activo justo aquí.
3. ¿Has encontrado algo? Sal y abre **Fingerprint**. Mantén el Flipper quieto contra ello y deja que el
   ritmo se asiente — unos segundos suelen ser suficientes. Pulsa **OK** para guardar el hallazgo.
4. ¿Estás limpiando una sala entera en su lugar? Abre **Site Survey**, recorre el espacio hasta que la barra se llene y lee
   el veredicto.
5. ¿Te vas de la zona? Deja el Flipper en **Watch Mode** y hará guardia, despertándose y sonando
   si aparece un lector mientras no estás.
6. Consulta **Logbook** para ver todo lo que has guardado, con marca de tiempo — o extrae `logbook.csv` de la tarjeta
   a una hoja de cálculo.

> 💡 Barre primero un lector que sepas que funciona (tu propio teléfono haciendo NFC, o un terminal sin contacto en el que confíes) para
> ver cómo se ve un campo fuerte y legítimo en el medidor — y cómo se lee su huella. Luego
> ve a cazar.

### Controles

| Pantalla | Tecla | Acción |
|---|---|---|
| **Sweep** | `OK` | Restablecer pico / contactos |
| | `mantener OK` | Registrar la lectura actual |
| | `LEFT` | Calibrar el ruido de fondo (3 s) |
| **Fingerprint** | `OK` | Guardar el hallazgo en el logbook |
| | `mantener OK` | Reiniciar la medición |
| **Site Survey** | `OK` | Ejecutar el barrido de nuevo |
| **Watch Mode** | `OK` | Re-armar (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 tránsito y de hotel. **No** puede
  ver lectores de **125 kHz (LF)** (paneles de puerta HID Prox / EM4100 más antiguos); la ruta 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 *hay un lector activo aquí,
  aproximadamente a qué distancia, y con qué ritmo sondea* — no decodifica, identifica ni captura nada
  de lo que hace el lector.
- **La intensidad es relativa, no calibrada.** `FIELD %` y las palabras de proximidad son una guía comparativa de "más cerca /
  más lejos" para barrer, 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 [Reading the meter](#-reading-the-meter--fixed-in-23));
  un lector que sondea de forma inusualmente dispersa se leerá más bajo a la misma distancia, y uno en modo
  de onda continua se fijará desde más lejos.
- **El medidor llega a su tope.** `MAX` significa que la portadora está tan alta como este lector la mantiene — más allá de
  ese punto, acercarse genuinamente no puede producir un número mayor. Usa el retención de pico `PK` para comparar
  posiciones en su lugar.
- **El ritmo se resuelve a ~2 ms.** Ese es el período de muestreo. Los tiempos cercanos a él se muestran con
  una **`~`** y la confianza se descuenta en consecuencia — Specter prefiere marcar su propio límite de resolución
  antes que citar un número de aspecto preciso que no puede respaldar.
- **`CLEAN` significa limpio a la sensibilidad que elegiste.** Un skimmer inactivo que solo se despierta con un toque real,
  o uno que está blindado, permanece invisible en *cualquier* umbral. La ausencia de una lectura no es una garantía de
  ausencia.
- **Una radio a la vez.** Specter toma el control del chip NFC mientras barre, así que cierra cualquier otra app NFC primero
  (dirá *NFC unavailable* si algo más tiene la radio).

---

## ⚖️ Legal y ético

Specter es una herramienta **defensiva, solo de escucha** — **nunca transmite**, nunca alimenta un campo, nunca toca
el lector. Úsalo para barrer **tu propia** zona de TPV, puerta, escritorio o pertenencias, o hardware que estés **explícitamente
autorizado** a evaluar. Eres responsable de cómo lo usas. Conoce tus leyes locales.

---

## 🗺️ Hoja de ruta

- [x] Conservar sensibilidad / sonido / vibración / LED entre reinicios
- [x] "Logbook" de detecciones con marcas de tiempo en la tarjeta SD
- [x] Barrido en segundo plano con la pantalla apagada — *modo sigiloso*
- [x] Umbral ajustable para un control de alcance más fino — *auto-calibración + sensibilidad personalizada*
- [x] Huella de un emisor por su ritmo de sondeo
- [x] Inspección de sitio cronometrada con veredicto de sala
- [x] Exportar el logbook como CSV para informes — *escrito en vivo junto al .txt*
- [x] Modo de vigilancia desatendida de larga duración con alarma de activación por detección
- [x] Hacer que el medidor use todo su rango contra lectores de sondeo reales
- [x] Flecha de tendencia más cerca / más lejos mientras cazas
- [ ] Investigar un sensor de lector basado en bobina LF (125 kHz) como modo separado
- [ ] Filtrado del logbook en el dispositivo por tipo

---

## 🗂️ 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
│   ├── 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

🎨 Marca

Todo el arte se genera, por lo que nunca se desvía de la aplicación:

RecursoTamañoDónde va
images/banner.png2560×800Cabecera del README (2× para que se mantenga nítido en retina)
images/social-preview.png1280×640Configuración → Vista previa social — el tamaño recomendado por GitHub (mín. 640×320, límite de 1 MB)
images/mark.png512×512Marca de logotipo cuadrada: avatares, favicons, diapositivas
images/demo.gif768×384La animación anterior, ~9 s, creada a partir de las constantes reales de la 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
> La vista previa social es el único recurso que GitHub no puede extraer del repositorio: debe
> subirse una vez manualmente en **Settings → Social preview**. Es lo que se muestra
> cuando el repositorio se comparte en Slack, X, LinkedIn o Discord.

---

## 🙏 Créditos

- Creado por **[at0m-b0mb](https://github.com/at0m-b0mb)**.
- Parte de una familia de herramientas de seguridad para Flipper: **[Argus](https://github.com/at0m-b0mb/Argus-FlipperZero)** (watchdog de deauth Wi-Fi / evil-twin), **[GhostTag](https://github.com/at0m-b0mb/GhostTag-FlipperZero)** (cazador anti-acecho BLE) y **[Cerberus](https://github.com/at0m-b0mb/flipper-cerberus)** (watchdog de RF Sub-GHz).
- Impulsado por el firmware del [Flipper Zero](https://github.com/flipperdevices/flipperzero-firmware) NFC HAL (`furi_hal_nfc` detección de campo) + [ufbt](https://github.com/flipperdevices/flipperzero-ufbt).

## 📄 Licencia

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

Categorías