airborne/shared/crypto.cpp

64 lines
1.2 KiB
C++
Raw Normal View History

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