Voltar às atualizações
New releaseSep 17, 2026

Specter-FlipperZero v2.9

👻 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 — leitor NFC e varredura de bugs para skimmers para Flipper Zero

Specter 👻

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

Latest release Downloads Stars Build

Flipper Zero Onboard NFC No extra hardware Listen-only MIT

O Specter transforma 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 está constantemente emitindo — um skimmer de cartão escondido em um terminal de pagamento, um leitor clandestino atrás de um painel de porta, um registrador não autorizado colado sob uma mesa — e então informa onde ele está, que tipo de coisa é, se o ambiente está limpo e — deixado em vigilância — o momento em que um aparece enquanto você está fora. Ele nunca transmite.

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

Destacado em
Help Net Security  ·  Cyber Security News


📟 No Flipper

Specter em uso: varrendo um ambiente silencioso, aproximando-se de um leitor, travando em MAX, identificando sua cadência de polling e, em seguida, um veredito de levantamento do local

Uma varredura, do início ao fim: ambiente silencioso → aproximando-se → travado → o que é → o veredito do ambiente.

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 é cinco ferramentas em torno de um sensor. Cada uma responde a uma pergunta diferente, então a correta depende do que você realmente está tentando descobrir:

ModoA pergunta que ele respondeUse quando
🔍 SweepOnde ele está?Você suspeita de um dispositivo e quer localizá-lo movendo-se ao redor
🔬 FingerprintQue tipo de coisa é?Você encontrou um emissor e quer saber como ele se comporta
🗺️ Site SurveyEste ambiente está limpo?Você quer um veredito para um espaço inteiro, sem usar as mãos
🛰️ Watch ModeApareceu algum enquanto eu estava fora?Você vai deixar o Flipper em algum lugar para montar guarda
📖 LogbookO que eu encontrei, e quando?Você está documentando, ou comparando hoje com a semana passada — filtre por tipo de achado

🔍 Sweep — onde ele 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 objeto que está verificando — um terminal de cartão, um leitor de porta, a parte inferior de uma fenda de caixa eletrônico, um pacote, uma mesa. O ponteiro acompanha a força do campo em tempo real.

O que você vê.

  • O mostrador — o ponteiro = leitura ao vivo, o pequeno ponto = retenção de pico (o ponto mais forte que você tocou, para que possa comparar posições).
  • FIELD % — a mesma leitura como número, com uma seta de tendência ▲ / ▼ informando se o último meio segundo deixou as coisas mais quentes ou mais frias. 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 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á o mais próximo que esta medição consegue resolver.

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

TeclaAção
OKRedefine a retenção de pico e a contagem de contatos
hold OKSalva esta leitura no logbook
LEFTCalibra para o ruído de fundo do ambiente (3 s)

🔬 Fingerprint — que tipo de coisa é?

Fingerprint — leitor de polling identificado

O que faz. Depois que o Sweep encontrou algo, segure o Flipper parado contra ele. O Fingerprint para de medir proximidade e começa a cronometrar as bordas de ligar/desligar 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 — frequentemente 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 — para que o veredito nunca seja algo que você tenha que aceitar por fé. Um leitor de polling genuíno aparece como uma onda quadrada inconfundível.

Um ~ antes de uma medição de tempo significa que ela está próxima do piso de amostragem de 2 ms, e a confiança é descontada de acordo.

TeclaAção
OKSalva o achado no logbook
hold OKReinicia 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, percorra o ambiente normalmente e receba um único veredito no final — sem ficar observando o ponteiro.

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

  • CLEAN — nada cruzou o ruído de fundo
  • TRACE — acertos 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 do levantamento uma portadora esteve realmente ativa, que muitas vezes é o número mais revelador dos quatro. Roda por 30 s, 60 s ou 2 min, e registra o resultado automaticamente.

TeclaAção
OKExecuta o levantamento novamente

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

Watch Mode — leitor presente

O que faz. Monta guarda indefinidamente. Ative-o, coloque o Flipper no lugar, vá embora. 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 grande relógio de tempo decorrido e ALL CLEAR enquanto não há nada. No instante em que um leitor aparece, a faixa se inverte para READER PRESENT, a tela acorda e o alarme soa. A faixa é estável em vez de piscar — um pequeno marcador pulsa em vez disso, para que pareça ao vivo sem piscar na sua cara. Depois que passa, a tela mantém as evidências: HITS (quantos contatos separados), PEAK, LAST (há quanto tempo foi o mais recente) 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 avisa que viu algo seria pior que inútil.

TeclaAção
OKRearma — limpa o relógio e os contadores

📖 Logbook — o que eu encontrei, e quando?

Os achados são salvos duas vezes, a partir de 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 datadas pelo relógio do Flipper. Ambos os ficheiros residem em apps_data/specter/ no cartão SD. Nada sai alguma vez do dispositivo. Limpe-os em Settings → Clear logbook (confirmado primeiro — é a única coisa irreversível que a aplicação pode fazer).


⚙️ Os componentes de apoio

🎯 Auto-calibração

Prima LEFT no ecrã Sweep e o Specter escuta o ruído de fundo ambiente durante 3 segundos, depois define o limiar de deteção logo acima do que mediu — guardado como a sua sensibilidade Custom. Cada sala tem um piso de RF diferente; isto sintoniza-se ao da sala onde está, em vez de um número fixado em tempo de compilação. Fique num local sossegado quando o executar.

🕶️ Modo stealth

Mantém o ecrã e o LED apagados durante toda a varredura, para que o Flipper não brilhe enquanto é você quem está a observar. O som e a vibração continuam a funcionar — o objetivo não é desativar o feedback pelo qual está a fazer a varredura. Sair de um ecrã stealth volta a acender o ecrã, para que BACK o deixe sempre num menu iluminado.

📏 Ler o medidor

Porque é que um leitor que está a tocar não emite 100% do tempo. O detetor mede uma única coisa física: que fração do tempo uma portadora de 13,56 MHz está ativa. Mas os leitores fazem polling — uma rajada curta, uma pausa, outra rajada. Um terminal típico só está a irradiar 20–35% do tempo, pelo que o duty-cycle em bruto satura por volta dos 30% independentemente da proximidade.

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

Duty da portadora em brutoMedidorProximidade
3% (ruído da sala)10%FAINT
12%40%NEAR
20%67%CLOSE
28%93%STRONG
≥30% (em repouso sobre um leitor)100%MAX

O duty em bruto nunca se perde: o piso de ruído, a auto-calibração e o DUTY do ecrã Fingerprint continuam todos a funcionar em duty-cycle verdadeiro, porque esses descrevem o sinal, não a sua distância a ele. Quer o número literal? Settings → Meter → Raw.

💾 Tudo persiste

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


🧠 Como funciona

Todos os leitores NFC ligados pingam continuamente o ar com uma portadora de 13,56 MHz, à espera que um cartão desperte. Não a consegue ver, mas o chip NFC do Flipper consegue: o ST25R3916 tem um detetor de campo externo por hardware (o mesmo circuito que permite ao Flipper emular um cartão e saber quando um leitor está a comunicar com ele). O Specter coloca o chip em modo apenas-deteção e amostra esse bit "campo presente?" ~500 vezes por segundo — sem nunca ligar a sua própria portadora.

Esse único bit, amostrado com rapidez suficiente, transporta 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 *que fração do tempo* um carrier está
presente e suaviza isso no **FIELD %**. Um leitor posicionado bem em cima do Flipper satura o medidor;
um mais fraco ou mais distante apenas o desloca. Isso comanda a agulha, a palavra de proximidade e a taxa de cliques.

**Que ritmo → identidade.** Separadamente, cada transição desse bit é cronometrada. Um leitor que desperta por
20 ms a cada 200 ms produz um padrão de burst/gap com quase nenhum jitter, porque seu loop de polling é
controlado por uma máquina de estados temporizada por cristal. Movimento de 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 polling", "esta sala está
limpa", "isto é o que a agulha deveria marcar" — são C puro sem dependências de hardware, e são
fixados por testes no host em vez de descobertos no dispositivo:```bash
make -C test     # 300 checks: classifier, verdict, meter scaling, presence

🚀 Instalação

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

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

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

    Seu firmwareArquivo
    Oficial / stockspecter.fap
    Unleashed, RogueMaster, Momentum ou qualquer mais recentespecter-fw-dev.fap

    Se o Flipper exibir APP:87 < FW:88 — This app might not work, você está com o arquivo errado — use o outro. A versão da API do app é fixada no momento da compilação, então uma única build não consegue atender as duas linhas de firmware. Geralmente ainda funciona se você pressionar Continue, mas a 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 para `dist/specter.fap`; `ufbt launch` copia-o para `apps/NFC/` e inicia-o por ti.

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

---

## 🎮 Como usar

**Uma varredura, de início ao fim:**

1. Inicia o **Specter**. No ecrã **Sweep**, prime **LEFT** e mantém-te imóvel durante 3 segundos para
   calibrar ao 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ões, um
   leitor de porta, a parte inferior de uma ranhura de ATM, uma encomenda, uma secretária.
   - **Forma de onda calma / plana** → nenhum leitor ativo ao alcance.
   - **Ponteiro 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 **Fingerprint**. Mantém o Flipper imóvel junto ao leitor e deixa a
   cadência estabilizar — alguns segundos costumam ser suficientes. Prime **OK** para guardar a descoberta.
4. Vais limpar uma sala inteira? Abre **Site Survey**, percorre o espaço até a barra encher e lê
   o veredicto.
5. Vais sair da área? Deixa o Flipper em **Watch Mode** e ele fica de guarda, acordando e soando
   se um leitor aparecer enquanto estás fora.
6. Consulta o **Logbook** para tudo o que guardaste, com data e hora — ou extrai o `logbook.csv` do cartão
   para uma folha de cálculo.

> 💡 Varre primeiro um leitor que sabes ser bom (o teu próprio telemóvel a fazer NFC, ou um terminal contactless em que confias) para
> ver como é um campo forte e legítimo no medidor — e como se lê a sua impressão digital. Depois
> vai à caça.

### Controlos

| Ecrã | Tecla | Ação |
|---|---|---|
| **Sweep** | `OK` | Reiniciar pico / contactos |
| | `hold OK` | Registar a leitura atual |
| | `LEFT` | Calibrar o ruído de fundo (3 s) |
| **Fingerprint** | `OK` | Guardar a descoberta no logbook |
| | `hold OK` | Reiniciar a medição |
| **Site Survey** | `OK` | Executar a varredura novamente |
| **Watch Mode** | `OK` | Rearmar (limpar contagem e relógio) |
| *em qualquer lugar* | `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, leitores de transportes e de hotéis. **Não consegue** ver leitores de **125 kHz (LF)**
  (painéis de porta HID Prox / EM4100 mais antigos); o caminho LF do Flipper não tem um bit equivalente de deteção de campo.
- **Deteta a *portadora* de um leitor, não o que ele lê.** O Specter diz-te *que 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 varredura, não uma distância medida em cm. É uma leitura *escalada* do duty-cycle da portadora
  em relação a uma banda de polling típica (ver [Ler o medidor](#-reading-the-meter--fixed-in-23));
  um leitor que faz polling invulgarmente esparso lerá mais baixo à mesma distância, e um em modo de onda contínua
  ficará no máximo 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 — a partir
  desse ponto, aproximar-te genuinamente não pode produzir um número maior. Usa o peak-hold `PK` para comparar
  posições em vez disso.
- **A cadência resolve até ~2 ms.** Esse é o período de amostragem. Temporizações próximas disso são mostradas com um
  **`~`** e a confiança é descontada em conformidade — o Specter prefere sinalizar o seu próprio limite de resolução
  do que citar um número de aparência precisa que não pode sustentar.
- **`CLEAN` significa limpo à sensibilidade que escolheste.** Um skimmer dormente que só acorda com um toque real,
  ou um que esteja blindado, permanece invisível a *qualquer* limiar. A ausência de leitura não é garantia de
  ausência.
- **Um rádio de cada vez.** O Specter assume o controlo do chip NFC enquanto faz varredura, por isso fecha primeiro qualquer outra app NFC
  (dirá *NFC unavailable* se algo mais estiver a usar o 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 própria** área de POS, porta, secretária ou pertences, ou hardware que estejas **explicitamente
autorizado** a avaliar. És responsável pela forma como o usas. Conhece as leis locais.

---

## 🗺️ Roadmap

- [x] Persistir sensibilidade / som / vibração / LED entre reinícios
- [x] "Logbook" de deteções com data e hora 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] Impressão digital de um emissor pela sua cadência de polling
- [x] Varredura de local temporizada com veredicto da sala
- [x] Exportar o logbook como CSV para relatórios — *escrito em tempo real ao lado do .txt*
- [x] Modo de vigilância prolongada sem supervisão com alarme de despertar por deteção
- [x] Fazer o medidor usar todo o seu alcance contra leitores de polling reais
- [x] Seta de tendência mais quente/mais frio durante a caça
- [ ] Investigar uma deteção de leitor baseada 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

🎨 Branding

Todo o material gráfico é gerado, por isso nunca se desvia da aplicação:

RecursoTamanhoOnde é usado
images/banner.png2560×800Cabeçalho do README (2× para se manter nítido em ecrãs retina)
images/social-preview.png1280×640Settings → Social preview — o tamanho recomendado pelo GitHub (mín. 640×320, limite de 1 MB)
images/mark.png512×512Logótipo quadrado: avatares, favicons, apresentações
images/demo.gif768×384A animação acima, ~9 s, construída a partir das constantes reais da 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
> A pré-visualização social é o único recurso que o GitHub não consegue extrair do repositório — ela
> precisa ser enviada manualmente uma vez em **Settings → Social preview**. É o que é renderizado
> quando o repositório é compartilhado no Slack, X, LinkedIn ou Discord.

---

## 🙏 Créditos

- Criado por **[at0m-b0mb](https://github.com/at0m-b0mb)**.
- Parte de uma família de ferramentas de segurança 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)** (caçador anti-stalking BLE) e **[Cerberus](https://github.com/at0m-b0mb/flipper-cerberus)** (watchdog de RF Sub-GHz).
- Desenvolvido com o [firmware do Flipper Zero](https://github.com/flipperdevices/flipperzero-firmware) NFC HAL (`furi_hal_nfc` field detection) + [ufbt](https://github.com/flipperdevices/flipperzero-ufbt).

## 📄 Licença

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

Categorias