#include <iostream>
#include <Windows.h>
#include <TlHelp32.h>
#include <intrin.h> // Для __rdtsc
#include <cstring>
FARPROC messageBoxAddress = NULL;
SIZE_T bytesWritten = 0;
char messageBoxOriginalBytes[6] = {};
char patch[6] = { 0 };
// --- 1. Проверка на виртуализацию через CPUID ---
bool IsVirtualized() {
int cpuInfo[4] = { 0 };
__cpuid(cpuInfo, 1);
// Бит 31 в ECX указывает на наличие гипервизора
if (cpuInfo[2] & (1 << 31)) {
std::cout << "[*] Hypervisor detected via CPUID\n";
return true;
}
// Дополнительная проверка через строку бренда гипервизора
__cpuid(cpuInfo, 0x40000000);
char brand[13] = { 0 };
memcpy(brand, &cpuInfo[1], 4);
memcpy(brand + 4, &cpuInfo[2], 4);
memcpy(brand + 8, &cpuInfo[3], 4);
if (strstr(brand, "VMware") || strstr(brand, "VBox") || strstr(brand, "KVM")) {
std::cout << "[*] Hypervisor brand detected: " << brand << "\n";
return true;
}
return false;
}
// --- 2. Проверка времени через RDTSC (аппаратный счетчик тактов) ---
// Это надежнее, чем GetTickCount, так как его сложнее подделать
bool CheckTimingRDTSC() {
unsigned __int64 start = __rdtsc();
Sleep(1000); // Спм 1 секунду
unsigned __int64 end = __rdtsc();
unsigned __int64 diff = end - start;
// Если разница слишком маленькая, значит Sleep был "пропущен" или ускорен
// Ориентировочно: 1 секунда на современном CPU = ~2-3 млрд тактов
if (diff < 1000000000) { // Порог в 1 млрд тактов
std::cout << "[*] RDTSC timing anomaly: " << diff << " ticks\n";
return true;
}
return false;
}
// --- 3. Проверка на "человеческий фактор" (движение мыши) ---
bool CheckMouseMovement() {
POINT p1, p2;
GetCursorPos(&p1);
Sleep(500);
GetCursorPos(&p2);
// В песочнице мышь либо не двигается, либо двигается "идеально" ровно
if (p1.x == p2.x && p1.y == p2.y) {
std::cout << "[*] No mouse movement detected\n";
return true; // Подозрительно
}
return false;
}
// Главная проверка
bool IsSandboxedAdvanced() {
std::cout << "--- Advanced Sandbox Checks ---\n";
// Используем комбинацию: если хотя бы 2 проверки сработали - это песочница
int suspicious = 0;
if (IsVirtualized()) suspicious++;
if (CheckTimingRDTSC()) suspicious++;
if (CheckMouseMovement()) suspicious++;
return (suspicious >= 2);
}
// --- Твой код хука (без изменений) ---
int __stdcall HookedMessageBox(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType) {
std::cout << "[!] HOOK TRIGGERED\n";
WriteProcessMemory(GetCurrentProcess(), (LPVOID)messageBoxAddress, messageBoxOriginalBytes, sizeof(messageBoxOriginalBytes), &bytesWritten);
return MessageBoxA(NULL, "You have been HACKED!", lpCaption, uType);
}
int main() {
// ПЕРВЫМ ДЕЛОМ проверяем, не песочница ли это
if (IsSandboxedAdvanced()) {
std::cout << "\n[!] Advanced sandbox detected. Exiting silently.\n";
return 0; // Просто выходим, ничего не делая
}
std::cout << "\n[+] Looks like a real system. Proceeding...\n";
// ... (дальше твой код установки хука без изменений)
return 0;
}