subbrute_device.h 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #pragma once
  2. #include "subbrute_protocols.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. SubBruteFileResultUnknown,
  14. SubBruteFileResultOk,
  15. SubBruteFileResultErrorOpenFile,
  16. SubBruteFileResultMissingOrIncorrectHeader,
  17. SubBruteFileResultFrequencyNotAllowed,
  18. SubBruteFileResultMissingOrIncorrectFrequency,
  19. SubBruteFileResultPresetInvalid,
  20. SubBruteFileResultMissingProtocol,
  21. SubBruteFileResultProtocolNotSupported,
  22. SubBruteFileResultDynamicProtocolNotValid,
  23. SubBruteFileResultProtocolNotFound,
  24. SubBruteFileResultMissingOrIncorrectBit,
  25. SubBruteFileResultMissingOrIncorrectKey,
  26. SubBruteFileResultMissingOrIncorrectTe,
  27. } SubBruteFileResult;
  28. typedef struct {
  29. const SubBruteProtocol* protocol_info;
  30. SubBruteProtocol* file_protocol_info;
  31. // Current step
  32. uint64_t current_step;
  33. // SubGhz
  34. SubGhzReceiver* receiver;
  35. SubGhzProtocolDecoderBase* decoder_result;
  36. SubGhzEnvironment* environment;
  37. // Attack state
  38. SubBruteAttacks attack;
  39. uint64_t max_value;
  40. uint8_t extra_repeats;
  41. // Loaded info for attack type
  42. char current_key[SUBBRUTE_PAYLOAD_SIZE];
  43. uint64_t key_from_file;
  44. uint64_t current_key_from_file;
  45. bool two_bytes;
  46. // Index of group to bruteforce in loaded file
  47. uint8_t bit_index;
  48. } SubBruteDevice;
  49. SubBruteDevice* subbrute_device_alloc();
  50. void subbrute_device_free(SubBruteDevice* instance);
  51. bool subbrute_device_save_file(SubBruteDevice* instance, const char* key_name);
  52. const char* subbrute_device_error_get_desc(SubBruteFileResult error_id);
  53. SubBruteFileResult subbrute_device_attack_set(
  54. SubBruteDevice* context,
  55. SubBruteAttacks type,
  56. uint8_t extra_repeats);
  57. uint8_t subbrute_device_load_from_file(SubBruteDevice* context, const char* file_path);
  58. uint64_t subbrute_device_add_step(SubBruteDevice* instance, int8_t step);
  59. void subbrute_device_free_protocol_info(SubBruteDevice* instance);
  60. void subbrute_device_attack_set_default_values(
  61. SubBruteDevice* context,
  62. SubBruteAttacks default_attack);