Загрузка данных


#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;
}