#pragma once #include #include #include namespace wowee { namespace game { /** * Warden anti-cheat crypto handler for WoW 3.3.5a * Handles RC4 encryption/decryption of Warden packets */ class WardenCrypto { public: WardenCrypto(); ~WardenCrypto(); /** * Initialize Warden crypto with module seed * @param moduleData The SMSG_WARDEN_DATA payload containing seed * @return true if initialization succeeded */ bool initialize(const std::vector& moduleData); /** * Decrypt an incoming Warden packet * @param data Encrypted data from server * @return Decrypted data */ std::vector decrypt(const std::vector& data); /** * Encrypt an outgoing Warden response * @param data Plaintext response data * @return Encrypted data */ std::vector encrypt(const std::vector& data); /** * Check if crypto has been initialized */ bool isInitialized() const { return initialized_; } private: bool initialized_; std::vector inputKey_; std::vector outputKey_; // RC4 state for incoming packets std::vector inputRC4State_; uint8_t inputRC4_i_; uint8_t inputRC4_j_; // RC4 state for outgoing packets std::vector outputRC4State_; uint8_t outputRC4_i_; uint8_t outputRC4_j_; void initRC4(const std::vector& key, std::vector& state, uint8_t& i, uint8_t& j); void processRC4(const uint8_t* input, uint8_t* output, size_t length, std::vector& state, uint8_t& i, uint8_t& j); }; } // namespace game } // namespace wowee