key_generator.c 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. #include <furi.h>
  2. #include <furi_hal.h>
  3. #include <gui/gui.h>
  4. #include <input/input.h>
  5. #include <dialogs/dialogs.h>
  6. #include <storage/storage.h>
  7. #include <flipper_format/flipper_format.h>
  8. #include <notification/notification.h>
  9. #include <notification/notification_messages.h>
  10. #include "key_generator_icons.h"
  11. #define DIR_PATH "/ext/lfrfid_fuzzer"
  12. #define FILE_PATH "/ext/lfrfid_fuzzer/em4100_gen.txt"
  13. FuriString* file_path;
  14. FuriString* key;
  15. // Screen is 128x64 px
  16. static void app_draw_callback(Canvas* canvas, void* ctx) {
  17. UNUSED(ctx);
  18. canvas_clear(canvas);
  19. canvas_draw_icon(canvas, 0, 0, &I_ok_64x64);
  20. canvas_draw_str(canvas, 74, 24, "Saved as");
  21. canvas_draw_str(canvas, 65, 36, "lfrfid_fuzzer/");
  22. canvas_draw_str(canvas, 56, 48, "em4100_gen.txt");
  23. }
  24. static void app_input_callback(InputEvent* input_event, void* ctx) {
  25. furi_assert(ctx);
  26. FuriMessageQueue* event_queue = ctx;
  27. furi_message_queue_put(event_queue, input_event, FuriWaitForever);
  28. }
  29. static void beep() {
  30. NotificationApp* notification = furi_record_open(RECORD_NOTIFICATION);
  31. notification_message(notification, &sequence_success);
  32. furi_record_close(RECORD_NOTIFICATION);
  33. }
  34. int32_t key_generator_main(void* p) {
  35. UNUSED(p);
  36. FuriMessageQueue* event_queue = furi_message_queue_alloc(8, sizeof(InputEvent));
  37. // Configure view port
  38. ViewPort* view_port = view_port_alloc();
  39. view_port_draw_callback_set(view_port, app_draw_callback, view_port);
  40. view_port_input_callback_set(view_port, app_input_callback, event_queue);
  41. // Register view port in GUI
  42. Gui* gui = furi_record_open(RECORD_GUI);
  43. gui_add_view_port(gui, view_port, GuiLayerFullscreen);
  44. // Selecting file
  45. file_path = furi_string_alloc_set_str("/ext/lfrfid");
  46. key = furi_string_alloc_set_str("");
  47. DialogsFileBrowserOptions browser_options;
  48. dialog_file_browser_set_basic_options(&browser_options, ".rfid", &I_icon_10x10);
  49. browser_options.base_path = "/ext/lfrfid";
  50. DialogsApp* dialogs = furi_record_open(RECORD_DIALOGS);
  51. bool running = dialog_file_browser_show(dialogs, file_path, file_path, &browser_options);
  52. furi_record_close(RECORD_DIALOGS);
  53. if(running) {
  54. Storage* storage = furi_record_open(RECORD_STORAGE);
  55. FlipperFormat* format = flipper_format_file_alloc(storage);
  56. // Parsing file
  57. flipper_format_file_open_existing(format, furi_string_get_cstr(file_path));
  58. flipper_format_read_string(format, "Data", key);
  59. furi_string_replace_str(key, " ", "", 0);
  60. flipper_format_file_close(format);
  61. flipper_format_free(format);
  62. if(!storage_dir_exists(storage, DIR_PATH)) storage_simply_mkdir(storage, DIR_PATH);
  63. File* file = storage_file_alloc(storage);
  64. bool ok = storage_file_open(file, FILE_PATH, FSAM_WRITE, FSOM_OPEN_ALWAYS);
  65. if(ok) {
  66. storage_file_write(file, (uint8_t*)furi_string_get_cstr(key), 2);
  67. storage_file_write(file, (uint8_t*)"11111111\r\n", 10);
  68. storage_file_write(file, (uint8_t*)furi_string_get_cstr(key), 2);
  69. storage_file_write(file, (uint8_t*)"22222222\r\n", 10);
  70. storage_file_write(file, (uint8_t*)furi_string_get_cstr(key), 2);
  71. storage_file_write(file, (uint8_t*)"33333333\r\n", 10);
  72. storage_file_write(file, (uint8_t*)furi_string_get_cstr(key), 2);
  73. storage_file_write(file, (uint8_t*)"44444444\r\n", 10);
  74. storage_file_write(file, (uint8_t*)furi_string_get_cstr(key), 2);
  75. storage_file_write(file, (uint8_t*)"55555555\r\n", 10);
  76. storage_file_write(file, (uint8_t*)furi_string_get_cstr(key), 2);
  77. storage_file_write(file, (uint8_t*)"66666666\r\n", 10);
  78. storage_file_write(file, (uint8_t*)furi_string_get_cstr(key), 2);
  79. storage_file_write(file, (uint8_t*)"77777777\r\n", 10);
  80. storage_file_write(file, (uint8_t*)furi_string_get_cstr(key), 2);
  81. storage_file_write(file, (uint8_t*)"88888888\r\n", 10);
  82. storage_file_write(file, (uint8_t*)furi_string_get_cstr(key), 2);
  83. storage_file_write(file, (uint8_t*)"99999999\r\n", 10);
  84. storage_file_write(file, (uint8_t*)furi_string_get_cstr(key), 2);
  85. storage_file_write(file, (uint8_t*)"AAAAAAAA\r\n", 10);
  86. storage_file_write(file, (uint8_t*)furi_string_get_cstr(key), 2);
  87. storage_file_write(file, (uint8_t*)"BBBBBBBB\r\n", 10);
  88. storage_file_write(file, (uint8_t*)furi_string_get_cstr(key), 2);
  89. storage_file_write(file, (uint8_t*)"CCCCCCCC\r\n", 10);
  90. storage_file_write(file, (uint8_t*)furi_string_get_cstr(key), 2);
  91. storage_file_write(file, (uint8_t*)"DDDDDDDD\r\n", 10);
  92. storage_file_write(file, (uint8_t*)furi_string_get_cstr(key), 2);
  93. storage_file_write(file, (uint8_t*)"EEEEEEEE\r\n", 10);
  94. storage_file_write(file, (uint8_t*)furi_string_get_cstr(key), 2);
  95. storage_file_write(file, (uint8_t*)"FFFFFFFF\r\n", 10);
  96. storage_file_write(file, (uint8_t*)furi_string_get_cstr(key), 2);
  97. storage_file_write(file, (uint8_t*)"12345678\r\n", 10);
  98. storage_file_write(file, (uint8_t*)furi_string_get_cstr(key), 2);
  99. storage_file_write(file, (uint8_t*)"01234567\r\n", 10);
  100. storage_file_write(file, (uint8_t*)furi_string_get_cstr(key), 2);
  101. storage_file_write(file, (uint8_t*)"98765432\r\n", 10);
  102. storage_file_write(file, (uint8_t*)furi_string_get_cstr(key), 2);
  103. storage_file_write(file, (uint8_t*)"FEDCBA98\r\n", 10);
  104. storage_file_write(file, (uint8_t*)furi_string_get_cstr(key), 4);
  105. storage_file_write(file, (uint8_t*)"111111\r\n", 8);
  106. storage_file_write(file, (uint8_t*)furi_string_get_cstr(key), 4);
  107. storage_file_write(file, (uint8_t*)"222222\r\n", 8);
  108. storage_file_write(file, (uint8_t*)furi_string_get_cstr(key), 4);
  109. storage_file_write(file, (uint8_t*)"333333\r\n", 8);
  110. storage_file_write(file, (uint8_t*)furi_string_get_cstr(key), 4);
  111. storage_file_write(file, (uint8_t*)"444444\r\n", 8);
  112. storage_file_write(file, (uint8_t*)furi_string_get_cstr(key), 4);
  113. storage_file_write(file, (uint8_t*)"555555\r\n", 8);
  114. storage_file_write(file, (uint8_t*)furi_string_get_cstr(key), 4);
  115. storage_file_write(file, (uint8_t*)"666666\r\n", 8);
  116. storage_file_write(file, (uint8_t*)furi_string_get_cstr(key), 4);
  117. storage_file_write(file, (uint8_t*)"777777\r\n", 8);
  118. storage_file_write(file, (uint8_t*)furi_string_get_cstr(key), 4);
  119. storage_file_write(file, (uint8_t*)"888888\r\n", 8);
  120. storage_file_write(file, (uint8_t*)furi_string_get_cstr(key), 4);
  121. storage_file_write(file, (uint8_t*)"999999\r\n", 8);
  122. storage_file_write(file, (uint8_t*)furi_string_get_cstr(key), 4);
  123. storage_file_write(file, (uint8_t*)"AAAAAA\r\n", 8);
  124. storage_file_write(file, (uint8_t*)furi_string_get_cstr(key), 4);
  125. storage_file_write(file, (uint8_t*)"BBBBBB\r\n", 8);
  126. storage_file_write(file, (uint8_t*)furi_string_get_cstr(key), 4);
  127. storage_file_write(file, (uint8_t*)"CCCCCC\r\n", 8);
  128. storage_file_write(file, (uint8_t*)furi_string_get_cstr(key), 4);
  129. storage_file_write(file, (uint8_t*)"DDDDDD\r\n", 8);
  130. storage_file_write(file, (uint8_t*)furi_string_get_cstr(key), 4);
  131. storage_file_write(file, (uint8_t*)"EEEEEE\r\n", 8);
  132. storage_file_write(file, (uint8_t*)furi_string_get_cstr(key), 4);
  133. storage_file_write(file, (uint8_t*)"FFFFFF\r\n", 8);
  134. storage_file_write(file, (uint8_t*)furi_string_get_cstr(key), 4);
  135. storage_file_write(file, (uint8_t*)"123456\r\n", 8);
  136. storage_file_write(file, (uint8_t*)furi_string_get_cstr(key), 4);
  137. storage_file_write(file, (uint8_t*)"012345\r\n", 8);
  138. storage_file_write(file, (uint8_t*)furi_string_get_cstr(key), 4);
  139. storage_file_write(file, (uint8_t*)"987654\r\n", 8);
  140. storage_file_write(file, (uint8_t*)furi_string_get_cstr(key), 4);
  141. storage_file_write(file, (uint8_t*)"FEDCBA\r\n", 8);
  142. }
  143. storage_file_close(file);
  144. storage_file_free(file);
  145. furi_record_close(RECORD_STORAGE);
  146. beep();
  147. }
  148. InputEvent event;
  149. while(running) {
  150. if(furi_message_queue_get(event_queue, &event, 100) == FuriStatusOk) {
  151. if(event.type == InputTypePress && event.key == InputKeyBack) running = false;
  152. }
  153. view_port_update(view_port);
  154. }
  155. view_port_enabled_set(view_port, false);
  156. gui_remove_view_port(gui, view_port);
  157. view_port_free(view_port);
  158. furi_message_queue_free(event_queue);
  159. furi_record_close(RECORD_GUI);
  160. return 0;
  161. }