summaryrefslogtreecommitdiff
path: root/csgo-loader/csgo-client/Security
diff options
context:
space:
mode:
Diffstat (limited to 'csgo-loader/csgo-client/Security')
-rw-r--r--csgo-loader/csgo-client/Security/Encryption.cpp30
-rw-r--r--csgo-loader/csgo-client/Security/SyscallManager.cpp4
2 files changed, 33 insertions, 1 deletions
diff --git a/csgo-loader/csgo-client/Security/Encryption.cpp b/csgo-loader/csgo-client/Security/Encryption.cpp
index 6cf2f7f..00b0fee 100644
--- a/csgo-loader/csgo-client/Security/Encryption.cpp
+++ b/csgo-loader/csgo-client/Security/Encryption.cpp
@@ -144,6 +144,8 @@ namespace Wrapper
ByteArray::size_type Aes256::encrypt_start(const ByteArray::size_type plain_length, ByteArray& encrypted)
{
+ VMProtectBegin("AESEncryptStart");
+
m_remainingLength = plain_length;
// Generate salt
@@ -168,6 +170,8 @@ namespace Wrapper
// Reset buffer
m_buffer_pos = 0;
+ VMProtectEnd();
+
return encrypted.size();
}
@@ -261,6 +265,8 @@ namespace Wrapper
{
unsigned char j;
+ VMProtectBegin("AESDecryptStart");
+
m_remainingLength = encrypted_length;
// Reset salt
@@ -273,6 +279,8 @@ namespace Wrapper
m_decryptInitialized = false;
+ VMProtectEnd();
+
return m_remainingLength;
}
@@ -306,6 +314,8 @@ namespace Wrapper
void Aes256::check_and_decrypt_buffer(ByteArray& plain)
{
+ VMProtectBegin("AESDecryptBuffer");
+
if(!m_decryptInitialized && m_buffer_pos == m_salt.size() + 1)
{
unsigned char j;
@@ -337,6 +347,8 @@ namespace Wrapper
m_buffer_pos = 0;
}
+
+ VMProtectEnd();
}
ByteArray::size_type Aes256::decrypt_end(ByteArray& plain)
@@ -372,6 +384,8 @@ namespace Wrapper
{
unsigned char i;
+ VMProtectBegin("AESExpandKey");
+
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]];
@@ -397,12 +411,16 @@ 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];
}
+
+ VMProtectEnd();
}
void Aes256::expand_dec_key(unsigned char* rc)
{
unsigned char i;
+ VMProtectBegin("AESExpandKey");
+
for(i = 28; i > 16; i -= 4)
{
m_rkey[i + 0] = m_rkey[i + 0] ^ m_rkey[i - 4];
@@ -429,6 +447,8 @@ 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]];
+
+ VMProtectEnd();
}
void Aes256::sub_bytes(unsigned char* buffer)
@@ -519,6 +539,8 @@ namespace Wrapper
{
unsigned char i, a, b, c, d, e;
+ VMProtectBeginUltra("AESMixColumn");
+
for(i = 0; i < 16; i += 4)
{
a = buffer[i];
@@ -533,12 +555,16 @@ namespace Wrapper
buffer[i + 2] ^= e ^ rj_xtime(c^d);
buffer[i + 3] ^= e ^ rj_xtime(d^a);
}
+
+ VMProtectEnd();
}
void Aes256::mix_columns_inv(unsigned char* buffer)
{
unsigned char i, a, b, c, d, e, x, y, z;
+ VMProtectBeginUltra("AESMixColumn");
+
for(i = 0; i < 16; i += 4)
{
a = buffer[i];
@@ -555,6 +581,8 @@ namespace Wrapper
buffer[i + 2] ^= x ^ rj_xtime(c^d);
buffer[i + 3] ^= y ^ rj_xtime(d^a);
}
+
+ VMProtectEnd();
}
inline unsigned char rj_xtime(unsigned char x)
@@ -569,7 +597,7 @@ namespace Wrapper
if(!CryptAcquireContextA(&m_CryptProvider, nullptr, nullptr, PROV_RSA_AES, 0))
{
if(!CryptAcquireContextA(&m_CryptProvider, nullptr, nullptr, PROV_RSA_AES, CRYPT_NEWKEYSET))
- INFO_ASSERT(STR("Critical failure\nContact an admin with the following code: %08x"), GetLastError());
+ INFO_ASSERT(STR("Critical failure\nContact an admin with the following code: 0x%08x"), GetLastError());
}
uint8_t RandomBytes[32];
diff --git a/csgo-loader/csgo-client/Security/SyscallManager.cpp b/csgo-loader/csgo-client/Security/SyscallManager.cpp
index 9bb1302..d6bace2 100644
--- a/csgo-loader/csgo-client/Security/SyscallManager.cpp
+++ b/csgo-loader/csgo-client/Security/SyscallManager.cpp
@@ -127,6 +127,8 @@ namespace Wrapper
return false;
// Loop each exported symbol.
+ VMProtectBeginUltra("SyscallFind");
+
for(uint32_t n{}; n < ExportDirectory->NumberOfNames; ++n)
{
uint32_t NameRva = Names[n];
@@ -151,6 +153,8 @@ namespace Wrapper
}
}
+ VMProtectEnd();
+
if(m_Syscalls.empty())
return false;