Voltar às atualizações
New releaseAug 20, 2026

Specter-FlipperZero v2.7

👻 Specter — varredura passiva de leitores/skimmers NFC de 13.56 MHz para Flipper Zero. Medidor de EMF de contra-vigilância usando o chip NFC integrado. Sem hardware extra.

Compartilhar

Specter — varredura de bugs para leitores NFC e skimmers no Flipper Zero

Specter 👻

Varra à procura dos leitores que você não consegue ver.

Flipper Zero Versão 2.7 NFC integrado Sem hardware extra ufbt MIT

O Specter transforma o seu Flipper Zero em uma varredura de contra-vigilância de bolso para leitores NFC ativos de 13,56 MHz. Ele escuta passivamente o campo de RF que um leitor ligado emite constantemente — um skimmer de cartão escondido em um terminal de pagamento, um leitor oculto atrás de um painel de porta, um logger malicioso preso embaixo de uma mesa — e então informa onde ele está, que tipo de coisa é, se o ambiente está limpo e — se deixado de vigia — o momento em que um aparece enquanto você está ausente. Ele nunca transmite.

Os leitores são invisíveis. O Specter os torna visíveis.


📟 No Flipper

Telas do Specter

Sweep (silencioso)  ·  Sweep (leitor travado)  ·  Fingerprint  ·  Survey (em execução)  ·  Survey (veredito)
Watch (limpo)  ·  Watch (leitor!)  ·  Logbook  ·  Calibrate  ·  Settings


✨ Os cinco modos

O Specter são cinco ferramentas em torno de um único sensor. Cada uma responde a uma pergunta diferente, então a certa depende do que você realmente está tentando descobrir:

ModoA pergunta que ele respondeUse quando
🔍 SweepOnde está?Você suspeita de um dispositivo e quer localizá-lo movendo-se pelo ambiente
🔬 FingerprintQue tipo de coisa é?Você encontrou um emissor e quer saber como ele se comporta
🗺️ Site SurveyEste ambiente está limpo?Você quer um único veredito para um espaço inteiro, sem usar as mãos
🛰️ Watch ModeAlgum apareceu enquanto eu estava ausente?Você vai deixar o Flipper em algum lugar para ficar de guarda
📖 LogbookO que encontrei e quando?Você está registrando os resultados, ou comparando hoje com a semana passada

🔍 Sweep — onde está?

Sweep — leitor encontrado, medidor no máximo

O que faz. Um medidor ao vivo no estilo EMF. Segure o Flipper na horizontal e mova-o lentamente sobre o que você está verificando — um terminal de cartão, um leitor de porta, a parte inferior de um caixa eletrônico, um pacote, uma mesa. A agulha acompanha a intensidade do campo em tempo real.

O que você vê.

  • O mostrador — agulha = leitura ao vivo, o pontinho = peak-hold (o ponto mais forte que você tocou, para comparar posições).
  • FIELD % — a mesma leitura como número, com uma seta de tendência ▲ / ▼ indicando se o último meio segundo ficou mais quente ou mais frio. Quando você está caçando, essa seta importa mais do que o número.
  • PK / C — leitura de pico e quantos contatos separados você teve.
  • Faixa inferior — a forma de onda ao vivo e sua sensibilidade atual enquanto está silencioso; ela muda para uma barra de alarme preta ● ACTIVE READER com uma palavra de proximidade no momento em que uma portadora é detectada.
  • ProximidadeFAINT → NEAR → CLOSE → STRONG → MAX. MAX significa que o medidor está no máximo: você está tão perto quanto esta medição consegue resolver.

Som. Cliques geiger opcionais que aceleram conforme você se aproxima, para que você possa fazer a varredura com o Flipper no bolso e caçar apenas pelo ouvido.

TeclaAção
OKRedefinir peak-hold e contagem de contatos
segurar OKSalvar esta leitura no logbook
LEFTCalibrar para o ruído de fundo do ambiente (3 s)

🔬 Fingerprint — que tipo de coisa é?

Fingerprint — leitor em polling identificado

O que faz. Depois que o Sweep encontrar algo, segure o Flipper parado contra ele. O Fingerprint para de medir proximidade e começa a cronometrar as bordas de liga/desliga da portadora, que é o que realmente distingue um tipo de emissor de outro.

O que você vê. Um veredito, uma barra de confiança e as evidências por trás de ambos:

ClasseO que significa na prática
CONTINUOUSA portadora é mantida permanentemente ativa
POLLINGUm ciclo de polling fixo, cronometrado por cristal — o período é mostrado em ms
INTERMITTENTEm rajadas, mas irregular — geralmente um telefone ou um leitor em uso

Abaixo estão PER (período de polling), BST (largura da rajada), JIT (jitter) e DUTY (ciclo de trabalho real), além de um trem de pulsos de analisador lógico da portadora bruta — então o veredito nunca é algo que você precisa aceitar por fé. Um leitor genuíno em polling aparece como uma onda quadrada inconfundível.

Um ~ antes de um tempo significa que está próximo do piso de amostragem de 2 ms, e a confiança é descontada para corresponder.

TeclaAção
OKSalvar a descoberta no logbook
segurar OKReiniciar a medição

🗺️ Site Survey — este ambiente está limpo?

Site Survey — veredito

O que faz. Uma varredura cronometrada de um espaço inteiro. Inicie-a, caminhe pelo ambiente normalmente e obtenha um único veredito no final — sem ficar observando a agulha.

O que você vê. Uma contagem regressiva e uma barra de progresso enquanto executa, depois um cartão de veredito:

  • CLEAN — nada cruzou o ruído de fundo
  • TRACE — toques breves ou fracos; vale uma segunda passada mais lenta
  • ACTIVE READER — algo estava genuinamente ativo e emitindo

…com campo MAX / AVG, contagem de contatos e FIELD %quanto da varredura uma portadora esteve realmente ativa, que geralmente é o número mais revelador dos quatro. Executa por 30 s, 60 s ou 2 min, e registra o resultado automaticamente.

TeclaAção
OKExecutar a varredura novamente

🛰️ Watch Mode — algum apareceu enquanto eu estava ausente?

Watch Mode — leitor presente

O que faz. Fica de guarda indefinidamente. Arme-o, coloque o Flipper em algum lugar, afaste-se. Enquanto o Sweep é você caçando e o Survey é um teste de duração fixa, o Watch apenas espera — por minutos ou horas.

O que você vê. Um relógio de tempo decorrido grande e ALL CLEAR enquanto não há nada lá. No instante em que um leitor aparece, a faixa inverte para READER PRESENT, a tela acende e o alarme soa. A faixa é estável em vez de piscar — um pequeno marcador pulsa, para que seja lida como ao vivo sem estroboscopiar para você. Depois que passa, a tela mantém a evidência: HITS (quantos contatos separados), PEAK, LAST (há quanto tempo o mais recente foi) e SEEN (tempo total em que uma portadora esteve realmente ativa).

O Watch ignora deliberadamente o modo stealth — um guarda escuro e silencioso que nunca informa que viu algo seria pior do que inútil.

TeclaAção
OKRe-armar — limpa o relógio e os contadores

📖 Logbook — o que encontrei e quando?

As descobertas são salvas duas vezes, com uma única ação, para que sejam legíveis no dispositivo e já sejam uma planilha — sem etapa de exportação para lembrar:

logbook.txt — agrupado, para o visualizador no dispositivologbook.csv — uma linha 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 … ```

As entradas são marcadas como SWEEP, READER, SURVEY ou WATCH e carimbadas com o relógio do Flipper. Ambos os arquivos ficam em apps_data/specter/ no cartão SD. Nada sai jamais do dispositivo. Limpe-os em Configurações → Limpar registro (com confirmação primeiro — é a única coisa irreversível que o app pode fazer).


⚙️ As partes de apoio

🎯 Calibração automática

Pressione ESQUERDA na tela de Sweep e o Specter escuta o piso de ruído ambiente por 3 segundos, então define o limiar de detecção logo acima do que mediu — salvo como sua sensibilidade Personalizada. Cada ambiente tem um piso de RF diferente; isso ajusta ao que você está, em vez de um número fixado na compilação. Fique em algum lugar silencioso ao executar.

🕶️ Modo furtivo

Mantém a tela e o LED apagados durante todo o sweep, para o Flipper não brilhar enquanto você é quem está olhando. Som e vibração continuam funcionando — o objetivo não é desativar o feedback que você está varrendo. Sair de uma tela furtiva reacende o display, então BACK sempre leva você a um menu iluminado.

📏 Lendo o medidor

Por que um leitor que você toca não emite 100% do tempo. O detector mede uma coisa física: a fração do tempo em que uma portadora de 13,56 MHz está ativa. Mas leitores fazem polling — uma rajada curta, um sono, outra rajada. Um terminal típico só está irradiando 20–35% do tempo, então o ciclo de trabalho bruto satura em torno de 30%, não importa o quão perto você chegue.

Mostrar esse número bruto no medidor fazia uma detecção perfeita parecer um terço de uma. O medidor é escalado contra essa faixa real de polling:

Ciclo de trabalho bruto da portadoraMedidorProximidade
3% (ruído do ambiente)10%FAINT
12%40%NEAR
20%67%CLOSE
28%93%STRONG
≥30% (apoiado em um leitor)100%MAX

O ciclo de trabalho bruto nunca é perdido: o piso de ruído, a calibração automática e o DUTY da tela de Fingerprint ainda funcionam em ciclo de trabalho real, porque esses descrevem o sinal, não sua distância dele. Quer o número literal? Configurações → Medidor → Bruto.

💾 Tudo persiste

Sensibilidade, duração do survey, som, vibração, LED, furtividade, registro e modo do medidor são salvos no cartão SD no momento em que você os altera. Um kit de sweep que esquece sua configuração é pior do que nenhuma persistência.


🧠 Como funciona

Todo leitor NFC ligado emite continuamente uma portadora de 13,56 MHz no ar, esperando um cartão acordar. Você não pode vê-lo, mas o chip NFC do Flipper pode: o ST25R3916 tem um detector de campo externo por hardware (o mesmo circuito que permite ao Flipper emular um cartão e saber quando um leitor está falando com ele). O Specter coloca o chip em modo somente detecção e amostra esse bit "campo presente?" cerca de 500 vezes por segundo — sem nunca ligar sua própria portadora.

Esse único bit, amostrado rápido o suficiente, carrega dois sinais independentes:```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 → intensidade.** Em uma janela curta, o Specter mede *qual fração do tempo* uma portadora está
presente e a suaviza no **FIELD %**. Um leitor posicionado diretamente sobre o Flipper trava o medidor;
um mais fraco ou mais distante o move levemente. Isso conduz o ponteiro, a palavra de proximidade e a taxa de cliques.

**Qual ritmo → identidade.** Separadamente, cada transição desse bit é cronometrada. Um leitor que acorda por
20 ms a cada 200 ms produz um padrão de rajada/pausa com quase nenhum jitter, porque seu loop de polling é
conduzido por uma máquina de estados sincronizada por cristal. Movimento da mão e ruído de RF não são tão estáveis. Essa
diferença é o que separa **POLLING** de **INTERMITTENT**.

### As camadas de decisão são testadas em um computador real

Os pontos onde o Specter transforma números em uma *afirmação* — "este é um leitor de polling", "esta sala está
limpa", "é isso que o ponteiro deve indicar" — são C puro, sem dependências de hardware, e são
fixados por testes de host em vez de descobertos no dispositivo:```bash
make -C test     # 300 checks: classifier, verdict, meter scaling, presence

🚀 Instalação

Sem placa de desenvolvimento, sem firmware para gravar — é um único .fap.

Opção A — .fap pré-compilado (mais fácil)

  1. Pegue o .fap correto na página de Releases:

    Seu firmwareArquivo
    Oficial / padrãospecter.fap
    Unleashed, RogueMaster, Momentum ou qualquer coisa mais recentespecter-fw-dev.fap

    Se o Flipper disser APP:87 < FW:88 — This app might not work, você pegou o errado — use o outro arquivo. A versão da API do app é fixada na compilação, então um único build não pode atender às duas linhas de firmware. Normalmente ainda funciona se você pressionar Continue, mas o build correspondente não vai perguntar.

  2. Abra o qFlipper, arraste o arquivo para SD Card / apps / NFC /.

  3. No Flipper: Apps → NFC → Specter.

Opção B — compile você mesmo com 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

O `.fap` vai parar em `dist/specter.fap`; o `ufbt launch` copia-o para `apps/NFC/` e inicia-o por ti.

> Os ícones em `icons/`, capturas de ecrã e o banner em `images/` são gerados — regenera-os com
> `python3 tools_gen_icons.py`, `python3 tools_gen_mockups.py` e `python3 tools_gen_banner.py` (precisa de `pillow`).

---

## 🎮 Como usar

**Uma varredura, de ponta a ponta:**

1. Inicia o **Specter**. No ecrã **Sweep**, prime **LEFT** e mantém premido durante 3 segundos para
   calibrar o ruído de fundo da sala.
2. Mantém o Flipper plano e move-o **lentamente** sobre o que estás a verificar — um terminal de cartão, um
   leitor de porta, a parte inferior de um ATM, uma encomenda, uma secretária.
   - **Onda silenciosa / plana** → sem leitor ativo ao alcance.
   - **Agulha a subir, cliques a acelerar** → estás a aproximar-te de um emissor. Continua em direção ao pico.
   - **`● ACTIVE READER` + borda de alarme** → há um leitor ativo mesmo aqui.
3. Encontraste algo? Sai e abre o **Fingerprint**. Mantém o Flipper imóvel contra ele e deixa o
   ritmo estabilizar — alguns segundos costumam bastar. Prime **OK** para guardar a descoberta.
4. Preferes limpar uma sala inteira? Abre o **Site Survey**, percorre o espaço até a barra encher e lê
   o veredito.
5. Vais sair da área? Deixa o Flipper em **Watch Mode** e ele ficará de guarda, acordando e dando
   sinal se um leitor aparecer enquanto estás fora.
6. Consulta o **Logbook** para tudo o que guardaste, com carimbo de tempo — ou tira o `logbook.csv` do cartão
   para uma folha de cálculo.

> 💡 Faz primeiro uma varredura a um leitor que sabes ser bom (o teu próprio telemóvel em NFC, ou um terminal
> contactless em que confies) para ver como é um campo forte e legítimo no medidor — e como o respetivo
> fingerprint se lê. Depois, vai à caça.

### Controlos

| Ecrã | Tecla | Ação |
|---|---|---|
| **Sweep** | `OK` | Repor pico / contactos |
| | `manter OK` | Registar a leitura atual |
| | `LEFT` | Calibrar o ruído de fundo (3 s) |
| **Fingerprint** | `OK` | Guardar a descoberta no logbook |
| | `manter OK` | Recomeçar a medição |
| **Site Survey** | `OK` | Executar a varredura novamente |
| **Watch Mode** | `OK` | Re-armar (limpar contagem e relógio) |
| *em qualquer lado* | `BACK` | Subir um nível |

---

## 🔬 Limitações honestas

- **Apenas 13.56 MHz (HF).** O Specter deteta a **banda NFC** — a usada por skimmers de pagamento contactless,
  pela maioria dos leitores de acesso modernos, e por leitores de transportes e hotéis. **Não** consegue ver
  leitores **125 kHz (LF)** (painéis de porta HID Prox / EM4100 mais antigos); o caminho LF do Flipper não tem
  bit equivalente de deteção de campo.
- **Deteta a *portadora* de um leitor, não o que ele lê.** O Specter diz-te *há um leitor ativo aqui,
  aproximadamente a que distância, e com que ritmo faz polling* — não descodifica, identifica nem captura nada
  do que o leitor faz.
- **A intensidade é relativa, não calibrada.** `FIELD %` e as palavras de proximidade são um guia comparativo
  de "mais quente / mais frio" para varrer, não uma distância medida em cm. É uma leitura *escalada* do
  duty-cycle da portadora contra uma banda típica de polling (ver [Reading the meter](#-reading-the-meter--fixed-in-23));
  um leitor que faça polling de forma invulgarmente esparsa lerá mais baixo à mesma distância, e um em modo
  de onda contínua saturará a partir de mais longe.
- **O medidor satura.** `MAX` significa que a portadora está tão alta quanto este leitor alguma vez a mantém —
  para além desse ponto, aproximar-te genuinamente não consegue produzir um número maior. Usa o peak-hold `PK`
  para comparar posições.
- **O ritmo resolve até ~2 ms.** Esse é o período de amostragem. Tempos perto disso são mostrados com um
  **`~`** e a confiança é descontada em conformidade — o Specter prefere assinalar o seu próprio limite de
  resolução do que citar um número de aparência precisa que não consegue sustentar.
- **`CLEAN` significa limpo na sensibilidade que escolheste.** Um skimmer adormecido que só acorda com um toque
  real, ou um que esteja blindado, permanece invisível em *qualquer* limiar. A ausência de leitura não é
  garantia de ausência.
- **Uma rádio de cada vez.** O Specter assume o controlo do chip NFC durante a varredura, por isso fecha
  primeiro qualquer outra app NFC (dirá *NFC unavailable* se outra coisa estiver com a rádio).

---

## ⚖️ Legal e ético

O Specter é uma ferramenta **defensiva, apenas de escuta** — **nunca transmite**, nunca alimenta um campo, nunca
toca no leitor. Usa-o para varrer a **tua** área de POS, porta, secretária ou pertences, ou hardware que te foi
**explicitamente autorizado** avaliar. És responsável pela forma como o usas. Conhece as tuas leis locais.

---

## 🗺️ Roadmap

- [x] Persistir sensibilidade / som / vibração / LED entre reinícios
- [x] "Logbook" de deteções com carimbos de tempo para o cartão SD
- [x] Varredura em segundo plano com o ecrã desligado — *modo furtivo*
- [x] Limiar ajustável para controlo de alcance mais fino — *auto-calibração + sensibilidade personalizada*
- [x] Fingerprint de um emissor pelo seu ritmo de polling
- [x] Site survey cronometrado com veredito de sala
- [x] Exportar o logbook como CSV para relatórios — *escrito em tempo real juntamente com o .txt*
- [x] Modo de vigilância de longa duração sem supervisão com alarme de wake-on-detection
- [x] Fazer o medidor usar toda a sua gama contra leitores reais de polling
- [x] Seta de tendência mais quente/mais frio durante a caça
- [ ] Investigar deteção de leitor baseado em bobina LF (125 kHz) como modo separado
- [ ] Filtragem do logbook no dispositivo por tipo

---

## 🗂️ Estrutura do projeto```
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

🙏 Créditos

  • Criado por at0m-b0mb.
  • Parte de uma família de ferramentas de segurança para Flipper: Argus (watchdog de deauth Wi-Fi / evil-twin), GhostTag (caçador anti-stalking BLE) e Cerberus (watchdog RF Sub-GHz).
  • Alimentado pelo firmware do Flipper Zero HAL NFC (furi_hal_nfc detecção de campo) + ufbt.

📄 Licença

MIT © 2026 at0m-b0mb

Categorias