From d786e65a9a262638e74f6ebcf1b296917897ae49 Mon Sep 17 00:00:00 2001 From: boris Date: Sun, 30 Dec 2018 15:00:51 +1300 Subject: unban marcus or suffer my wrath grr --- csgo-loader/csgo-client/Security/Encryption.cpp | 133 ++++++++---------------- 1 file changed, 42 insertions(+), 91 deletions(-) (limited to 'csgo-loader/csgo-client/Security/Encryption.cpp') diff --git a/csgo-loader/csgo-client/Security/Encryption.cpp b/csgo-loader/csgo-client/Security/Encryption.cpp index 6bc3640..133946a 100644 --- a/csgo-loader/csgo-client/Security/Encryption.cpp +++ b/csgo-loader/csgo-client/Security/Encryption.cpp @@ -1,6 +1,4 @@ #include -#include -#include #define FE(x) (((x) << 1) ^ ((((x)>>7) & 1) * 0x1b)) #define FD(x) (((x) >> 1) ^ (((x) & 1) ? 0x8d : 0)) @@ -100,20 +98,14 @@ namespace Wrapper { } -#pragma optimize("", off) - ByteArray::size_type Aes256::encrypt(const ByteArray& key, const ByteArray& plain, ByteArray& encrypted) { Aes256 aes(key); - WRAP_IF_RELEASE(VM_EAGLE_BLACK_START); - aes.encrypt_start(plain.size(), encrypted); aes.encrypt_continue(plain, encrypted); aes.encrypt_end(encrypted); - WRAP_IF_RELEASE(VM_EAGLE_BLACK_END); - return encrypted.size(); } @@ -132,14 +124,10 @@ namespace Wrapper { Aes256 aes(key); - WRAP_IF_RELEASE(VM_EAGLE_BLACK_START); - aes.decrypt_start(encrypted.size()); aes.decrypt_continue(encrypted, plain); aes.decrypt_end(plain); - WRAP_IF_RELEASE(VM_EAGLE_BLACK_END); - return plain.size(); } @@ -252,8 +240,6 @@ namespace Wrapper { unsigned char i, rcon; - WRAP_IF_RELEASE(VM_EAGLE_BLACK_START); - copy_key(); add_round_key(buffer, 0); for(i = 1, rcon = 1; i < NUM_ROUNDS; ++i) @@ -269,8 +255,6 @@ namespace Wrapper shift_rows(buffer); expand_enc_key(&rcon); add_round_key(buffer, i); - - WRAP_IF_RELEASE(VM_EAGLE_BLACK_END); } ByteArray::size_type Aes256::decrypt_start(const ByteArray::size_type encrypted_length) @@ -364,8 +348,6 @@ namespace Wrapper { unsigned char i, rcon = 1; - WRAP_IF_RELEASE(VM_EAGLE_BLACK_START); - copy_key(); for(i = NUM_ROUNDS / 2; i > 0; --i) expand_enc_key(&rcon); @@ -384,16 +366,12 @@ namespace Wrapper sub_bytes_inv(buffer); } add_round_key(buffer, i); - - WRAP_IF_RELEASE(VM_EAGLE_BLACK_END); } void Aes256::expand_enc_key(unsigned char* rc) { unsigned char i; - WRAP_IF_RELEASE(MUTATE_START); - m_rkey[0] = m_rkey[0] ^ sbox[m_rkey[29]] ^ (*rc); m_rkey[1] = m_rkey[1] ^ sbox[m_rkey[30]]; m_rkey[2] = m_rkey[2] ^ sbox[m_rkey[31]]; @@ -402,15 +380,11 @@ namespace Wrapper for(i = 4; i < 16; i += 4) { - m_rkey[i] = m_rkey[i] ^ m_rkey[i - 4]; + m_rkey[i] = m_rkey[i] ^ m_rkey[i - 4]; m_rkey[i + 1] = m_rkey[i + 1] ^ m_rkey[i - 3]; m_rkey[i + 2] = m_rkey[i + 2] ^ m_rkey[i - 2]; m_rkey[i + 3] = m_rkey[i + 3] ^ m_rkey[i - 1]; } - - WRAP_IF_RELEASE(MUTATE_END); - WRAP_IF_RELEASE(VM_EAGLE_BLACK_START); - m_rkey[16] = m_rkey[16] ^ sbox[m_rkey[12]]; m_rkey[17] = m_rkey[17] ^ sbox[m_rkey[13]]; m_rkey[18] = m_rkey[18] ^ sbox[m_rkey[14]]; @@ -423,16 +397,12 @@ namespace Wrapper m_rkey[i + 2] = m_rkey[i + 2] ^ m_rkey[i - 2]; m_rkey[i + 3] = m_rkey[i + 3] ^ m_rkey[i - 1]; } - - WRAP_IF_RELEASE(VM_EAGLE_BLACK_END); } void Aes256::expand_dec_key(unsigned char* rc) { unsigned char i; - WRAP_IF_RELEASE(MUTATE_START); - for(i = 28; i > 16; i -= 4) { m_rkey[i + 0] = m_rkey[i + 0] ^ m_rkey[i - 4]; @@ -446,9 +416,6 @@ namespace Wrapper m_rkey[18] = m_rkey[18] ^ sbox[m_rkey[14]]; m_rkey[19] = m_rkey[19] ^ sbox[m_rkey[15]]; - WRAP_IF_RELEASE(MUTATE_END); - WRAP_IF_RELEASE(VM_EAGLE_BLACK_START); - for(i = 12; i > 0; i -= 4) { m_rkey[i + 0] = m_rkey[i + 0] ^ m_rkey[i - 4]; @@ -462,8 +429,6 @@ namespace Wrapper m_rkey[1] = m_rkey[1] ^ sbox[m_rkey[30]]; m_rkey[2] = m_rkey[2] ^ sbox[m_rkey[31]]; m_rkey[3] = m_rkey[3] ^ sbox[m_rkey[28]]; - - WRAP_IF_RELEASE(VM_EAGLE_BLACK_END); } void Aes256::sub_bytes(unsigned char* buffer) @@ -504,72 +469,56 @@ namespace Wrapper { unsigned char i, j, k, l; /* to make it potentially parallelable :) */ - WRAP_IF_RELEASE(VM_EAGLE_BLACK_START); - - i = buffer[1]; - buffer[1] = buffer[5]; - buffer[5] = buffer[9]; - buffer[9] = buffer[13]; + i = buffer[1]; + buffer[1] = buffer[5]; + buffer[5] = buffer[9]; + buffer[9] = buffer[13]; buffer[13] = i; - j = buffer[10]; + j = buffer[10]; buffer[10] = buffer[2]; - buffer[2] = j; - - WRAP_IF_RELEASE(VM_EAGLE_BLACK_END); - WRAP_IF_RELEASE(MUTATE_START); + buffer[2] = j; - k = buffer[3]; - buffer[3] = buffer[15]; + k = buffer[3]; + buffer[3] = buffer[15]; buffer[15] = buffer[11]; buffer[11] = buffer[7]; - buffer[7] = k; + buffer[7] = k; - l = buffer[14]; + l = buffer[14]; buffer[14] = buffer[6]; - buffer[6] = l; - - WRAP_IF_RELEASE(MUTATE_END); + buffer[6] = l; } void Aes256::shift_rows_inv(unsigned char* buffer) { unsigned char i, j, k, l; /* same as above :) */ - WRAP_IF_RELEASE(VM_EAGLE_BLACK_START); - - i = buffer[1]; - buffer[1] = buffer[13]; + i = buffer[1]; + buffer[1] = buffer[13]; buffer[13] = buffer[9]; - buffer[9] = buffer[5]; - buffer[5] = i; + buffer[9] = buffer[5]; + buffer[5] = i; - j = buffer[2]; - buffer[2] = buffer[10]; + j = buffer[2]; + buffer[2] = buffer[10]; buffer[10] = j; - WRAP_IF_RELEASE(VM_EAGLE_BLACK_END); - WRAP_IF_RELEASE(MUTATE_START); - - k = buffer[3]; - buffer[3] = buffer[7]; - buffer[7] = buffer[11]; + k = buffer[3]; + buffer[3] = buffer[7]; + buffer[7] = buffer[11]; buffer[11] = buffer[15]; buffer[15] = k; - l = buffer[6]; - buffer[6] = buffer[14]; + l = buffer[6]; + buffer[6] = buffer[14]; buffer[14] = l; - - WRAP_IF_RELEASE(MUTATE_END); } void Aes256::mix_columns(unsigned char* buffer) { unsigned char i, a, b, c, d, e; - WRAP_IF_RELEASE(VM_EAGLE_BLACK_START); - for(i = 0; i < 16; i += 4) { a = buffer[i]; @@ -584,16 +533,12 @@ namespace Wrapper buffer[i + 2] ^= e ^ rj_xtime(c^d); buffer[i + 3] ^= e ^ rj_xtime(d^a); } - - WRAP_IF_RELEASE(VM_EAGLE_BLACK_END); } void Aes256::mix_columns_inv(unsigned char* buffer) { unsigned char i, a, b, c, d, e, x, y, z; - WRAP_IF_RELEASE(VM_EAGLE_BLACK_START); - for(i = 0; i < 16; i += 4) { a = buffer[i]; @@ -610,31 +555,29 @@ namespace Wrapper buffer[i + 2] ^= x ^ rj_xtime(c^d); buffer[i + 3] ^= y ^ rj_xtime(d^a); } - - WRAP_IF_RELEASE(VM_EAGLE_BLACK_END); } -#pragma optimize("", on) - inline unsigned char rj_xtime(unsigned char x) { return (x & 0x80) ? ((x << 1) ^ 0x1b) : (x << 1); } // Wrapper for the AES256 encryption algorithm. - void Encryption::Start() { ERROR_ASSERT("[000F:00001A00] Failed to initialize. Please contact an administrator."); } + void Encryption::Start() { } void Encryption::Start(ByteArray &EncryptionKey) { - // The client can only be initialized with an existing key. - if(EncryptionKey.empty()) + // If an encryption key is provided, initialise the wrapper with + // the passed parameter. + if(!EncryptionKey.empty()) + { + for(auto &It : EncryptionKey) + m_EncryptionKey.emplace_back(It); + } + else + { Start(); - - WRAP_IF_DEBUG(printf("[DEBUG] Received handshake: %zd bytes.\n[DEBUG] Data: ", EncryptionKey.size());); - WRAP_IF_DEBUG(for(auto &It : EncryptionKey) { printf("%02x ", It); }); - WRAP_IF_DEBUG(printf("\n")); - - std::copy(EncryptionKey.begin(), EncryptionKey.end(), m_EncryptionKey.begin()); + } } ByteArray Encryption::Encrypt(ByteArray &Data) @@ -642,7 +585,11 @@ namespace Wrapper // Encrypt outgoing data. ByteArray Encrypted; + #ifdef DEBUG + Encrypted = Data; + #else Aes256::encrypt(m_EncryptionKey, Data, Encrypted); + #endif return Encrypted; } @@ -652,7 +599,11 @@ namespace Wrapper // Decrypt incoming data. ByteArray Decrypted; + #ifdef DEBUG + Decrypted = Data; + #else Aes256::decrypt(m_EncryptionKey, Data, Decrypted); + #endif return Decrypted; } -- cgit v1.2.3