wifi_marauder_script.h 7.8 KB

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