mirror of
https://github.com/DarkFlippers/unleashed-firmware.git
synced 2024-12-23 13:21:44 +03:00
258 lines
7.7 KiB
C
258 lines
7.7 KiB
C
|
/*
|
||
|
* ----------------------------------------------------------------------------------------------------
|
||
|
* 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;
|
||
|
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);
|