wifi_marauder_script.h 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  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. * - Probe
  24. * - Sniff raw
  25. * - Sniff beacon
  26. * - Sniff deauth
  27. * - Sniff Espressif
  28. * - Sniff PMKID
  29. * - Sniff Pwnagotchi
  30. * - Beacon List
  31. * ----------------------------------------------------------------------------------------------------
  32. * SCRIPT SYNTAX:
  33. * {
  34. * "meta": {
  35. * "description": "My script",
  36. * "repeat": times the script will repeat (default 1),
  37. * "enableLed": true (default) | false,
  38. * "savePcap": true (default) | false
  39. * },
  40. * "stages": {
  41. * "scan": {
  42. * "type": "ap" | "station",
  43. * "timeout": seconds,
  44. * "channel": 1-11
  45. * },
  46. * "select": {
  47. * "type": "ap" | "station" | "ssid",
  48. * "filter": "all" | "contains \"{SSID fragment}\" or equals \"{SSID}\" or ..." (Not implemented yet on Marauder firmware)
  49. * },
  50. * "deauth": {
  51. * "timeout": seconds
  52. * },
  53. * "probe": {
  54. * "timeout": seconds
  55. * },
  56. * "sniffRaw": {
  57. * "timeout": seconds
  58. * },
  59. * "sniffBeacon": {
  60. * "timeout": seconds
  61. * },
  62. * "sniffDeauth": {
  63. * "timeout": seconds
  64. * },
  65. * "sniffEsp": {
  66. * "timeout": seconds
  67. * },
  68. * "sniffPmkid": {
  69. * "forceDeauth": true (default) | false,
  70. * "channel": 1-11,
  71. * "timeout": seconds
  72. * },
  73. * "sniffPwn": {
  74. * "timeout": seconds
  75. * },
  76. * "beaconlist": {
  77. * "ssids": [
  78. * "SSID 1",
  79. * "SSID 2",
  80. * "SSID 3"
  81. * ],
  82. * "timeout": seconds
  83. * }
  84. * }
  85. * }
  86. * ----------------------------------------------------------------------------------------------------
  87. */
  88. #pragma once
  89. #include <storage/storage.h>
  90. #include "cJSON.h"
  91. typedef enum {
  92. WifiMarauderScriptStageTypeScan,
  93. WifiMarauderScriptStageTypeSelect,
  94. WifiMarauderScriptStageTypeDeauth,
  95. WifiMarauderScriptStageTypeProbe,
  96. WifiMarauderScriptStageTypeSniffRaw,
  97. WifiMarauderScriptStageTypeSniffBeacon,
  98. WifiMarauderScriptStageTypeSniffDeauth,
  99. WifiMarauderScriptStageTypeSniffEsp,
  100. WifiMarauderScriptStageTypeSniffPmkid,
  101. WifiMarauderScriptStageTypeSniffPwn,
  102. WifiMarauderScriptStageTypeBeaconList,
  103. } WifiMarauderScriptStageType;
  104. typedef enum {
  105. WifiMarauderScriptScanTypeAp,
  106. WifiMarauderScriptScanTypeStation
  107. } WifiMarauderScriptScanType;
  108. typedef enum {
  109. WifiMarauderScriptSelectTypeAp,
  110. WifiMarauderScriptSelectTypeStation,
  111. WifiMarauderScriptSelectTypeSsid
  112. } WifiMarauderScriptSelectType;
  113. // Stages
  114. typedef struct WifiMarauderScriptStage {
  115. WifiMarauderScriptStageType type;
  116. void* stage;
  117. struct WifiMarauderScriptStage *next_stage;
  118. } WifiMarauderScriptStage;
  119. typedef struct WifiMarauderScriptStageScan {
  120. WifiMarauderScriptScanType type;
  121. int channel;
  122. int timeout;
  123. } WifiMarauderScriptStageScan;
  124. typedef struct WifiMarauderScriptStageSelect {
  125. WifiMarauderScriptSelectType type;
  126. char* filter;
  127. // TODO: Implement a feature to not select the same items in the next iteration of the script
  128. bool allow_repeat;
  129. } WifiMarauderScriptStageSelect;
  130. typedef struct WifiMarauderScriptStageDeauth {
  131. int timeout;
  132. } WifiMarauderScriptStageDeauth;
  133. typedef struct WifiMarauderScriptStageProbe {
  134. int timeout;
  135. } WifiMarauderScriptStageProbe;
  136. typedef struct WifiMarauderScriptStageSniffRaw {
  137. int timeout;
  138. } WifiMarauderScriptStageSniffRaw;
  139. typedef struct WifiMarauderScriptStageSniffBeacon {
  140. int timeout;
  141. } WifiMarauderScriptStageSniffBeacon;
  142. typedef struct WifiMarauderScriptStageSniffDeauth {
  143. int timeout;
  144. } WifiMarauderScriptStageSniffDeauth;
  145. typedef struct WifiMarauderScriptStageSniffEsp {
  146. int timeout;
  147. } WifiMarauderScriptStageSniffEsp;
  148. typedef struct WifiMarauderScriptStageSniffPmkid {
  149. bool force_deauth;
  150. int channel;
  151. int timeout;
  152. } WifiMarauderScriptStageSniffPmkid;
  153. typedef struct WifiMarauderScriptStageSniffPwn {
  154. int timeout;
  155. } WifiMarauderScriptStageSniffPwn;
  156. typedef struct WifiMarauderScriptStageBeaconList {
  157. char **ssids;
  158. int ssid_count;
  159. int timeout;
  160. } WifiMarauderScriptStageBeaconList;
  161. // Script
  162. typedef struct WifiMarauderScript {
  163. char* name;
  164. char* description;
  165. WifiMarauderScriptStage *first_stage;
  166. // TODO: Think of a way to not change the settings if they are not informed in the JSON
  167. bool enable_led;
  168. bool save_pcap;
  169. int repeat;
  170. } WifiMarauderScript;
  171. WifiMarauderScript* wifi_marauder_script_alloc();
  172. WifiMarauderScript* wifi_marauder_script_parse_raw(const char* script_raw);
  173. WifiMarauderScript* wifi_marauder_script_parse_file(const char* file_path, Storage* storage);
  174. WifiMarauderScriptStage* wifi_marauder_script_get_stage(WifiMarauderScript* script, WifiMarauderScriptStageType stage_type);
  175. void wifi_marauder_script_free(WifiMarauderScript *script);