fuzzer_scene_main.c 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. #include "../fuzzer_i.h"
  2. #include "../helpers/fuzzer_custom_event.h"
  3. #include "../lib/worker/protocol.h"
  4. #define TAG "Fuzzer main menu"
  5. void fuzzer_scene_main_callback(FuzzerCustomEvent event, void* context) {
  6. furi_assert(context);
  7. PacsFuzzerApp* app = context;
  8. view_dispatcher_send_custom_event(app->view_dispatcher, event);
  9. }
  10. void fuzzer_scene_main_error_popup_callback(void* context) {
  11. PacsFuzzerApp* app = context;
  12. notification_message(app->notifications, &sequence_reset_rgb);
  13. view_dispatcher_send_custom_event(app->view_dispatcher, FuzzerCustomEventViewMainPopupErr);
  14. }
  15. static bool fuzzer_scene_main_load_custom_dict(void* context) {
  16. furi_assert(context);
  17. PacsFuzzerApp* app = context;
  18. FuzzerConsts* consts = app->fuzzer_const;
  19. furi_string_set_str(app->file_path, consts->custom_dict_folder);
  20. DialogsFileBrowserOptions browser_options;
  21. dialog_file_browser_set_basic_options(
  22. &browser_options, consts->custom_dict_extension, &I_rfid_10px);
  23. browser_options.base_path = consts->custom_dict_folder;
  24. browser_options.hide_ext = false;
  25. bool res =
  26. dialog_file_browser_show(app->dialogs, app->file_path, app->file_path, &browser_options);
  27. return res;
  28. }
  29. static bool fuzzer_scene_main_load_key_dialog(void* context) {
  30. furi_assert(context);
  31. PacsFuzzerApp* app = context;
  32. FuzzerConsts* consts = app->fuzzer_const;
  33. furi_string_set_str(app->file_path, consts->path_key_folder);
  34. DialogsFileBrowserOptions browser_options;
  35. dialog_file_browser_set_basic_options(
  36. &browser_options, consts->key_extension, consts->key_icon);
  37. browser_options.base_path = consts->path_key_folder;
  38. browser_options.hide_ext = true;
  39. bool res =
  40. dialog_file_browser_show(app->dialogs, app->file_path, app->file_path, &browser_options);
  41. return res;
  42. }
  43. static void fuzzer_scene_main_show_error(void* context, const char* erre_str) {
  44. furi_assert(context);
  45. PacsFuzzerApp* app = context;
  46. popup_set_header(app->popup, erre_str, 64, 20, AlignCenter, AlignTop);
  47. notification_message(app->notifications, &sequence_set_red_255);
  48. notification_message(app->notifications, &sequence_double_vibro);
  49. view_dispatcher_switch_to_view(app->view_dispatcher, FuzzerViewIDPopup);
  50. }
  51. void fuzzer_scene_main_on_enter(void* context) {
  52. furi_assert(context);
  53. PacsFuzzerApp* app = context;
  54. fuzzer_view_main_set_callback(app->main_view, fuzzer_scene_main_callback, app);
  55. fuzzer_view_main_update_data(app->main_view, app->fuzzer_state);
  56. // Setup view
  57. Popup* popup = app->popup;
  58. // popup_set_icon(popup, 72, 17, &I_DolphinCommon_56x48);
  59. popup_set_timeout(popup, 2500);
  60. popup_set_context(popup, app);
  61. popup_set_callback(popup, fuzzer_scene_main_error_popup_callback);
  62. popup_enable_timeout(popup);
  63. view_dispatcher_switch_to_view(app->view_dispatcher, FuzzerViewIDMain);
  64. }
  65. bool fuzzer_scene_main_on_event(void* context, SceneManagerEvent event) {
  66. furi_assert(context);
  67. PacsFuzzerApp* app = context;
  68. bool consumed = false;
  69. if(event.type == SceneManagerEventTypeCustom) {
  70. if(event.event == FuzzerCustomEventViewMainBack) {
  71. if(!scene_manager_previous_scene(app->scene_manager)) {
  72. scene_manager_stop(app->scene_manager);
  73. view_dispatcher_stop(app->view_dispatcher);
  74. }
  75. consumed = true;
  76. } else if(event.event == FuzzerCustomEventViewMainPopupErr) {
  77. view_dispatcher_switch_to_view(app->view_dispatcher, FuzzerViewIDMain);
  78. consumed = true;
  79. } else if(event.event == FuzzerCustomEventViewMainOk) {
  80. fuzzer_view_main_get_state(app->main_view, &app->fuzzer_state);
  81. // TODO error logic
  82. bool loading_ok = false;
  83. switch(fuzzer_proto_get_attack_id_by_index(app->fuzzer_state.menu_index)) {
  84. case FuzzerAttackIdDefaultValues:
  85. loading_ok =
  86. fuzzer_worker_init_attack_dict(app->worker, app->fuzzer_state.proto_index);
  87. if(!loading_ok) {
  88. // error
  89. fuzzer_scene_main_show_error(app, "Default dictionary\nis empty");
  90. }
  91. break;
  92. case FuzzerAttackIdBFCustomerID:
  93. // TODO
  94. app->payload->data_size = fuzzer_proto_get_max_data_size();
  95. memset(app->payload->data, 0x00, app->payload->data_size);
  96. if(fuzzer_worker_init_attack_bf_byte(
  97. app->worker, app->fuzzer_state.proto_index, app->payload, 0)) {
  98. scene_manager_set_scene_state(
  99. app->scene_manager,
  100. FuzzerSceneFieldEditor,
  101. FuzzerFieldEditorStateEditingOff);
  102. scene_manager_next_scene(app->scene_manager, FuzzerSceneFieldEditor);
  103. } else {
  104. // error
  105. }
  106. break;
  107. case FuzzerAttackIdLoadFile:
  108. if(!fuzzer_scene_main_load_key_dialog(app)) {
  109. break;
  110. } else {
  111. switch(fuzzer_worker_load_key_from_file(
  112. app->worker,
  113. &app->fuzzer_state.proto_index,
  114. furi_string_get_cstr(app->file_path))) {
  115. case FuzzerWorkerLoadKeyStateOk:
  116. case FuzzerWorkerLoadKeyStateDifferentProto:
  117. scene_manager_set_scene_state(
  118. app->scene_manager,
  119. FuzzerSceneFieldEditor,
  120. FuzzerFieldEditorStateEditingOn);
  121. scene_manager_next_scene(app->scene_manager, FuzzerSceneFieldEditor);
  122. FURI_LOG_I(TAG, "Load ok");
  123. break;
  124. case FuzzerWorkerLoadKeyStateBadFile:
  125. fuzzer_scene_main_show_error(app, "Cant load\nor broken file");
  126. FURI_LOG_E(TAG, "Cant load or broken file");
  127. break;
  128. case FuzzerWorkerLoadKeyStateUnsuportedProto:
  129. fuzzer_scene_main_show_error(app, "Unsupported protocol");
  130. FURI_LOG_E(TAG, "Unsupported protocol");
  131. break;
  132. }
  133. }
  134. break;
  135. case FuzzerAttackIdLoadFileCustomUids:
  136. if(!fuzzer_scene_main_load_custom_dict(app)) {
  137. break;
  138. } else {
  139. loading_ok = fuzzer_worker_init_attack_file_dict(
  140. app->worker, app->fuzzer_state.proto_index, app->file_path);
  141. if(!loading_ok) {
  142. fuzzer_scene_main_show_error(app, "Incorrect key format\nor length");
  143. // error
  144. }
  145. }
  146. break;
  147. default:
  148. fuzzer_scene_main_show_error(app, "Unsuported attack");
  149. break;
  150. }
  151. if(loading_ok) {
  152. scene_manager_next_scene(app->scene_manager, FuzzerSceneAttack);
  153. }
  154. consumed = true;
  155. }
  156. }
  157. return consumed;
  158. }
  159. void fuzzer_scene_main_on_exit(void* context) {
  160. // furi_assert(context);
  161. // PacsFuzzerApp* app = context;
  162. UNUSED(context);
  163. }