| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258 |
- /*
- * ----------------------------------------------------------------------------------------------------
- * STEPS TO ADD A NEW STAGE:
- *
- * wifi_marauder_script.h
- * - Complement WifiMarauderScriptStageType enum with new stage
- * - Create struct WifiMarauderScriptStage???? for the new stage
- *
- * wifi_marauder_script.c
- * - Change _wifi_marauder_script_load_stages() to load new stage
- * - Change wifi_marauder_script_save_json() to support the new stage
- * - Add case to free memory in wifi_marauder_script_free()
- *
- * wifi_marauder_script_executor.c
- * - Create function "void _wifi_marauder_script_execute_????(WifiMarauderScriptStage????* stage)"
- * - Add case in wifi_marauder_script_execute_stage()
- *
- * wifi_marauder_scene_script_edit.c
- * - Add case in wifi_marauder_scene_script_edit_on_enter()
- *
- * wifi_marauder_scene_script_stage_add.c
- * - Create stage creation function and add in wifi_marauder_scene_script_stage_add_on_enter()
- *
- * wifi_marauder_script_stage_menu_config.h
- * - Add the new stage and implement its functions in a new file
- *
- * ----------------------------------------------------------------------------------------------------
- * SCRIPT SYNTAX (In order of execution):
- * {
- * "meta": {
- * "description": "My script",
- * "repeat": times the script will repeat (default 1),
- * "enableLed": true (default) | false,
- * "savePcap": true (default) | false
- * },
- * "stages": {
- * "scan": {
- * "type": "ap" | "station",
- * "timeout": seconds,
- * "channel": 1-11
- * },
- * "select": {
- * "type": "ap" | "station" | "ssid",
- * "filter": "all" | "contains -f '{SSID fragment}' or equals '{SSID}' or ...",
- * "indexes": [0, 1, 2, 3...],
- * },
- * "deauth": {
- * "timeout": seconds
- * },
- * "probe": {
- * "timeout": seconds
- * },
- * "sniffRaw": {
- * "timeout": seconds
- * },
- * "sniffBeacon": {
- * "timeout": seconds
- * },
- * "sniffDeauth": {
- * "timeout": seconds
- * },
- * "sniffEsp": {
- * "timeout": seconds
- * },
- * "sniffPmkid": {
- * "forceDeauth": true (default) | false,
- * "channel": 1-11,
- * "timeout": seconds
- * },
- * "sniffPwn": {
- * "timeout": seconds
- * },
- * "beaconList": {
- * "ssids": [
- * "SSID 1",
- * "SSID 2",
- * "SSID 3"
- * ],
- * "generate": number of random SSIDs that will be generated,
- * "timeout": seconds
- * }
- * "beaconAp": {
- * "timeout": seconds
- * }
- * "exec": {
- * "command": Command (eg: "clearlist -a")
- * }
- * "delay": {
- * "timeout": seconds
- * }
- * }
- * }
- *
- * Note: It is possible to inform "stages" as an array, allowing ordering and repetition of stages of the same type:
- * "stages": [
- * {
- * "beaconList": { "ssids": ["SSID 1", "SSID 2"] }
- * },
- * {
- * "beaconList": { "generate": 4 }
- * },
- * ]
- * ----------------------------------------------------------------------------------------------------
- */
- #pragma once
- #include <storage/storage.h>
- #include "cJSON.h"
- #define WIFI_MARAUDER_DEFAULT_TIMEOUT_SCAN 15
- #define WIFI_MARAUDER_DEFAULT_TIMEOUT_DEAUTH 30
- #define WIFI_MARAUDER_DEFAULT_TIMEOUT_PROBE 60
- #define WIFI_MARAUDER_DEFAULT_TIMEOUT_SNIFF 60
- #define WIFI_MARAUDER_DEFAULT_TIMEOUT_BEACON 60
- typedef enum {
- WifiMarauderScriptBooleanFalse = 0,
- WifiMarauderScriptBooleanTrue = 1,
- WifiMarauderScriptBooleanUndefined = 2
- } WifiMarauderScriptBoolean;
- typedef enum {
- WifiMarauderScriptStageTypeScan,
- WifiMarauderScriptStageTypeSelect,
- WifiMarauderScriptStageTypeDeauth,
- WifiMarauderScriptStageTypeProbe,
- WifiMarauderScriptStageTypeSniffRaw,
- WifiMarauderScriptStageTypeSniffBeacon,
- WifiMarauderScriptStageTypeSniffDeauth,
- WifiMarauderScriptStageTypeSniffEsp,
- WifiMarauderScriptStageTypeSniffPmkid,
- WifiMarauderScriptStageTypeSniffPwn,
- WifiMarauderScriptStageTypeBeaconList,
- WifiMarauderScriptStageTypeBeaconAp,
- WifiMarauderScriptStageTypeExec,
- WifiMarauderScriptStageTypeDelay,
- } WifiMarauderScriptStageType;
- typedef enum {
- WifiMarauderScriptScanTypeAp = 0,
- WifiMarauderScriptScanTypeStation = 1
- } WifiMarauderScriptScanType;
- typedef enum {
- WifiMarauderScriptSelectTypeAp,
- WifiMarauderScriptSelectTypeStation,
- WifiMarauderScriptSelectTypeSsid
- } WifiMarauderScriptSelectType;
- // Stages
- typedef struct WifiMarauderScriptStage {
- WifiMarauderScriptStageType type;
- void* stage;
- struct WifiMarauderScriptStage* next_stage;
- } WifiMarauderScriptStage;
- typedef struct WifiMarauderScriptStageScan {
- WifiMarauderScriptScanType type;
- int channel;
- int timeout;
- } WifiMarauderScriptStageScan;
- typedef struct WifiMarauderScriptStageSelect {
- WifiMarauderScriptSelectType type;
- char* filter;
- int* indexes;
- int index_count;
- // TODO: Implement a feature to not select the same items in the next iteration of the script
- bool allow_repeat;
- } WifiMarauderScriptStageSelect;
- typedef struct WifiMarauderScriptStageDeauth {
- int timeout;
- } WifiMarauderScriptStageDeauth;
- typedef struct WifiMarauderScriptStageProbe {
- int timeout;
- } WifiMarauderScriptStageProbe;
- typedef struct WifiMarauderScriptStageSniffRaw {
- int timeout;
- } WifiMarauderScriptStageSniffRaw;
- typedef struct WifiMarauderScriptStageSniffBeacon {
- int timeout;
- } WifiMarauderScriptStageSniffBeacon;
- typedef struct WifiMarauderScriptStageSniffDeauth {
- int timeout;
- } WifiMarauderScriptStageSniffDeauth;
- typedef struct WifiMarauderScriptStageSniffEsp {
- int timeout;
- } WifiMarauderScriptStageSniffEsp;
- typedef struct WifiMarauderScriptStageSniffPmkid {
- bool force_deauth;
- bool hop_channels;
- int channel;
- int timeout;
- } WifiMarauderScriptStageSniffPmkid;
- typedef struct WifiMarauderScriptStageSniffPwn {
- int timeout;
- } WifiMarauderScriptStageSniffPwn;
- typedef struct WifiMarauderScriptStageBeaconList {
- char** ssids;
- int ssid_count;
- int random_ssids;
- int timeout;
- } WifiMarauderScriptStageBeaconList;
- typedef struct WifiMarauderScriptStageBeaconAp {
- int timeout;
- } WifiMarauderScriptStageBeaconAp;
- typedef struct WifiMarauderScriptStageExec {
- char* command;
- } WifiMarauderScriptStageExec;
- typedef struct WifiMarauderScriptStageDelay {
- int timeout;
- } WifiMarauderScriptStageDelay;
- // Script
- typedef struct WifiMarauderScript {
- char* name;
- char* description;
- WifiMarauderScriptStage* first_stage;
- WifiMarauderScriptStage* last_stage;
- WifiMarauderScriptBoolean enable_led;
- WifiMarauderScriptBoolean save_pcap;
- int repeat;
- } WifiMarauderScript;
- typedef struct WifiMarauderScriptStageListItem {
- char* value;
- struct WifiMarauderScriptStageListItem* next_item;
- } WifiMarauderScriptStageListItem;
- WifiMarauderScript* wifi_marauder_script_alloc();
- WifiMarauderScript* wifi_marauder_script_create(const char* script_name);
- WifiMarauderScript* wifi_marauder_script_parse_raw(const char* script_raw);
- WifiMarauderScript* wifi_marauder_script_parse_json(Storage* storage, const char* file_path);
- void wifi_marauder_script_save_json(
- Storage* storage,
- const char* file_path,
- WifiMarauderScript* script);
- void wifi_marauder_script_add_stage(
- WifiMarauderScript* script,
- WifiMarauderScriptStageType stage_type,
- void* stage_data);
- bool wifi_marauder_script_has_stage(
- WifiMarauderScript* script,
- WifiMarauderScriptStageType stage_type);
- void wifi_marauder_script_free(WifiMarauderScript* script);
|