wifi_marauder_script.h 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. /*
  2. * ----------------------------------------------------------------------------------------------------
  3. * STEPS TO ADD A NEW STAGE:
  4. *
  5. * wifi_marauder_script.h
  6. * - Complement WifiMarauderScriptStageType enum with new stage
  7. * - Create struct WifiMarauderScriptStage???? for the new stage
  8. *
  9. * wifi_marauder_script.c
  10. * - Create function "WifiMarauderScriptStage????* _wifi_marauder_script_get_stage_????(cJSON *stages)"
  11. * - Change _wifi_marauder_script_load_stages() to load new stage
  12. * - Add case to free memory in wifi_marauder_script_free()
  13. *
  14. * wifi_marauder_script_executor.c
  15. * - Create function "void _wifi_marauder_script_execute_????(WifiMarauderScriptStage????* stage)"
  16. * - Add case in wifi_marauder_script_execute_stage()
  17. *
  18. * ----------------------------------------------------------------------------------------------------
  19. * IMPLEMENTED STAGES (In order of execution):
  20. * - Scan
  21. * - Select
  22. * - Deauth
  23. * - Sniff PMKID
  24. * - Beacon List
  25. * ----------------------------------------------------------------------------------------------------
  26. * SCRIPT SYNTAX:
  27. * {
  28. * "meta": {
  29. * "description": "My script",
  30. * "repeat": times the script will repeat (default 1),
  31. * },
  32. * "stages": {
  33. * "scan": {
  34. * "type": "ap" | "station",
  35. * "timeout": seconds,
  36. * "channel": 1-11
  37. * },
  38. * "select": {
  39. * "type": "ap" | "station" | "ssid",
  40. * "filter": "all" | "contains \"{SSID fragment}\" or equals \"{SSID}\" or ..." (Not implemented yet on Marauder firmware)
  41. * },
  42. * "deauth": {
  43. * "timeout": seconds
  44. * },
  45. * "sniffPmkid": {
  46. * "forceDeauth": true (default) | false,
  47. * "channel": 1-11,
  48. * "timeout": seconds
  49. * },
  50. * "beaconlist": {
  51. * "ssids": [
  52. * "SSID 1",
  53. * "SSID 2",
  54. * "SSID 3"
  55. * ],
  56. * "timeout": seconds
  57. * }
  58. * }
  59. * }
  60. * ----------------------------------------------------------------------------------------------------
  61. */
  62. #pragma once
  63. #include <storage/storage.h>
  64. #include "cJSON.h"
  65. typedef enum {
  66. WifiMarauderScriptStageTypeScan,
  67. WifiMarauderScriptStageTypeSelect,
  68. WifiMarauderScriptStageTypeDeauth,
  69. WifiMarauderScriptStageTypeSniffPmkid,
  70. WifiMarauderScriptStageTypeBeaconList,
  71. } WifiMarauderScriptStageType;
  72. typedef enum {
  73. WifiMarauderScriptScanTypeAp,
  74. WifiMarauderScriptScanTypeStation
  75. } WifiMarauderScriptScanType;
  76. typedef enum {
  77. WifiMarauderScriptSelectTypeAp,
  78. WifiMarauderScriptSelectTypeStation,
  79. WifiMarauderScriptSelectTypeSsid
  80. } WifiMarauderScriptSelectType;
  81. // Stages
  82. typedef struct WifiMarauderScriptStage {
  83. WifiMarauderScriptStageType type;
  84. void* stage;
  85. struct WifiMarauderScriptStage *next_stage;
  86. } WifiMarauderScriptStage;
  87. typedef struct WifiMarauderScriptStageScan {
  88. WifiMarauderScriptScanType type;
  89. int channel;
  90. int timeout;
  91. } WifiMarauderScriptStageScan;
  92. typedef struct WifiMarauderScriptStageSelect {
  93. WifiMarauderScriptSelectType type;
  94. char* filter;
  95. // TODO: Implement a feature to not select the same items in the next iteration of the script
  96. bool allow_repeat;
  97. } WifiMarauderScriptStageSelect;
  98. typedef struct WifiMarauderScriptStageDeauth {
  99. int timeout;
  100. } WifiMarauderScriptStageDeauth;
  101. typedef struct WifiMarauderScriptStageSniffPmkid {
  102. bool force_deauth;
  103. int channel;
  104. int timeout;
  105. } WifiMarauderScriptStageSniffPmkid;
  106. typedef struct WifiMarauderScriptStageBeaconList {
  107. char **ssids;
  108. int ssid_count;
  109. int timeout;
  110. } WifiMarauderScriptStageBeaconList;
  111. // Script
  112. typedef struct WifiMarauderScript {
  113. char* name;
  114. char* description;
  115. WifiMarauderScriptStage *first_stage;
  116. int repeat;
  117. } WifiMarauderScript;
  118. WifiMarauderScript* wifi_marauder_script_alloc();
  119. WifiMarauderScript* wifi_marauder_script_parse_raw(const char* script_raw);
  120. WifiMarauderScript* wifi_marauder_script_parse_file(const char* file_path, Storage* storage);
  121. WifiMarauderScriptStage* wifi_marauder_script_get_stage(WifiMarauderScript* script, WifiMarauderScriptStageType stage_type);
  122. void wifi_marauder_script_free(WifiMarauderScript *script);