#pragma once #include #include #include "..\commons.h" void xor32( uint8_t* buf, size_t bufSize, uint32_t xorKey ); void xor8( uint8_t* buf, size_t bufSize, uint32_t xorKey ); bool decompressBuffer( std::vector& buffer, std::vector& output, PayloadCompression algo ); bool aes128_encrypt_cbc( const std::vector& data, const std::vector& key, std::vector* output, const std::vector&iv = {} ); bool aes128_decrypt_cbc( const std::vector& data, const std::vector& key, std::vector* output, const std::vector&iv = {} ); bool aes256_encrypt_cbc( const std::vector& data, const std::vector& key, std::vector* output, const std::vector&iv = {} ); bool aes256_decrypt_cbc( const std::vector& data, const std::vector& key, std::vector* output, const std::vector&iv = {} ); bool aes128_encrypt_ecb( const std::vector& data, const std::vector& key, std::vector* output, const std::vector&iv = {} ); bool aes128_decrypt_ecb( const std::vector& data, const std::vector& key, std::vector* output, const std::vector&iv = {} ); bool aes256_encrypt_ecb( const std::vector& data, const std::vector& key, std::vector* output, const std::vector&iv = {} ); bool aes256_decrypt_ecb( const std::vector& data, const std::vector& key, std::vector* output, const std::vector&iv = {} ); bool aes_encrypt( const std::vector& data, const std::vector& key, std::vector* output, ALG_ID algoId, DWORD mode, bool encrypt, const std::vector&iv = {} ); struct RC4Encoder { static constexpr size_t N = 256; typedef std::vector bytes_t; void swap(uint8_t* a, uint8_t* b); void KSA(const bytes_t& key, uint8_t* S); void PRGA(uint8_t* S, const bytes_t& plaintext, bytes_t& ciphertext); bytes_t RC4(const bytes_t& key, const bytes_t& plaintext); };