2024-01-05 17:32:18 +01:00
|
|
|
#include "crypto.hpp"
|
|
|
|
|
2024-01-05 20:02:01 +01:00
|
|
|
std::vector<BYTE> GenerateKey(size_t keysize)
|
2024-01-05 17:32:18 +01:00
|
|
|
{
|
2024-01-05 20:02:01 +01:00
|
|
|
std::vector<BYTE> key(keysize, 0);
|
2024-01-05 17:32:18 +01:00
|
|
|
std::random_device rd;
|
|
|
|
std::mt19937 gen(rd());
|
2024-01-05 20:02:01 +01:00
|
|
|
std::uniform_int_distribution<> dis(0, 255);
|
|
|
|
|
|
|
|
for (size_t i = 0; i < key.size(); ++i)
|
|
|
|
{
|
|
|
|
key[i] = static_cast<BYTE>(dis(gen));
|
|
|
|
}
|
2024-01-05 17:32:18 +01:00
|
|
|
|
2024-01-05 20:02:01 +01:00
|
|
|
return key;
|
|
|
|
}
|
2024-01-05 17:32:18 +01:00
|
|
|
|
2024-01-05 20:02:01 +01:00
|
|
|
void XorCipher(std::vector<BYTE> &data, const std::vector<BYTE> &key)
|
|
|
|
{
|
|
|
|
for (auto i = 0; i < data.size(); i++)
|
2024-01-05 17:32:18 +01:00
|
|
|
{
|
2024-01-05 20:02:01 +01:00
|
|
|
data[i] = data[i] ^ key[i % key.size()];
|
|
|
|
}
|
2024-01-05 17:32:18 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
DWORD CalculateHash(const std::string &source)
|
|
|
|
{
|
|
|
|
auto dwHash = HASH_KEY;
|
|
|
|
|
|
|
|
for (char ch : source)
|
|
|
|
{
|
|
|
|
if (ch == '\0')
|
|
|
|
{
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (ch >= 'a' && ch <= 'z')
|
|
|
|
{
|
|
|
|
ch -= 0x20;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Casting might be unnecessary
|
|
|
|
dwHash = ((dwHash << 5) + dwHash) + static_cast<DWORD>(ch);
|
|
|
|
}
|
|
|
|
|
|
|
|
return dwHash;
|
|
|
|
}
|
|
|
|
|
|
|
|
DWORD CalculateHash(const UNICODE_STRING &baseDllName)
|
|
|
|
{
|
|
|
|
auto pwszBaseDllName = baseDllName.Buffer;
|
|
|
|
auto dwHash = HASH_KEY;
|
|
|
|
|
|
|
|
char ch;
|
|
|
|
|
|
|
|
for (auto i = 0; i < baseDllName.MaximumLength; i++)
|
|
|
|
{
|
|
|
|
ch = pwszBaseDllName[i];
|
|
|
|
|
|
|
|
if (ch == '\0')
|
|
|
|
{
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (ch >= 'a' && ch <= 'z')
|
|
|
|
{
|
|
|
|
ch -= 0x20;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Casting might be unnecessary
|
|
|
|
dwHash = ((dwHash << 5) + dwHash) + static_cast<DWORD>(ch);
|
|
|
|
}
|
|
|
|
|
|
|
|
return dwHash;
|
|
|
|
}
|