wifi_marauder_script.h 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  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. * - Change _wifi_marauder_script_load_stages() to load new stage
  11. * - Change wifi_marauder_script_save_json() to support the 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. * - Beacon Random
  32. * - Beacon Ap
  33. * ----------------------------------------------------------------------------------------------------
  34. * SCRIPT SYNTAX:
  35. * {
  36. * "meta": {
  37. * "description": "My script",
  38. * "repeat": times the script will repeat (default 1),
  39. * "enableLed": true (default) | false,
  40. * "savePcap": true (default) | false
  41. * },
  42. * "stages": {
  43. * "scan": {
  44. * "type": "ap" | "station",
  45. * "timeout": seconds,
  46. * "channel": 1-11
  47. * },
  48. * "select": {
  49. * "type": "ap" | "station" | "ssid",
  50. * "filter": "all" | "contains -f '{SSID fragment}' or equals '{SSID}' or ...",
  51. * "index": index number,
  52. * "indexes": [0, 1, 2, 3...],
  53. * },
  54. * "deauth": {
  55. * "timeout": seconds
  56. * },
  57. * "probe": {
  58. * "timeout": seconds
  59. * },
  60. * "sniffRaw": {
  61. * "timeout": seconds
  62. * },
  63. * "sniffBeacon": {
  64. * "timeout": seconds
  65. * },
  66. * "sniffDeauth": {
  67. * "timeout": seconds
  68. * },
  69. * "sniffEsp": {
  70. * "timeout": seconds
  71. * },
  72. * "sniffPmkid": {
  73. * "forceDeauth": true (default) | false,
  74. * "channel": 1-11,
  75. * "timeout": seconds
  76. * },
  77. * "sniffPwn": {
  78. * "timeout": seconds
  79. * },
  80. * "beaconList": {
  81. * "ssids": [
  82. * "SSID 1",
  83. * "SSID 2",
  84. * "SSID 3"
  85. * ],
  86. * "generate": number of random SSIDs that will be generated,
  87. * "timeout": seconds
  88. * }
  89. * "beaconAp": {
  90. * "timeout": seconds
  91. * }
  92. * }
  93. * }
  94. *
  95. * Note: It is possible to inform "stages" as an array, allowing ordering and repetition of stages of the same type:
  96. * "stages": [
  97. * {
  98. * "beaconList": { "ssids": ["SSID 1", "SSID 2"] }
  99. * },
  100. * {
  101. * "beaconList": { "generate": 4 }
  102. * },
  103. * ]
  104. * ----------------------------------------------------------------------------------------------------
  105. */
  106. #pragma once
  107. #include <storage/storage.h>
  108. #include "cJSON.h"
  109. typedef enum {
  110. WifiMarauderScriptBooleanFalse = 0,
  111. WifiMarauderScriptBooleanTrue = 1,
  112. WifiMarauderScriptBooleanUndefined = 2
  113. } WifiMarauderScriptBoolean;
  114. typedef enum {
  115. WifiMarauderScriptStageTypeScan,
  116. WifiMarauderScriptStageTypeSelect,
  117. WifiMarauderScriptStageTypeDeauth,
  118. WifiMarauderScriptStageTypeProbe,
  119. WifiMarauderScriptStageTypeSniffRaw,
  120. WifiMarauderScriptStageTypeSniffBeacon,
  121. WifiMarauderScriptStageTypeSniffDeauth,
  122. WifiMarauderScriptStageTypeSniffEsp,
  123. WifiMarauderScriptStageTypeSniffPmkid,
  124. WifiMarauderScriptStageTypeSniffPwn,
  125. WifiMarauderScriptStageTypeBeaconList,
  126. WifiMarauderScriptStageTypeBeaconAp,
  127. } WifiMarauderScriptStageType;
  128. typedef enum {
  129. WifiMarauderScriptScanTypeAp,
  130. WifiMarauderScriptScanTypeStation
  131. } WifiMarauderScriptScanType;
  132. typedef enum {
  133. WifiMarauderScriptSelectTypeAp,
  134. WifiMarauderScriptSelectTypeStation,
  135. WifiMarauderScriptSelectTypeSsid
  136. } WifiMarauderScriptSelectType;
  137. // Stages
  138. typedef struct WifiMarauderScriptStage {
  139. WifiMarauderScriptStageType type;
  140. void* stage;
  141. struct WifiMarauderScriptStage *next_stage;
  142. } WifiMarauderScriptStage;
  143. typedef struct WifiMarauderScriptStageScan {
  144. WifiMarauderScriptScanType type;
  145. int channel;
  146. int timeout;
  147. } WifiMarauderScriptStageScan;
  148. typedef struct WifiMarauderScriptStageSelect {
  149. WifiMarauderScriptSelectType type;
  150. char* filter;
  151. int* indexes;
  152. // TODO: Implement a feature to not select the same items in the next iteration of the script
  153. bool allow_repeat;
  154. } WifiMarauderScriptStageSelect;
  155. typedef struct WifiMarauderScriptStageDeauth {
  156. int timeout;
  157. } WifiMarauderScriptStageDeauth;
  158. typedef struct WifiMarauderScriptStageProbe {
  159. int timeout;
  160. } WifiMarauderScriptStageProbe;
  161. typedef struct WifiMarauderScriptStageSniffRaw {
  162. int timeout;
  163. } WifiMarauderScriptStageSniffRaw;
  164. typedef struct WifiMarauderScriptStageSniffBeacon {
  165. int timeout;
  166. } WifiMarauderScriptStageSniffBeacon;
  167. typedef struct WifiMarauderScriptStageSniffDeauth {
  168. int timeout;
  169. } WifiMarauderScriptStageSniffDeauth;
  170. typedef struct WifiMarauderScriptStageSniffEsp {
  171. int timeout;
  172. } WifiMarauderScriptStageSniffEsp;
  173. typedef struct WifiMarauderScriptStageSniffPmkid {
  174. bool force_deauth;
  175. int channel;
  176. int timeout;
  177. } WifiMarauderScriptStageSniffPmkid;
  178. typedef struct WifiMarauderScriptStageSniffPwn {
  179. int timeout;
  180. } WifiMarauderScriptStageSniffPwn;
  181. typedef struct WifiMarauderScriptStageBeaconList {
  182. char **ssids;
  183. int ssid_count;
  184. int random_ssids;
  185. int timeout;
  186. } WifiMarauderScriptStageBeaconList;
  187. typedef struct WifiMarauderScriptStageBeaconAp {
  188. int timeout;
  189. } WifiMarauderScriptStageBeaconAp;
  190. // Script
  191. typedef struct WifiMarauderScript {
  192. char* name;
  193. char* description;
  194. WifiMarauderScriptStage *first_stage;
  195. WifiMarauderScriptStage *last_stage;
  196. WifiMarauderScriptBoolean enable_led;
  197. WifiMarauderScriptBoolean save_pcap;
  198. int repeat;
  199. } WifiMarauderScript;
  200. WifiMarauderScript* wifi_marauder_script_alloc();
  201. WifiMarauderScript* wifi_marauder_script_create(const char* script_name);
  202. WifiMarauderScript* wifi_marauder_script_parse_raw(const char* script_raw);
  203. WifiMarauderScript* wifi_marauder_script_parse_json(Storage* storage, const char* file_path);
  204. void wifi_marauder_script_save_json(Storage* storage, const char* file_path, WifiMarauderScript* script);
  205. void wifi_marauder_script_add_stage(WifiMarauderScript* script, WifiMarauderScriptStageType stage_type, void* stage_data);
  206. bool wifi_marauder_script_has_stage(WifiMarauderScript* script, WifiMarauderScriptStageType stage_type);
  207. void wifi_marauder_script_free(WifiMarauderScript *script);