#pragma once #include #include #include // 9.5.2_live #define ACCESS_KEY "BGz7nwlRX8QP__fzvqrgpNRVqrlEyuY54vuGVAqDO_g=" #define KEY_ID "9.5.2_live" /* hardcoded variables (they have been the same since like 2017) */ #define CDN_KEY_BASE64 "lEQWeCt51ET+MIuxdTs7Ig/gzVZP2vdkVZA1BDfz+L0=" #define CDN_UUID "6EF35759-454D-4EBC-8041-9A94CB99FD5D" class DBDCrypt { public: enum PayloadType { NONE = 0, TYPE_1, // compressed TYPE_2, // CDN TYPE_3 // dyn / accesskey }; static std::string decrypt(const std::string& data, const std::string& accessKey, PayloadType* outType = nullptr); static std::string encrypt(const std::string& data, const std::string& accessKey, PayloadType type, std::string keyId); private: static std::string decType1(const std::string& data, const std::string& key, PayloadType* outType); static std::string decType2(const std::string& data, const std::string& key, PayloadType* outType); static std::string decType3(const std::string& data, const std::string& key, PayloadType* outType); static std::string aesECBDecrypt(const std::vector& cipherText, const std::vector& key); static std::string aesECBEncrypt(const std::vector& plainText, const std::vector& key); static std::vector b64Dec(const std::string& input); static std::string b64Enc(const std::vector& input); static std::string zlibDecompress(const std::vector& compressed); static std::vector zLibCompress(const std::string& data); static std::vector transformCDNKey(const std::string& b64CDNKey); static std::string shiftKeyID(const std::string& id, int shift); static std::string utf16ToUtf8(const std::string& utf16); static std::string utf8ToUtf16(const std::string& utf8); };