subbrute_scene_entrypoint.c 6.6 KB

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