Skip to content

Commit 7de9c95

Browse files
authored
Merge pull request #57 from Ganapati/dev
Add SubGhz Fuzzer
2 parents 6decd6f + 18891ad commit 7de9c95

21 files changed

+1534
-7
lines changed

applications/flipfrid/application.fam

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@ App(
66
cdefines=["APP_FLIP_FRID"],
77
requires=["gui"],
88
stack_size=1 * 1024,
9-
order=29,
9+
order=13,
1010
)

applications/flipfrid/scene/flipfrid_scene_run_attack.c

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#include "flipfrid_scene_run_attack.h"
2+
#include <gui/elements.h>
23

34
uint8_t counter = 0;
45
#define TIME_BETWEEN_CARDS 5
@@ -182,7 +183,7 @@ void flipfrid_scene_run_attack_on_draw(Canvas* canvas, FlipFridState* context) {
182183
canvas_set_color(canvas, ColorBlack);
183184

184185
// Frame
185-
canvas_draw_frame(canvas, 0, 0, 128, 64);
186+
//canvas_draw_frame(canvas, 0, 0, 128, 64);
186187

187188
// Title
188189
canvas_set_font(canvas, FontPrimary);
@@ -202,11 +203,12 @@ void flipfrid_scene_run_attack_on_draw(Canvas* canvas, FlipFridState* context) {
202203
canvas_draw_str_aligned(canvas, 64, 24, AlignCenter, AlignTop, uid);
203204

204205
canvas_set_font(canvas, FontSecondary);
205-
char start_stop_msg[20];
206+
//char start_stop_msg[20];
206207
if(context->is_attacking) {
207-
snprintf(start_stop_msg, sizeof(start_stop_msg), " Press OK to stop ");
208+
elements_button_center(canvas, "Stop");
209+
//snprintf(start_stop_msg, sizeof(start_stop_msg), " Press OK to stop ");
208210
} else {
209-
snprintf(start_stop_msg, sizeof(start_stop_msg), " Press OK to start ");
211+
elements_button_center(canvas, "Start");
210212
}
211-
canvas_draw_str_aligned(canvas, 64, 44, AlignCenter, AlignTop, start_stop_msg);
213+
//canvas_draw_str_aligned(canvas, 64, 44, AlignCenter, AlignTop, start_stop_msg);
212214
}

applications/flipfrid/scene/flipfrid_scene_select_field.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ void flipfrid_scene_select_field_on_draw(Canvas* canvas, FlipFridState* context)
104104
canvas_set_color(canvas, ColorBlack);
105105

106106
// Frame
107-
canvas_draw_frame(canvas, 0, 0, 128, 64);
107+
//canvas_draw_frame(canvas, 0, 0, 128, 64);
108108

109109
// Title
110110
canvas_set_font(canvas, FontPrimary);

applications/meta/application.fam

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,5 +78,6 @@ App(
7878
"wifi_scanner",
7979
"multi_converter",
8080
"flipfrid",
81+
"subbrute",
8182
],
8283
)

applications/subbrute/LICENSE.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
/*
2+
* ----------------------------------------------------------------------------
3+
* "THE BEER-WARE LICENSE" (Revision 42):
4+
* @G4N4P4T1 wrote this file. As long as you retain this notice you
5+
* can do whatever you want with this stuff. If we meet some day, and you think
6+
* this stuff is worth it, you can buy me a beer in return.
7+
* ----------------------------------------------------------------------------
8+
*/

applications/subbrute/README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# FlipFrid
2+
3+
SubGhz Fuzzer
4+
select your base message, the field to fuzz and let's get fuzzy !
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
App(
2+
appid="subbrute",
3+
name="SubGHz Bruteforcer",
4+
apptype=FlipperAppType.PLUGIN,
5+
entry_point="subbrute_start",
6+
cdefines=["APP_SUB_BRUTE"],
7+
requires=["gui","dialogs"],
8+
stack_size=2 * 1024,
9+
order=11,
10+
)
Lines changed: 198 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,198 @@
1+
#include "subbrute_scene_entrypoint.h"
2+
#include "../subbrute_utils.h"
3+
4+
string_t subbrute_menu_items[9];
5+
6+
void subbrute_scene_entrypoint_menu_callback(SubBruteState* context, uint32_t index) {
7+
string_set_str(context->preset, "FuriHalSubGhzPresetOok650Async");
8+
string_set_str(context->protocol, "RAW");
9+
context->repeat = 5;
10+
context->te = 0;
11+
context->attack = index;
12+
switch(index) {
13+
case SubBruteAttackLoadFile:
14+
context->current_scene = SceneSelectFile;
15+
break;
16+
case SubBruteAttackCAME12bit433:
17+
context->frequency = 433920000;
18+
context->bit = 12;
19+
string_set_str(context->protocol, "CAME");
20+
string_set_str(context->preset, "FuriHalSubGhzPresetOok650Async");
21+
if(!subbrute_is_frequency_allowed(context)) {
22+
return;
23+
}
24+
context->current_scene = SceneAttack;
25+
break;
26+
case SubBruteAttackCAME12bit868:
27+
context->frequency = 868350000;
28+
context->bit = 12;
29+
string_set_str(context->protocol, "CAME");
30+
string_set_str(context->preset, "FuriHalSubGhzPresetOok650Async");
31+
if(!subbrute_is_frequency_allowed(context)) {
32+
return;
33+
}
34+
context->current_scene = SceneAttack;
35+
break;
36+
case SubBruteAttackChamberlain9bit315:
37+
context->frequency = 315000000;
38+
context->bit = 9;
39+
string_set_str(context->protocol, "Cham_Code");
40+
string_set_str(context->preset, "FuriHalSubGhzPresetOok650Async");
41+
42+
if(!subbrute_is_frequency_allowed(context)) {
43+
return;
44+
}
45+
context->current_scene = SceneAttack;
46+
break;
47+
case SubBruteAttackChamberlain9bit390:
48+
context->frequency = 390000000;
49+
context->bit = 9;
50+
string_set_str(context->protocol, "Cham_Code");
51+
string_set_str(context->preset, "FuriHalSubGhzPresetOok650Async");
52+
53+
if(!subbrute_is_frequency_allowed(context)) {
54+
return;
55+
}
56+
context->current_scene = SceneAttack;
57+
break;
58+
case SubBruteAttackLinear10bit300:
59+
context->frequency = 300000000;
60+
context->bit = 10;
61+
string_set_str(context->protocol, "Linear");
62+
string_set_str(context->preset, "FuriHalSubGhzPresetOok650Async");
63+
if(!subbrute_is_frequency_allowed(context)) {
64+
return;
65+
}
66+
context->current_scene = SceneAttack;
67+
break;
68+
case SubBruteAttackLinear10bit310:
69+
context->frequency = 310000000;
70+
context->bit = 10;
71+
string_set_str(context->protocol, "Linear");
72+
string_set_str(context->preset, "FuriHalSubGhzPresetOok650Async");
73+
if(!subbrute_is_frequency_allowed(context)) {
74+
return;
75+
}
76+
context->current_scene = SceneAttack;
77+
break;
78+
case SubBruteAttackNICE12bit433:
79+
context->frequency = 433920000;
80+
context->bit = 12;
81+
string_set_str(context->protocol, "Nice FLO");
82+
string_set_str(context->preset, "FuriHalSubGhzPresetOok650Async");
83+
if(!subbrute_is_frequency_allowed(context)) {
84+
return;
85+
}
86+
context->current_scene = SceneAttack;
87+
break;
88+
case SubBruteAttackNICE12bit868:
89+
context->frequency = 868350000;
90+
context->bit = 12;
91+
string_set_str(context->protocol, "Nice FLO");
92+
string_set_str(context->preset, "FuriHalSubGhzPresetOok650Async");
93+
if(!subbrute_is_frequency_allowed(context)) {
94+
return;
95+
}
96+
context->current_scene = SceneAttack;
97+
break;
98+
default:
99+
break;
100+
}
101+
}
102+
103+
void subbrute_scene_entrypoint_on_enter(SubBruteState* context) {
104+
// Clear the previous payload
105+
context->menu_index = 0;
106+
for(uint32_t i = 0; i < 9; i++) {
107+
string_init(subbrute_menu_items[i]);
108+
}
109+
110+
string_set(subbrute_menu_items[0], "BF existing dump");
111+
string_set(subbrute_menu_items[1], "CAME 12bit 433mhz");
112+
string_set(subbrute_menu_items[2], "CAME 12bit 868mhz");
113+
string_set(subbrute_menu_items[3], "Chamberlain 9bit 315mhz");
114+
string_set(subbrute_menu_items[4], "Chamberlain 9bit 390mhz");
115+
string_set(subbrute_menu_items[5], "Linear 10bit 300mhz");
116+
string_set(subbrute_menu_items[6], "Linear 10bit 310mhz");
117+
string_set(subbrute_menu_items[7], "NICE 12bit 433mhz");
118+
string_set(subbrute_menu_items[8], "NICE 12bit 868mhz");
119+
}
120+
121+
void subbrute_scene_entrypoint_on_exit(SubBruteState* context) {
122+
UNUSED(context);
123+
for(uint32_t i = 0; i < 9; i++) {
124+
string_clear(subbrute_menu_items[i]);
125+
}
126+
}
127+
128+
void subbrute_scene_entrypoint_on_tick(SubBruteState* context) {
129+
UNUSED(context);
130+
}
131+
132+
void subbrute_scene_entrypoint_on_event(SubBruteEvent event, SubBruteState* context) {
133+
if(event.evt_type == EventTypeKey) {
134+
if(event.input_type == InputTypeShort) {
135+
switch(event.key) {
136+
case InputKeyDown:
137+
if(context->menu_index < SubBruteAttackNICE12bit868) {
138+
context->menu_index++;
139+
}
140+
break;
141+
case InputKeyUp:
142+
if(context->menu_index > SubBruteAttackLoadFile) {
143+
context->menu_index--;
144+
}
145+
break;
146+
case InputKeyLeft:
147+
case InputKeyRight:
148+
break;
149+
case InputKeyOk:
150+
subbrute_scene_entrypoint_menu_callback(context, context->menu_index);
151+
break;
152+
case InputKeyBack:
153+
context->is_running = false;
154+
break;
155+
}
156+
}
157+
}
158+
}
159+
160+
void subbrute_scene_entrypoint_on_draw(Canvas* canvas, SubBruteState* context) {
161+
canvas_clear(canvas);
162+
canvas_set_color(canvas, ColorBlack);
163+
164+
// Title
165+
canvas_set_font(canvas, FontPrimary);
166+
canvas_draw_str_aligned(canvas, 64, 6, AlignCenter, AlignTop, "SubGHz Fuzzer");
167+
168+
if(context->menu_index > SubBruteAttackLoadFile) {
169+
canvas_set_font(canvas, FontSecondary);
170+
canvas_draw_str_aligned(
171+
canvas,
172+
64,
173+
24,
174+
AlignCenter,
175+
AlignTop,
176+
string_get_cstr(subbrute_menu_items[context->menu_index - 1]));
177+
}
178+
179+
canvas_set_font(canvas, FontPrimary);
180+
canvas_draw_str_aligned(
181+
canvas,
182+
64,
183+
36,
184+
AlignCenter,
185+
AlignTop,
186+
string_get_cstr(subbrute_menu_items[context->menu_index]));
187+
188+
if(context->menu_index < SubBruteAttackNICE12bit868) {
189+
canvas_set_font(canvas, FontSecondary);
190+
canvas_draw_str_aligned(
191+
canvas,
192+
64,
193+
48,
194+
AlignCenter,
195+
AlignTop,
196+
string_get_cstr(subbrute_menu_items[context->menu_index + 1]));
197+
}
198+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#pragma once
2+
#include "../subbrute.h"
3+
4+
void subbrute_scene_entrypoint_on_enter(SubBruteState* context);
5+
void subbrute_scene_entrypoint_on_exit(SubBruteState* context);
6+
void subbrute_scene_entrypoint_on_tick(SubBruteState* context);
7+
void subbrute_scene_entrypoint_on_event(SubBruteEvent event, SubBruteState* context);
8+
void subbrute_scene_entrypoint_on_draw(Canvas* canvas, SubBruteState* context);

0 commit comments

Comments
 (0)