#ifndef _METERPRETER_SOURCE_COMMON_PACKET_ENCRYPTION_H #define _METERPRETER_SOURCE_COMMON_PACKET_ENCRYPTION_H #include <Windows.h> #define AES256_BLOCKSIZE 16 #define ENC_FLAG_NONE 0x0 #define ENC_FLAG_AES256 0x1 typedef struct _Aes256Key { BLOBHEADER header; DWORD length; BYTE key[256/8]; } Aes256Key; typedef struct _PacketEncryptionContext { HCRYPTPROV provider; HCRYPTKEY aes_key; int provider_idx; BOOL valid; Aes256Key key_data; BOOL enabled; } PacketEncryptionContext; typedef struct _Remote Remote; typedef struct _Packet Packet; DWORD decrypt_packet(Remote* remote, Packet** packet, LPBYTE buffer, DWORD bufferSize); DWORD encrypt_packet(Remote* remote, Packet* packet, LPBYTE* buffer, LPDWORD bufferSize); DWORD request_negotiate_aes_key(Remote* remote, Packet* packet); DWORD free_encryption_context(Remote* remote); #endif