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

Specter-FlipperZero v2.3

👻 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 anti-grampo de leitores NFC e skimmers para Flipper Zero

Specter 👻

Varra os leitores que você não pode ver.

Flipper Zero Version 2.3 Onboard NFC No extra hardware ufbt MIT

O Specter transforma seu Flipper Zero em uma varredura antiespionagem de bolso para leitores NFC ativos de 13,56 MHz. Ele escuta passivamente o campo de RF que um leitor ligado está emitindo constantemente — um skimmer de cartão escondido em um terminal de pagamento, um leitor encoberto atrás de um painel de porta, um logger malicioso preso com fita embaixo de uma mesa — e então diz onde está, que tipo de coisa é, se o ambiente está limpo e — deixado de guarda — o momento em que um aparecer enquanto você estiver fora. 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


✨ O que ele faz

O Specter responde a quatro perguntas diferentes — onde está, o que é, o ambiente está limpo e apareceu algum enquanto eu estava fora — e cada uma tem sua própria tela.

🔍 Sweep — onde está?

Sweep — leitor ativo encontrado

A peça central: um medidor EMF estilo analógico. A agulha acompanha o FIELD % em tempo real, um marcador de pico retido registra o ponto mais forte, e o topo do mostrador é uma zona quente. Uma forma de onda ao vivo traça o piso de ruído enquanto está quieto.

No instante em que a portadora de um leitor é sentida, a tela se emoldura com uma borda de alarme, um anel pulsante gira ao redor do mostrador, e a faixa muda para ● ACTIVE READER com uma leitura de proximidade (FAINT → NEAR → CLOSE → STRONG). Os opcionais cliques Geiger aceleram conforme o campo fica mais forte, então você pode varrer uma superfície com o Flipper no bolso e ouvir que está chegando mais perto.

OK redefine pico/contatos · segurar OK registra a leitura · LEFT calibra para o ambiente em que você está.


🔬 Fingerprint — o que é?  NOVO na 2.0

Fingerprint — leitor com polling identificado

Encontrou algo? Fique imóvel sobre ele. O Specter para de perseguir proximidade e começa a cronometrar as bordas de liga/desliga da portadora, e então diz que tipo de emissor você está vendo:

ClasseO que significa
CONTINUOUSPortadora mantida permanentemente ativa
POLLINGCiclo de polling fixo — o período é exibido em ms
INTERMITTENTEm rajadas, porém irregular

Você recebe o período de polling, a largura da rajada, o jitter, o duty-cycle e uma barra de confiança — além de um trem de pulsos de analisador lógico da portadora bruta na parte inferior, para que o veredito nunca precise ser aceito por si só. O loop de polling de um leitor é sincronizado por cristal, então um polling genuíno aparece como uma onda quadrada inconfundível.

OK salva a descoberta no logbook · segurar OK reinicia a medição.


🗺️ Site Survey — este ambiente está limpo?  NOVO na 2.0

Site Survey — veredito

Uma varredura cronometrada de todo um espaço. Inicie, ande pelo ambiente e receba um veredito no final, em vez de ter que observar um ponteiro o tempo todo:

  • CLEAN — nada cruzou o piso de ruído
  • TRACE — toques breves ou fracos, valem uma segunda passada
  • ACTIVE READER — algo esteve ativo e emitindo de verdade

…com campo máximo/médio, contagem de contatos e por quanto tempo da pesquisa uma portadora esteve realmente ativa. Dura 30 s, 60 s ou 2 min, e registra o resultado automaticamente.


🛰️ Watch Mode — avise se algum aparecer  NOVO na 2.1

Watch Mode — leitor presente

Enquanto o Sweep é você caçando e o Survey é um veredito limitado, o Watch fica de guarda indefinidamente. Arme-o, deixe o Flipper apoiado e vá embora. Ele mantém um relógio em execução e uma contagem de detecções, lembra quando foi o último contato e — o objetivo principal — acende a tela e toca um alarme no instante em que um leitor aparece. Cada novo contato é registrado automaticamente com sua data/hora.

Ele ignora o modo furtivo deliberadamente: um guarda silencioso e escuro que nunca diz que viu algo seria pior do que inútil. OK o rearma (limpa a contagem e o relógio).


📖 Logbook + CSV ao vivo  CSV NOVO na 2.1

Cada descoberta é gravada duas vezes, a partir de uma única ação — legível no dispositivo e já em formato de planilha, sem nenhuma 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 …

Ambos ficam em apps_data/specter/ no cartão SD. Nada sai do dispositivo.

🎯 Auto-calibração  NOVO na 2.0

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

🕶️ Modo furtivo  NOVO na 2.0

Mantém a tela e o LED apagados durante toda a varredura, para o Flipper não brilhar enquanto é você quem está procurando. Som e vibração continuam funcionando — o objetivo não é desativar o feedback que guia sua varredura. Sair de uma tela furtiva reacende o display, então BACK sempre cai em um menu aceso (corrigido na 2.2 — antes deixava a tela escura, o que fazia BACK parecer morto).

📏 Lendo o medidor  CORRIGIDO na 2.3

Por que um leitor que você está tocando 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á realmente ativa. Mas leitores fazem polling — uma rajada curta, um sono, outra rajada. Um terminal ou leitor de acesso típico só está irradiando 20–35% do tempo, então o duty-cycle bruto satura em torno de 30%, não importa o quão perto você chegue.

O Specter costumava imprimir esse número bruto no medidor, o que fazia uma detecção perfeita parecer um terço de uma — e deixava CLOSE/STRONG e o teste de pico da pesquisa permanentemente fora de alcance. O medidor agora é escalado em relação a essa faixa real de polling:

Duty bruto da portadoraMedidorProximidade
3% (ruído do ambiente)9%FAINT
12%34%NEAR
20%57%CLOSE
31% (em cima de um leitor)89%STRONG
≥35% / onda contínua100%MAX

MAX significa no limite máximo — você está tão perto quanto esta medição consegue resolver, e aproximar-se mais não vai mudar. Isso é informado em vez de escondido, para que um ponteiro travado nunca pareça quebrado.

O duty bruto nunca é perdido: o piso de ruído, a auto-calibração e o DUTY da tela Fingerprint continuam funcionando em duty-cycle verdadeiro, porque descrevem o sinal, não a sua distância dele. Prefere o número literal? Settings → Meter → Raw.

💾 Tudo persiste  NOVO na 2.0

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


🧠 Como funciona

Todo leitor NFC ligado envia continuamente uma portadora de 13,56 MHz pelo ar, esperando um cartão acordar. Você não consegue ver, mas o chip NFC do Flipper consegue: o ST25R3916 tem um detector de hardware de campo externo (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 o bit "campo presente?" cerca de 500 vezes por segundo — sem nunca ligar a própria portadora.

Esse único bit, amostrado rápido o suficiente, carrega dois sinais independentes:

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

Quanto → força. Em uma janela curta, o Specter mede qual fração do tempo uma portadora está presente e a suaviza no FIELD %. Um leitor bem em cima do Flipper leva o medidor ao máximo; um mais fraco ou distante o move levemente. Isso dirige 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 é dirigido 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 — "isto é um leitor com polling", "este ambiente está limpo", "é isto que o ponteiro deveria ler" — são C puro, sem dependências de hardware, e são fixados por testes de host em vez de descobertos no dispositivo:

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

🚀 Instalação

Sem devboard, sem firmware para gravar — é um único .fap.

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

  1. Pegue o specter.fap na página de Releases.
  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

# 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 fica em dist/specter.fap; ufbt launch o copia para apps/NFC/ e o abre para você.

Ícones em icons/, capturas de tela e o banner em images/ são gerados — regenere com python3 tools_gen_icons.py, python3 tools_gen_mockups.py e python3 tools_gen_banner.py (precisa de pillow).


🎮 Como usar

Uma varredura, do início ao fim:

  1. Inicie o Specter. Na tela Sweep, pressione LEFT e fique parado por 3 segundos para calibrar o piso de ruído do ambiente.
  2. Segure o Flipper plano 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.
    • Onda silenciosa / plana → nenhum leitor ativo no alcance.
    • Ponteiro subindo, cliques acelerando → você está se aproximando de um emissor. Continue em direção ao pico.
    • ● ACTIVE READER + borda de alarme → um leitor ativo está bem aqui.
  3. Encontrou algo? Volte e abra o Fingerprint. Segure o Flipper imóvel contra ele e deixe a cadência estabilizar — alguns segundos geralmente bastam. Pressione OK para salvar a descoberta.
  4. Preferindo varrer um ambiente inteiro? Abra o Site Survey, percorra o espaço até a barra encher e leia o veredito.
  5. Vai sair da área? Deixe o Flipper no Watch Mode e ele ficará de guarda, acordando e alarmando se um leitor aparecer enquanto você estiver fora.
  6. Confira o Logbook para tudo o que você salvou, com data/hora — ou extraia o logbook.csv do cartão para uma planilha.

💡 Varra primeiro um leitor que você sabe que é bom (seu próprio celular usando NFC, ou um terminal contactless em que confia) para ver como um campo forte e legítimo aparece no medidor — e como a fingerprint dele é lida. Depois vá caçar.

Controles

TelaTeclaAção
SweepOKRedefinir pico / contatos
segurar OKRegistrar a leitura atual
LEFTCalibrar o piso de ruído (3 s)
FingerprintOKSalvar a descoberta no logbook
segurar OKReiniciar a medição
Site SurveyOKExecutar a pesquisa novamente
Watch ModeOKRe-armar (limpar contagem e relógio)
em qualquer lugarBACKSubir um nível

🔬 Limitações honestas

  • Apenas 13,56 MHz (HF). O Specter detecta a faixa NFC — a usada por skimmers de pagamento contactless, pela maioria dos leitores de acesso modernos, leitores de transporte e de hotel. Ele não consegue ver leitores de 125 kHz (LF) (painéis de porta HID Prox / EM4100 antigos); o caminho LF do Flipper não tem um bit equivalente de detecção de campo.
  • Ele sente a portadora de um leitor, não o que ele lê. O Specter diz um leitor ativo está aqui, aproximadamente a que distância e com qual ritmo ele faz polling — ele não decodifica, identifica nem captura nada do que o leitor faz.
  • A força é relativa, não calibrada. FIELD % e as palavras de proximidade são um guia comparativo de "mais perto / mais longe" para varredura, não uma distância medida em cm. É uma leitura escalada do duty-cycle da portadora em relação a uma faixa típica de polling (veja Lendo o medidor); um leitor que faz polling de forma incomumente esparsa marcará menos na mesma distância, e um em modo de onda contínua atingirá o máximo de mais longe.
  • O medidor tem um teto. MAX significa que a portadora está ativa tanto quanto este leitor consegue mantê-la ativa — além desse ponto, aproximar-se genuinamente não produz um número maior. Use o peak-hold PK para comparar posições.
  • A cadência resolve até ~2 ms. Esse é o período de amostragem. Tempos próximos disso são exibidos com um ~ e a confiança é descontada de acordo — o Specter prefere sinalizar seu próprio piso de resolução a citar um número de aparência precisa pelo qual não pode responder.
  • CLEAN significa limpo na sensibilidade que você escolheu. Um skimmer adormecido que só acorda com um toque real, ou um que esteja blindado, permanece invisível em qualquer limite. A ausência de leitura não é garantia de ausência.
  • Um rádio por vez. O Specter assume o chip NFC durante a varredura, então feche qualquer outro app NFC antes (ele dirá NFC unavailable se outra coisa estiver com o rádio).

O Specter é uma ferramenta defensiva, somente de escuta — ele nunca transmite, nunca alimenta um campo, nunca toca o leitor. Use-o para varrer sua própria área POS, porta, mesa ou pertences, ou hardware que você está explicitamente autorizado a avaliar. Você é responsável por como o usa. Conheça as leis locais.


🗺️ Roadmap

  • Persistir sensibilidade / som / vibração / LED entre reinicializações
  • "Logbook" de detecções com data/hora no cartão SD
  • Varredura em segundo plano com a tela desligada — modo furtivo
  • Limiar ajustável para controle de alcance mais fino — auto-calibração + sensibilidade Custom
  • Identificar um emissor pela cadência de polling
  • Pesquisa de site cronometrada com veredito do ambiente
  • Exportar o logbook como CSV para relatórios — gravado ao vivo junto com o .txt
  • Modo de vigília de longa duração sem supervisão com alarme ao detectar
  • Fazer o medidor usar toda a faixa com leitores reais de polling
  • Investigar um sensor de leitor LF (125 kHz) baseado em bobina como um modo separado
  • Filtragem do logbook por tipo no dispositivo

🗂️ 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
│   ├── 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 Wi-Fi deauth / evil-twin), GhostTag (caçador anti-stalking BLE) e Cerberus (watchdog de RF Sub-GHz).
  • Alimentado pelo HAL NFC do firmware do Flipper Zero (detecção de campo furi_hal_nfc) + ufbt.

📄 Licença

MIT © 2026 at0m-b0mb

Categorias