Назад к обновлениям
New releaseSep 3, 2026

Specter-FlipperZero v2.8

👻 Specter — пассивный поиск NFC-ридеров/скиммеров на 13,56 МГц для Flipper Zero. Контрразведывательный измеритель электромагнитного поля (ЭМП) на базе встроенного NFC-чипа. Не требует дополнительного оборудования.

Поделиться

Specter — NFC reader & skimmer bug-sweep for Flipper Zero

Specter 👻

Ищите считыватели, которые не видны глазу.

Latest release Downloads Stars Build

Flipper Zero Onboard NFC No extra hardware Listen-only MIT

Specter превращает ваш Flipper Zero в карманный контрразведывательный поисковик жучков для активных считывателей NFC на 13,56 МГц. Он пассивно слушает радиочастотное поле, которое постоянно излучает включённый считыватель — скрытый скиммер карт, вставленный в платёжный терминал, скрытый считыватель за дверной панелью, блуждающий логгер, приклеенный под столом — а затем сообщает вам где он находится, что это за устройство, чисто ли помещение и — если оставить на страже — момент, когда оно появится, пока вас нет. Он никогда не передаёт сигналы.

Считыватели невидимы. Specter делает их видимыми.

Как было показано в
Help Net Security  ·  Cyber Security News


📟 На Flipper

Specter in use: sweeping a quiet room, closing in on a reader, locking on at MAX, fingerprinting its polling cadence, then a site-survey verdict

Поиск от начала до конца: тихая комната → приближение → захват → что это → вердикт по комнате.

Specter screens

Поиск (тихо)  ·  Поиск (считыватель захвачен)  ·  Отпечаток  ·  Обследование (выполняется)  ·  Обследование (вердикт)
Наблюдение (чисто)  ·  Наблюдение (считыватель!)  ·  Журнал  ·  Калибровка  ·  Настройки


✨ Пять режимов

Specter — это пять инструментов вокруг одного датчика. Каждый отвечает на свой вопрос, поэтому правильный выбор зависит от того, что именно вы пытаетесь выяснить:

РежимНа какой вопрос отвечаетКогда использовать
🔍 ПоискГде это?Вы подозреваете устройство и хотите точно определить его место, перемещаясь
🔬 ОтпечатокЧто это за устройство?Вы нашли излучатель и хотите узнать, как он ведёт себя
🗺️ Обследование помещенияЧисто ли это помещение?Вы хотите получить один вердикт для всего пространства, без рук
🛰️ Режим наблюденияПоявилось ли оно, пока меня не было?Вы оставляете Flipper где-то на страже
📖 ЖурналЧто я нашёл и когда?Вы оформляете отчёт или сравниваете сегодня с прошлой неделей — фильтруйте по типу находки

🔍 Поиск — где это?

Sweep — reader found, meter pegged

Что он делает. Живой измеритель в стиле EMF. Держите Flipper горизонтально и медленно перемещайте его над проверяемым объектом — карточным терминалом, дверным считывателем, нижней стороной кромки банкомата, посылкой, столом. Стрелка реагирует на силу поля в реальном времени.

Что вы видите.

  • Шкала — стрелка = текущее показание, маленькая точка = пик-удержание (самое сильное место, которого вы касались, чтобы можно было сравнивать позиции).
  • FIELD % — то же показание в виде числа, со стрелкой тренда ▲ / ▼, показывающей, стало ли за последние полсекунды теплее или холоднее. Когда вы охотитесь, эта стрелка важнее числа.
  • PK / C — пиковое показание и количество отдельных контактов.
  • Нижняя полоса — живая форма волны и текущая чувствительность, пока тихо; она переключается на чёрную полосу тревоги ● ACTIVE READER со словом близости в момент обнаружения несущей.
  • БлизостьFAINT → NEAR → CLOSE → STRONG → MAX. MAX означает, что измеритель на пределе: вы настолько близко, насколько позволяет данное измерение.

Звук. Необязательные щелчки гейгера, которые ускоряются по мере приближения, так что вы можете искать с Flipper в кармане и охотиться только на слух.

КлавишаДействие
OKСбросить пик-удержание и счётчик контактов
удерживать OKСохранить это показание в журнал
LEFTКалибровка по шумовому фону помещения (3 с)

🔬 Отпечаток — что это за устройство?

Fingerprint — polling reader identified

Что он делает. После того как Поиск что-то нашёл, держите Flipper неподвижно против него. Отпечаток перестаёт измерять близость и начинает замерять фронты включения/выключения несущей, что на самом деле отличает один тип излучателя от другого.

Что вы видите. Вердикт, полосу уверенности и доказательства, стоящие за обоими:

КлассЧто это означает на практике
CONTINUOUSНесущая удерживается постоянно включённой
POLLINGФиксированный цикл опроса с кварцевым таймингом — период показан в мс
INTERMITTENTПорывистый, но нерегулярный — часто телефон или используемый считыватель

Ниже показаны PER (период опроса), BST (ширина импульса), JIT (джиттер) и DUTY (истинный коэффициент заполнения), а также импульсная последовательность логического анализатора сырой несущей — так что вердикт никогда не приходится принимать на веру. Настоящий опросный считыватель проявляется как безошибочная прямоугольная волна.

~ перед значением времени означает, что оно близко к пределу дискретизации 2 мс, и уверенность соответственно снижается.

КлавишаДействие
OKСохранить находку в журнал
удерживать OKПерезапустить измерение

🗺️ Обследование помещения — чисто ли это помещение?

Site Survey — verdict

Что он делает. Таймированное обследование всего пространства. Запустите его, пройдитесь по комнате обычным образом и получите один вердикт в конце — без наблюдения за стрелкой.

Что вы видите. Обратный отсчёт и полосу прогресса во время выполнения, затем карточку вердикта:

  • CLEAN — ничего не пересекло шумовой фон
  • TRACE — краткие или слабые сигналы; стоит сделать более медленный второй проход
  • ACTIVE READER — что-то действительно было включено и излучало

…с полями MAX / AVG, счётчиком контактов и FIELD %какую часть обследования несущая действительно была активна, что часто является самым показательным числом из четырёх. Выполняется 30 с, 60 с или 2 мин и автоматически записывает результат.

КлавишаДействие
OKЗапустить обследование снова

🛰️ Режим наблюдения — появилось ли оно, пока меня не было?

Watch Mode — reader present

Что он делает. Стоит на страже неограниченно долго. Включите его, положите Flipper, уйдите. Где Поиск — это ваша охота, а Обследование — тест фиксированной длины, Наблюдение просто ждёт — минуты или часы.

Что вы видите. Крупные часы прошедшего времени и ALL CLEAR, пока ничего нет. В момент появления считывателя полоса инвертируется в READER PRESENT, экран пробуждается, и звучит сигнал тревоги. Полоса устойчивая, а не мигающая — вместо этого пульсирует маленький маркер, так что она читается как живая, не стробоскопируя на вас. После того как сигнал исчезает, экран сохраняет доказательства: HITS (сколько отдельных контактов), PEAK, LAST (как давно был самый последний) и SEEN (общее время, когда несущая действительно была активна).

Наблюдение намеренно игнорирует скрытый режим — тёмный, безмолвный страж, который никогда не сообщит, что что-то увидел, был бы хуже бесполезного.

КлавишаДействие
OKПеревзвести — сбрасывает часы и счётчики

📖 Журнал — что я нашёл и когда?

Находки сохраняются дважды, одним действием, так что их можно читать на устройстве и они уже готовы как электронная таблица — никакого шага экспорта, о котором нужно помнить:

logbook.txt — сгруппировано, для просмотра на устройствеlogbook.csv — одна плоская строка на запись
``` 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 … ```

Записи помечаются тегами SWEEP, READER, SURVEY или WATCH и получают метку времени из часов Flipper. Оба файла хранятся в apps_data/specter/ на SD-карте. Ничто никогда не покидает устройство. Очистите их через Settings → Clear logbook (сначала подтверждение — это единственное необратимое действие, которое может выполнить приложение).


⚙️ Вспомогательные детали

🎯 Автокалибровка

Нажмите LEFT на экране Sweep, и Specter в течение 3 секунд слушает уровень фонового шума, затем устанавливает порог обнаружения чуть выше того, что измерил, — сохраняется как ваша Custom чувствительность. В каждой комнате свой уровень радиочастотного фона; это настраивается под ту, где вы находитесь, а не под число, зашитое при сборке. Встаньте в тихом месте, когда запускаете её.

🕶️ Стелс-режим

Держит экран и светодиод тёмными на протяжении всего сканирования, чтобы Flipper не светился, пока вы тот, кто ведёт поиск. Звук и вибрация продолжают работать — смысл не в том, чтобы отключить обратную связь, по которой вы ведёте сканирование. Выход с экрана стелс-режима снова включает подсветку, так что BACK всегда возвращает вас на освещённое меню.

📏 Чтение измерителя

Почему считыватель, к которому вы прикасаетесь, не излучает 100% времени. Детектор измеряет одну физическую величину: какую долю времени несущая частота 13.56 МГц активна. Но считыватели работают в режиме опроса — короткий импульс, пауза, ещё один импульс. Типичный терминал излучает только 20–35% времени, поэтому сырая скважность насыщается около 30%, как бы близко вы ни подошли.

Отображение этого сырого числа на шкале превращало идеальное обнаружение в треть от него. Измеритель откалиброван под эту реальную полосу опроса:

Сырая скважность несущейИзмерительБлизость
3% (фоновый шум)10%FAINT
12%40%NEAR
20%67%CLOSE
28%93%STRONG
≥30% (лежит на считывателе)100%MAX

Сырая скважность никогда не теряется: уровень шума, автокалибровка и DUTY на экране Fingerprint по-прежнему работают в истинной скважности, потому что они описывают сигнал, а не ваше расстояние до него. Нужно буквальное число? Settings → Meter → Raw.

💾 Всё сохраняется

Чувствительность, длительность обзора, звук, вибрация, светодиод, стелс, журналирование и режим измерителя сохраняются на SD-карту в момент изменения. Набор для сканирования, который забывает свои настройки, хуже, чем полное отсутствие сохранения.


🧠 Как это работает

Каждый включённый NFC-считыватель непрерывно посылает в эфир несущую частоту 13.56 МГц, ожидая, когда карта проснётся. Вы этого не видите, но NFC-чип Flipper может: ST25R3916 имеет аппаратный детектор внешнего поля (та же схема, которая позволяет Flipper эмулировать карту и знать, когда считыватель с ним общается). Specter переводит чип в режим только-обнаружения и сэмплирует этот бит «поле присутствует?» примерно 500 раз в секунду — никогда не включая собственную несущую.

Этот единственный бит, сэмплируемый достаточно быстро, несёт два независимых сигнала:```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
**Сколько → сила.** За короткое окно Specter измеряет *какую долю времени* носитель
присутствует и сглаживает это в **FIELD %**. Считыватель, находящийся прямо над Flipper, зашкаливает на индикаторе;
более слабый или более удалённый — лишь слегка его шевелит. Это управляет стрелкой, словом близости и частотой щелчков.

**Какой ритм → идентичность.** Отдельно замеряется каждый переход этого бита. Считыватель, который просыпается
на 20 мс каждые 200 мс, создаёт паттерн «всплеск/пауза» почти без джиттера, потому что его цикл опроса
управляется конечным автоматом, синхронизированным по кварцу. Движение руки и RF-шум не настолько стабильны. Именно
эта разница отделяет **POLLING** от **INTERMITTENT**.

### Слои принятия решений тестируются на реальном компьютере

Места, где Specter превращает числа в *утверждение* — «это опрашивающий считыватель», «эта комната
чиста», «вот что должна показывать стрелка» — это чистый C без аппаратных зависимостей, и они
закреплены хост-тестами, а не обнаруживаются на устройстве:```bash
make -C test     # 300 checks: classifier, verdict, meter scaling, presence

🚀 Установка

Никакой платы разработчика и прошивки для прошивки не нужно — это один файл .fap.

Вариант A — готовый .fap (самый простой)

  1. Возьмите нужный .fap со страницы Releases:

    Ваша прошивкаФайл
    Официальная / стандартнаяspecter.fap
    Unleashed, RogueMaster, Momentum или что-то новееspecter-fw-dev.fap

    Если Flipper сообщает APP:87 < FW:88 — This app might not work, у вас не тот файл — возьмите другой. Версия API приложения фиксируется при компиляции, поэтому одна сборка не может подойти для обеих линий прошивок. Обычно оно всё равно запускается, если нажать Continue, но подходящая сборка не будет спрашивать.

  2. Откройте qFlipper, перетащите файл в SD Card / apps / NFC /.

  3. На Flipper: Apps → NFC → Specter.

Вариант B — соберите сами с помощью 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

Файл `.fap` попадает в `dist/specter.fap`; `ufbt launch` копирует его в `apps/NFC/` и запускает для вас.

> Иконки в `icons/`, скриншоты и баннер в `images/` генерируются — перегенерируйте с помощью
> `python3 tools_gen_icons.py`, `python3 tools_gen_mockups.py` и `python3 tools_gen_banner.py` (требуется `pillow`).

---

## 🎮 Использование

**Полный проход, от начала до конца:**

1. Запустите **Specter**. На экране **Sweep** нажмите **LEFT** и удерживайте 3 секунды, чтобы
   откалиброваться по шумовому фону помещения.
2. Держите Flipper плоско и двигайте его **медленно** по проверяемому объекту — терминалу карт,
   считывателю дверей, нижней кромке банкомата, посылке, столу.
   - **Тихая / плоская волна** → активного считывателя в зоне действия нет.
   - **Стрелка растёт, щелчки ускоряются** → вы приближаетесь к излучателю. Продолжайте движение к пику.
   - **`● ACTIVE READER` + тревожная рамка** → активный считыватель прямо здесь.
3. Что-то нашли? Выйдите и откройте **Fingerprint**. Держите Flipper неподвижно у объекта и дайте
   ритму устояться — обычно хватает нескольких секунд. Нажмите **OK**, чтобы сохранить находку.
4. Вместо этого проверяете целую комнату? Откройте **Site Survey**, пройдите по пространству, пока шкала
   не заполнится, и прочитайте вердикт.
5. Покидаете зону? Переведите Flipper в **Watch Mode**, и он будет стоять на страже, просыпаясь и подавая
   сигнал, если считыватель появится, пока вас нет.
6. Проверьте **Logbook** — там всё сохранённое с метками времени — или вытащите `logbook.csv` с карты
   в таблицу.

> 💡 Сначала просканируйте заведомо исправный считыватель (свой телефон в режиме NFC или доверенный
> бесконтактный терминал), чтобы увидеть, как выглядит сильное легитимное поле на индикаторе — и как
> читается его отпечаток. Затем отправляйтесь на поиски.

### Управление

| Экран | Клавиша | Действие |
|---|---|---|
| **Sweep** | `OK` | Сброс пика / контактов |
| | `удержание OK` | Запись текущего показания |
| | `LEFT` | Калибровка шумового фона (3 с) |
| **Fingerprint** | `OK` | Сохранить находку в журнал |
| | `удержание OK` | Перезапустить измерение |
| **Site Survey** | `OK` | Запустить проверку заново |
| **Watch Mode** | `OK` | Перевзвести (сброс счётчика и часов) |
| *в любом месте* | `BACK` | На уровень выше |

---

## 🔬 Честные ограничения

- **Только 13.56 МГц (HF).** Specter чувствует **диапазон NFC** — тот, что используется скиммерами
  бесконтактных платежей, большинством современных считывателей доступа, транспортными и гостиничными
  считывателями. Он **не может** видеть считыватели **125 кГц (LF)** (старые дверные панели HID Prox /
  EM4100); у LF-пути Flipper нет эквивалентного бита обнаружения поля.
- **Он чувствует *несущую* считывателя, а не то, что тот читает.** Specter сообщает вам *здесь есть
  активный считыватель, примерно насколько он близко и с каким ритмом он опрашивает* — он не
  декодирует, не идентифицирует и не захватывает ничего из того, что делает считыватель.
- **Сила относительна, а не откалибрована.** `FIELD %` и слова близости — это сравнительный ориентир
  «теплее / холоднее» для поиска, а не измеренное расстояние в см. Это *масштабированное* показание
  рабочего цикла несущей относительно типичной полосы опроса (см. [Чтение индикатора](#-reading-the-meter--fixed-in-23));
  считыватель с необычно редким опросом будет показывать меньше на той же дистанции, а работающий
  в режиме непрерывной волны — зашкаливать с большего расстояния.
- **У индикатора есть предел.** `MAX` означает, что несущая поднята настолько, насколько этот
  считыватель вообще её поднимает — дальше приближение физически не может дать большее число.
  Используйте пик-удержание `PK` для сравнения позиций.
- **Ритм разрешается до ~2 мс.** Это период дискретизации. Времена, близкие к нему, показываются
  с **`~`**, и достоверность соответственно снижается — Specter предпочитает указать на собственный
  предел разрешения, чем выдать точное на вид число, за которое не может поручиться.
- **`CLEAN` означает чисто при выбранной вами чувствительности.** Спящий скиммер, который просыпается
  только на реальное касание, или экранированный, останется невидимым при *любом* пороге. Отсутствие
  показания — не гарантия отсутствия.
- **Одно радио за раз.** Specter захватывает NFC-чип во время сканирования, поэтому сначала закройте
  любое другое NFC-приложение (оно сообщит *NFC unavailable*, если радио занято чем-то ещё).

---

## ⚖️ Правовые и этические аспекты

Specter — это **оборонительный, только слушающий** инструмент — он **никогда не передаёт**, не питает
поле и не касается считывателя. Используйте его для проверки **своей** зоны POS, двери, стола или
вещей, либо оборудования, которое вам **явно разрешено** оценивать. Ответственность за использование
лежит на вас. Знайте местные законы.

---

## 🗺️ Дорожная карта

- [x] Сохранение чувствительности / звука / вибрации / LED между перезагрузками
- [x] «Журнал» обнаружений с метками времени на SD-карту
- [x] Фоновое сканирование с выключенным экраном — *скрытый режим*
- [x] Регулируемый порог для более точного контроля дальности — *автокалибровка + пользовательская чувствительность*
- [x] Отпечаток излучателя по ритму его опроса
- [x] Таймированный обзор помещения с вердиктом по комнате
- [x] Экспорт журнала в CSV для отчётов — *записывается в реальном времени рядом с .txt*
- [x] Долгий автономный режим наблюдения с будильником по обнаружению
- [x] Использование индикатором полного диапазона против реальных опрашивающих считывателей
- [x] Стрелка тренда «теплее/холоднее» во время поиска
- [ ] Исследование LF-датчика (125 кГц) на катушке как отдельного режима
- [ ] Фильтрация журнала по типу на устройстве

---

## 🗂️ Структура проекта```
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

🎨 Брендинг

Все изображения генерируются автоматически, поэтому они никогда не расходятся с приложением:

АссетРазмерКуда используется
images/banner.png2560×800Шапка README (в 2×, чтобы оставался чётким на retina-экранах)
images/social-preview.png1280×640Настройки → Социальный превью — рекомендуемый размер GitHub (мин. 640×320, лимит 1 МБ)
images/mark.png512×512Квадратный логотип: аватары, фавиконки, слайды
images/demo.gif768×384Анимация выше, ~9 с, собрана из реальных констант представления
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
> Социальный превью — это единственный ресурс, который GitHub не может подхватить из репозитория — его
> нужно один раз загрузить вручную в **Settings → Social preview**. Именно он отображается
> при публикации репозитория в Slack, X, LinkedIn или Discord.

---

## 🙏 Благодарности

- Создано **[at0m-b0mb](https://github.com/at0m-b0mb)**.
- Часть семейства security-инструментов для Flipper: **[Argus](https://github.com/at0m-b0mb/Argus-FlipperZero)** (Wi-Fi deauth / evil-twin watchdog), **[GhostTag](https://github.com/at0m-b0mb/GhostTag-FlipperZero)** (BLE anti-stalking hunter) и **[Cerberus](https://github.com/at0m-b0mb/flipper-cerberus)** (Sub-GHz RF watchdog).
- Работает на базе [прошивки Flipper Zero](https://github.com/flipperdevices/flipperzero-firmware) NFC HAL (`furi_hal_nfc` field detection) + [ufbt](https://github.com/flipperdevices/flipperzero-ufbt).

## 📄 Лицензия

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

Категории