subbrute_device.h 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. #pragma once
  2. #include <lib/toolbox/stream/stream.h>
  3. #include <gui/gui.h>
  4. #include <dialogs/dialogs.h>
  5. #include <lib/subghz/protocols/base.h>
  6. #include <lib/subghz/transmitter.h>
  7. #include <lib/subghz/receiver.h>
  8. #include <lib/subghz/environment.h>
  9. #define SUBBRUTE_TEXT_STORE_SIZE 256
  10. #define SUBBRUTE_MAX_LEN_NAME 64
  11. #define SUBBRUTE_PATH EXT_PATH("subghz")
  12. #define SUBBRUTE_FILE_EXT ".sub"
  13. #define SUBBRUTE_PAYLOAD_SIZE 16
  14. typedef enum {
  15. SubBruteAttackCAME12bit307,
  16. SubBruteAttackCAME12bit433,
  17. SubBruteAttackCAME12bit868,
  18. SubBruteAttackChamberlain9bit315,
  19. SubBruteAttackChamberlain9bit390,
  20. SubBruteAttackLinear10bit300,
  21. SubBruteAttackLinear10bit310,
  22. SubBruteAttackNICE12bit433,
  23. SubBruteAttackNICE12bit868,
  24. SubBruteAttackLoadFile,
  25. SubBruteAttackTotalCount,
  26. } SubBruteAttacks;
  27. typedef enum {
  28. SubBruteFileResultUnknown,
  29. SubBruteFileResultOk,
  30. SubBruteFileResultErrorOpenFile,
  31. SubBruteFileResultMissingOrIncorrectHeader,
  32. SubBruteFileResultFrequencyNotAllowed,
  33. SubBruteFileResultMissingOrIncorrectFrequency,
  34. SubBruteFileResultPresetInvalid,
  35. SubBruteFileResultMissingProtocol,
  36. SubBruteFileResultProtocolNotSupported,
  37. SubBruteFileResultDynamicProtocolNotValid,
  38. SubBruteFileResultProtocolNotFound,
  39. SubBruteFileResultMissingOrIncorrectBit,
  40. SubBruteFileResultMissingOrIncorrectKey,
  41. SubBruteFileResultMissingOrIncorrectTe,
  42. } SubBruteFileResult;
  43. typedef enum {
  44. SubBruteDeviceStateIDLE,
  45. SubBruteDeviceStateReady,
  46. SubBruteDeviceStateTx,
  47. SubBruteDeviceStateFinished,
  48. } SubBruteDeviceState;
  49. typedef struct {
  50. SubBruteDeviceState state;
  51. // Current step
  52. uint64_t key_index;
  53. string_t load_path;
  54. // Index of group to bruteforce in loaded file
  55. uint8_t load_index;
  56. SubGhzReceiver* receiver;
  57. SubGhzProtocolDecoderBase* decoder_result;
  58. SubGhzEnvironment* environment;
  59. // Attack state
  60. SubBruteAttacks attack;
  61. char file_template[SUBBRUTE_TEXT_STORE_SIZE];
  62. bool has_tail;
  63. char payload[SUBBRUTE_TEXT_STORE_SIZE * 2];
  64. uint64_t max_value;
  65. // Loaded info for attack type
  66. FuriHalSubGhzPreset preset;
  67. string_t preset_name;
  68. string_t protocol_name;
  69. uint32_t frequency;
  70. uint32_t repeat;
  71. uint32_t bit;
  72. char current_key[SUBBRUTE_PAYLOAD_SIZE];
  73. uint32_t te;
  74. char file_key[SUBBRUTE_MAX_LEN_NAME];
  75. char text_store[SUBBRUTE_PAYLOAD_SIZE];
  76. } SubBruteDevice;
  77. SubBruteDevice* subbrute_device_alloc();
  78. void subbrute_device_free(SubBruteDevice* instance);
  79. bool subbrute_device_save_file(SubBruteDevice* instance, const char* key_name);
  80. const char* subbrute_device_error_get_desc(SubBruteFileResult error_id);
  81. bool subbrute_device_create_packet_parsed(SubBruteDevice* context, uint64_t step, bool small);
  82. SubBruteFileResult subbrute_device_attack_set(SubBruteDevice* context, SubBruteAttacks type);
  83. uint8_t subbrute_device_load_from_file(SubBruteDevice* context, string_t file_path);
  84. FuriHalSubGhzPreset subbrute_device_convert_preset(const char* preset);
  85. void subbrute_device_attack_set_default_values(SubBruteDevice* context, SubBruteAttacks default_attack);