subbrute_device.h 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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. SubBruteAttackNICE12bit433,
  19. SubBruteAttackNICE12bit868,
  20. SubBruteAttackChamberlain9bit300,
  21. SubBruteAttackChamberlain9bit315,
  22. SubBruteAttackChamberlain9bit390,
  23. SubBruteAttackLinear10bit300,
  24. SubBruteAttackLinear10bit310,
  25. SubBruteAttackLoadFile,
  26. SubBruteAttackTotalCount,
  27. } SubBruteAttacks;
  28. typedef enum {
  29. SubBruteFileResultUnknown,
  30. SubBruteFileResultOk,
  31. SubBruteFileResultErrorOpenFile,
  32. SubBruteFileResultMissingOrIncorrectHeader,
  33. SubBruteFileResultFrequencyNotAllowed,
  34. SubBruteFileResultMissingOrIncorrectFrequency,
  35. SubBruteFileResultPresetInvalid,
  36. SubBruteFileResultMissingProtocol,
  37. SubBruteFileResultProtocolNotSupported,
  38. SubBruteFileResultDynamicProtocolNotValid,
  39. SubBruteFileResultProtocolNotFound,
  40. SubBruteFileResultMissingOrIncorrectBit,
  41. SubBruteFileResultMissingOrIncorrectKey,
  42. SubBruteFileResultMissingOrIncorrectTe,
  43. } SubBruteFileResult;
  44. typedef enum {
  45. SubBruteDeviceStateIDLE,
  46. SubBruteDeviceStateReady,
  47. SubBruteDeviceStateTx,
  48. SubBruteDeviceStateFinished,
  49. } SubBruteDeviceState;
  50. typedef struct {
  51. SubBruteDeviceState state;
  52. // Current step
  53. uint64_t key_index;
  54. string_t load_path;
  55. // Index of group to bruteforce in loaded file
  56. uint8_t load_index;
  57. SubGhzReceiver* receiver;
  58. SubGhzProtocolDecoderBase* decoder_result;
  59. SubGhzEnvironment* environment;
  60. // Attack state
  61. SubBruteAttacks attack;
  62. char file_template[SUBBRUTE_TEXT_STORE_SIZE];
  63. bool has_tail;
  64. char payload[SUBBRUTE_TEXT_STORE_SIZE * 2];
  65. uint64_t max_value;
  66. // Loaded info for attack type
  67. FuriHalSubGhzPreset preset;
  68. string_t preset_name;
  69. string_t protocol_name;
  70. uint32_t frequency;
  71. uint32_t repeat;
  72. uint32_t bit;
  73. char current_key[SUBBRUTE_PAYLOAD_SIZE];
  74. uint32_t te;
  75. char file_key[SUBBRUTE_MAX_LEN_NAME];
  76. char text_store[SUBBRUTE_PAYLOAD_SIZE];
  77. } SubBruteDevice;
  78. SubBruteDevice* subbrute_device_alloc();
  79. void subbrute_device_free(SubBruteDevice* instance);
  80. bool subbrute_device_save_file(SubBruteDevice* instance, const char* key_name);
  81. const char* subbrute_device_error_get_desc(SubBruteFileResult error_id);
  82. bool subbrute_device_create_packet_parsed(SubBruteDevice* context, uint64_t step, bool small);
  83. SubBruteFileResult subbrute_device_attack_set(SubBruteDevice* context, SubBruteAttacks type);
  84. uint8_t subbrute_device_load_from_file(SubBruteDevice* context, string_t file_path);
  85. FuriHalSubGhzPreset subbrute_device_convert_preset(const char* preset);
  86. void subbrute_device_attack_set_default_values(
  87. SubBruteDevice* context,
  88. SubBruteAttacks default_attack);