Cerberus ๐Ÿบ๐Ÿบ๐Ÿบ

June 24, 2026 ยท View on GitHub

Cerberus โ€” Sub-GHz RF Watchdog for Flipper Zero

Cerberus ๐Ÿบ๐Ÿบ๐Ÿบ

A passive Subโ€‘GHz RF watchdog for the Flipper Zero

Three heads, three bands. Cerberus sits quietly in your space and watches the 433 / 868 / 915 MHz ISM bands โ€” barking the instant it sees jamming, a signal flood, or a replayed capture aimed at your own garage, car, alarm or sensors.

Platform Radio Language License


๐Ÿฉป What it is

Most Sub-GHz tools are made to transmit. Cerberus does the opposite โ€” it is a receive-only sentry. Drop it on a desk in the space you want to protect and it continuously samples the RF energy on the three bands your wireless remotes, key fobs, alarm sensors and meters most likely live on. When the airwaves start behaving like an attack, it lights up, buzzes, sounds off and logs exactly what it saw.

It is built for the people who already carry a Flipper: hackers, pentesters, ham/RF tinkerers and the security-curious who want to know when someone is messing with their own radio space.

Cerberus never transmits. It only listens. See Legal & ethics.

The Cerberus watch screen โ€” calm and during a jamming alert

โœจ Features

  • ๐Ÿบ Three-headed watch โ€” monitors 433.92, 868.35 and 915.00 MHz, either band-hopping across all three or pinned to one for maximum vigilance.
  • ๐Ÿšจ Three threat detectors
    • Jamming โ€” the channel is held continuously busy (energy that never falls back to the noise floor) beyond a dwell time.
    • Flood โ€” an abnormal storm of short transmissions per second.
    • Replay / repeat โ€” the same burst fingerprint repeating far more often than legitimate traffic, the tell-tale of a captured-and-replayed or brute-forced remote.
  • ๐Ÿ“ˆ Beautiful live UI โ€” a clean signal meter for each band, an active-head indicator, peak-hold, live burst rate, uptime, and a flashing alert banner that names the threat and the band.
  • ๐Ÿฉป Scope view โ€” flip to a scrolling oscilloscope (โ—„/โ–บ) that graphs a band's RSSI over time against its live noise-floor and detection-threshold lines, so you can watch an attack build. Pick the band with โ–ฒ/โ–ผ.
  • ๐Ÿ“Š Stats dashboard โ€” totals, per-threat (jam/flood/replay) and per-band breakdowns, live noise floors and uptime, with a one-press reset.
  • ๐Ÿ—’๏ธ SD card logging โ€” optionally append every alert to alerts.csv for a forensic record you can pull off the card later.
  • ๐Ÿ”• Arm / Silent โ€” long-press OK to mute the alarms while it keeps detecting and logging; keep-screen-on mode turns it into a true desk sentry.
  • ๐Ÿง  Self-calibrating โ€” an adaptive per-band noise floor means it just works in any RF environment. Press OK to recalibrate after you move it.
  • ๐Ÿ”” Multi-channel alerts โ€” LED, vibration and a custom alert tone, each independently toggleable.
  • ๐Ÿ“’ Alert log โ€” a scrollable history of every bark: time, threat, band and signal strength.
  • ๐Ÿ’พ Persistent settings โ€” your scan mode, sensitivity and toggles are saved to the SD card between runs.

๐ŸŽฎ Controls

KeyOn menusOn the Watch screen
โ–ฒ / โ–ผMove selection / scrollScope: pick the graphed band
โ—„ / โ–บAdjust valueToggle Meters โ†” Scope
OKOpen itemRecalibrate the noise floor
Hold OKโ€”Arm โ†” Silent (mute the alarms)
โ† BackPrevious screenStop watching / back to menu

When you leave the Watch screen the radio is released; open Watch again to resume guarding. In Stats, press the Reset button to clear the counters, the alert log and alerts.csv.


โš™๏ธ Settings

SettingOptionsDefaultWhat it does
Scan ModeHop 3-band ยท Pin 433 ยท Pin 868 ยท Pin 915Hop 3-bandWatch all three bands in rotation, or camp one band. Pin a band for the most reliable jamming detection.
SensitivityLow ยท Medium ยท HighMediumHow aggressively a signal counts as activity. Higher = catches weaker/fewer signals (and more false positives).
Detect JamOn / OffOnToggle the jamming detector.
Detect FloodOn / OffOnToggle the burst-flood detector.
Detect ReplayOn / OffOnToggle the repeated-capture detector.
Alert SoundOn / OffOnPlay the alert tone.
Alert VibroOn / OffOnBuzz on alert.
Alert LEDOn / OffOnFlash the red LED on alert.
Log to SDOn / OffOffAppend every alert to alerts.csv on the SD card.
Keep Screen OnOn / OffOnHold the backlight on while the Watch screen is open.

๐Ÿงช How the detection works

Cerberus drives the internal CC1101 in a wide OOK receive mode and reads the RSSI (signal strength, in dBm) hundreds of times per second. For each band it maintains an adaptive noise floor and watches three things:

ThreatSignature Cerberus looks for
JAMMINGChannel occupancy stays near 100 % โ€” energy well above the floor that never gaps back down โ€” for longer than the dwell time.
FLOODThe number of distinct bursts in the last second crosses the rate threshold.
REPLAYA coarse burst fingerprint (duration + amplitude bucket) recurs more times than normal traffic would produce.

Honest about the limits. This is an energy/heuristic detector, not a protocol decoder โ€” it does not demodulate, decode or store the contents of any transmission. Replay detection flags suspicious repetition, not a cryptographically confirmed replay. In Hop mode the radio time-slices the three bands, so for the most reliable jamming detection, pin the band you care about. Tune Sensitivity to your environment to avoid false positives. PRs that add a real decoder path are very welcome โ€” see the roadmap.


๐Ÿ“ฒ Install on your Flipper Zero

โ„น๏ธ A .fap is tied to the firmware API it was built against. If Cerberus refuses to launch, it was built for a different firmware โ€” rebuild it with ufbt matched to your firmware (see Build from source).

ufbt is the micro Flipper Build Tool โ€” the easiest path from source to a running app.

# 1. install ufbt
python3 -m pip install --upgrade ufbt

# 2. point ufbt at your firmware channel (release / rc / dev)
ufbt update --channel=release

# 3. grab Cerberus
git clone https://github.com/at0m-b0mb/flipper-cerberus.git
cd flipper-cerberus

# 4a. just build  ->  dist/cerberus.fap
ufbt

# 4b. or build, upload to a connected Flipper over USB, and launch it
ufbt launch

Option B โ€” Drop a prebuilt .fap onto the SD card

  1. Download cerberus.fap from the Releases page.
  2. Connect your Flipper over USB and open qFlipper.
  3. Copy cerberus.fap to the SD card under apps/Sub-GHz/ (path on the card: /ext/apps/Sub-GHz/cerberus.fap).
  4. On the Flipper: Apps โ†’ Sub-GHz โ†’ Cerberus. ๐Ÿบ

Option C โ€” Inside a firmware source tree

Works with official, Unleashed, Momentum and RogueMaster trees.

# from the root of your flipperzero firmware checkout
git clone https://github.com/at0m-b0mb/flipper-cerberus.git applications_user/cerberus
./fbt fap_cerberus                                   # build the .fap
./fbt launch APPSRC=applications_user/cerberus       # build + run on device

๐Ÿ› ๏ธ Build from source

Requirements: Python 3.8+, a USB cable, and a Flipper on current firmware.

python3 -m pip install --upgrade ufbt
ufbt update --channel=release      # or rc / dev to match your device
git clone https://github.com/at0m-b0mb/flipper-cerberus.git
cd flipper-cerberus
ufbt                               # -> dist/cerberus.fap
ufbt launch                        # flash + run
ufbt cli                           # optional: open the device CLI

Building for a custom firmware? Run ufbt update against that firmware's SDK (--channel/--index-url/--branch) before ufbt, so the app links against the matching API.


๐Ÿ—‚๏ธ Project layout

flipper-cerberus/
โ”œโ”€โ”€ application.fam            # Flipper app manifest
โ”œโ”€โ”€ cerberus.c                 # entry point, view dispatcher, alerts, config I/O
โ”œโ”€โ”€ cerberus_i.h               # shared app state
โ”œโ”€โ”€ scenes/                    # screen flow (scene manager)
โ”‚   โ”œโ”€โ”€ cerberus_scene_start.c     #   main menu
โ”‚   โ”œโ”€โ”€ cerberus_scene_monitor.c   #   the Watch screen (meters + scope)
โ”‚   โ”œโ”€โ”€ cerberus_scene_stats.c     #   stats dashboard + reset
โ”‚   โ”œโ”€โ”€ cerberus_scene_alerts.c    #   alert log
โ”‚   โ”œโ”€โ”€ cerberus_scene_settings.c  #   settings
โ”‚   โ””โ”€โ”€ cerberus_scene_about.c     #   about / ethics
โ”œโ”€โ”€ views/
โ”‚   โ””โ”€โ”€ cerberus_monitor_view.c    # the live meter + scope UI (canvas drawing)
โ”œโ”€โ”€ helpers/
โ”‚   โ”œโ”€โ”€ cerberus_subghz.c          # CC1101 RSSI worker thread + band hopping
โ”‚   โ””โ”€โ”€ cerberus_detector.c        # jam / flood / replay detection engine
โ”œโ”€โ”€ images/cerberus_10px.png   # app icon
โ”œโ”€โ”€ assets/banner.svg|png      # repo banner
โ””โ”€โ”€ docs/screens.svg|png       # UI mockups

๐Ÿ—บ๏ธ Roadmap

  • Scrolling Scope view โ€” per-band RSSI vs. floor/threshold โ€” v1.1
  • CSV logging of alerts to the SD card โ€” v1.1
  • Stats dashboard, arm/silent mute, keep-screen-on โ€” v1.1
  • Full waterfall / spectrogram (per-frequency-bin) view
  • Per-band, user-adjustable thresholds
  • Optional protocol decoder path for confirmed rolling-code replay
  • User-defined band list (beyond the default three)
  • External CC1101 module support

Got an idea? Open an issue. ๐Ÿบ


Cerberus is a defensive, receive-only tool. It does not transmit anything.

  • Only monitor RF in spaces you own or are explicitly authorised to test.
  • You are responsible for complying with your local radio, wiretap and privacy regulations โ€” ISM band rules differ by region.
  • Don't use it to surveil people or spaces without consent.

Use it to understand and protect your own airspace. Be a good neighbour.


๐Ÿค Contributing

Issues and PRs welcome โ€” detection tuning, new views, decoder integration, and firmware-compatibility fixes especially. Keep the code in the existing Flipper style (scene manager + views, no blocking work on the GUI thread).


๐Ÿ“œ License

MIT ยฉ at0m-b0mb

Built for the Flipper Zero community. Stay curious, stay defensive. ๐Ÿบ๐Ÿบ๐Ÿบ