subbrute_device.h 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. #pragma once
  2. #include "subbrute_device_i.h"
  3. #include <lib/subghz/protocols/base.h>
  4. #include <lib/subghz/transmitter.h>
  5. #include <lib/subghz/receiver.h>
  6. #include <lib/subghz/environment.h>
  7. #define SUBBRUTE_TEXT_STORE_SIZE 256
  8. #define SUBBRUTE_MAX_LEN_NAME 64
  9. #define SUBBRUTE_PATH EXT_PATH("subghz")
  10. #define SUBBRUTE_FILE_EXT ".sub"
  11. #define SUBBRUTE_PAYLOAD_SIZE 16
  12. typedef enum {
  13. SubBruteAttackCAME12bit303,
  14. SubBruteAttackCAME12bit307,
  15. SubBruteAttackCAME12bit433,
  16. SubBruteAttackCAME12bit868,
  17. SubBruteAttackNICE12bit433,
  18. SubBruteAttackNICE12bit868,
  19. SubBruteAttackChamberlain9bit300,
  20. SubBruteAttackChamberlain9bit315,
  21. SubBruteAttackChamberlain9bit390,
  22. SubBruteAttackLinear10bit300,
  23. SubBruteAttackLinear10bit310,
  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. SubBruteFileResultBigBitSize,
  43. } SubBruteFileResult;
  44. typedef enum {
  45. SubBruteDeviceStateIDLE,
  46. SubBruteDeviceStateReady,
  47. SubBruteDeviceStateTx,
  48. SubBruteDeviceStateFinished,
  49. } SubBruteDeviceState;
  50. typedef struct {
  51. SubBruteDeviceState state;
  52. SubBruteProtocol* protocol_info;
  53. volatile bool worker_running;
  54. // Current step
  55. uint64_t key_index;
  56. // Index of group to bruteforce in loaded file
  57. uint8_t load_index;
  58. // SubGhz
  59. FuriThread* thread;
  60. SubGhzReceiver* receiver;
  61. SubGhzProtocolDecoderBase* decoder_result;
  62. SubGhzEnvironment* environment;
  63. SubGhzTransmitter* transmitter;
  64. // Attack state
  65. SubBruteAttacks attack;
  66. char file_template[SUBBRUTE_TEXT_STORE_SIZE];
  67. uint64_t max_value;
  68. // Loaded info for attack type
  69. char current_key[SUBBRUTE_PAYLOAD_SIZE];
  70. char file_key[SUBBRUTE_MAX_LEN_NAME];
  71. // Manual transmit
  72. uint32_t last_time_tx_data;
  73. // Callback for changed states
  74. SubBruteDeviceWorkerCallback callback;
  75. void* context;
  76. };
  77. /*
  78. * PRIVATE METHODS
  79. */
  80. void subbrute_device_free_protocol_info(SubBruteDevice* instance);
  81. int32_t subbrute_worker_thread(void* context);
  82. void subbrute_device_attack_set_default_values(
  83. SubBruteDevice* context,
  84. SubBruteAttacks default_attack);
  85. bool subbrute_device_create_packet_parsed(
  86. SubBruteDevice* instance,
  87. FlipperFormat* flipper_format,
  88. uint64_t step,
  89. bool small);
  90. void subbrute_device_send_callback(SubBruteDevice* instance);
  91. void subbrute_device_subghz_transmit(SubBruteDevice* instance, FlipperFormat* flipper_format);