🚫🔵
Bluetooth Jammer for Flipper Zero
Disrupt Bluetooth communications with this custom Flipper Zero application
Jammer Control Panel
2402 - 2480
20 dBm
Status
Jammer is INACTIVE
Live Jammer Control
Flipper Zero Application Code
#include <furi.h>
#include <furi_hal.h>
#include <gui/gui.h>
#include <input/input.h>
#include
#include
#define TAG "BT_Jammer"
#define BT_FREQ_MIN 2402
#define BT_FREQ_MAX 2480
#define CHANNELS 79
typedef struct {
bool jamming;
bool scanning;
uint8_t current_channel;
uint32_t devices_found;
} BTJammerState;
static void bt_jammer_render_callback(Canvas* canvas, void* ctx) {
BTJammerState* state = (BTJammerState*)ctx;
canvas_set_font(canvas, FontPrimary);
canvas_draw_str(canvas, 0, 10, "Bluetooth Jammer");
canvas_set_font(canvas, FontSecondary);
if(state->jamming) {
canvas_draw_str(canvas, 0, 25, "Status: JAMMING ACTIVE");
canvas_draw_str(canvas, 0, 40, "Channel: " + state->current_channel);
} else if(state->scanning) {
canvas_draw_str(canvas, 0, 25, "Status: SCANNING...");
canvas_draw_str(canvas, 0, 40, "Devices: " + state->devices_found);
} else {
canvas_draw_str(canvas, 0, 25, "Status: READY");
}
canvas_draw_str(canvas, 0, 55, "Press OK to toggle jamming");
}
static void bt_jammer_input_callback(InputEvent* input_event, void* ctx) {
furi_assert(ctx);
FuriMessageQueue* event_queue = ctx;
furi_message_queue_put(event_queue, input_event, FuriWaitForever);
}
static void bt_jammer_scan_callback(void* ctx) {
BTJammerState* state = (BTJammerState*)ctx;
for(uint8_t channel = 0; channel < CHANNELS; channel++) {
if(!state->scanning) break;
// Set frequency for current Bluetooth channel
uint32_t frequency = BT_FREQ_MIN + (channel * 1);
furi_hal_subghz_set_frequency(frequency * 1000000);
// Brief transmission to detect responses
furi_hal_subghz_tx();
furi_delay_ms(5);
furi_hal_subghz_rx();
furi_delay_ms(10);
state->current_channel = channel;
state->devices_found++;
}
}
static void bt_jammer_jam_callback(void* ctx) {
BTJammerState* state = (BTJammerState*)ctx;
while(state->jamming) {
// Rapidly cycle through Bluetooth frequencies
for(uint8_t channel = 0; channel < CHANNELS; channel++) {
if(!state->jamming) break;
uint32_t frequency = BT_FREQ_MIN + (channel * 1);
furi_hal_subghz_set_frequency(frequency * 1000000);
furi_hal_subghz_tx();
furi_delay_ms(2);
furi_hal_subghz_idle();
}
}
}
int32_t bt_jammer_app(void* p) {
UNUSED(p);
BTJammerState* state = malloc(sizeof(BTJammerState));
state->jamming = false;
state->scanning = false;
state->current_channel = 0;
state->devices_found = 0;
ViewPort* view_port = view_port_alloc();
view_port_draw_callback_set(view_port, bt_jammer_render_callback, state);
FuriMessageQueue* event_queue = furi_message_queue_alloc(8, sizeof(InputEvent));
view_port_input_callback_set(view_port, bt_jammer_input_callback, event_queue);
Gui* gui = furi_record_open(RECORD_GUI);
gui_add_view_port(gui, view_port, GuiLayerFullscreen);
InputEvent event;
bool running = true;
while(running) {
if(furi_message_queue_get(event_queue, &event, 100) == FuriStatusOk) {
if(event.type == InputTypePress) {
switch(event.key) {
case InputKeyBack:
running = false;
break;
case InputKeyOk:
state->jamming = !state->jamming;
state->scanning = false;
if(state->jamming) {
// Start jamming thread
FuriThread* jam_thread = furi_thread_alloc();
furi_thread_set_callback(jam_thread, bt_jammer_jam_callback);
furi_thread_set_context(jam_thread, state);
furi_thread_start(jam_thread);
}
break;
case InputKeyUp:
state->scanning = !state->scanning;
state->jamming = false;
if(state->scanning) {
// Start scanning thread
FuriThread* scan_thread = furi_thread_alloc();
furi_thread_set_callback(scan_thread, bt_jammer_scan_callback);
furi_thread_set_context(scan_thread, state);
furi_thread_start(scan_thread);
}
break;
default:
break;
}
}
}
view_port_update(view_port);
}
// Cleanup
furi_message_queue_free(event_queue);
gui_remove_view_port(gui, view_port);
view_port_free(view_port);
furi_record_close(RECORD_GUI);
free(state);
return 0;
}
⚠️ Legal Disclaimer
This code is for educational and research purposes only. Unauthorized jamming of wireless communications is illegal in most countries. Use responsibly and only in authorized testing environments.