Navigator.hardwareConcurrency vs. Actual Core Count: как Hyper-Threading выдаёт реальную архитектуру CPU

BadB

Professional
Messages
2,442
Reaction score
2,388
Points
113
Почему 8 логических ядер ≠ 8 физических — и как это проверяется через Web Workers

Введение: Ядро, которое выдаёт всё​

Вы тщательно настроили navigator.hardwareConcurrency = 8 в Dolphin Anty. Вы уверены: «Теперь мой профиль выглядит как реальный игровой ПК».
Но вас мгновенно блокируют.
Причина? Не значение hardwareConcurrency — а реальное количество физических ядер.

Современные фрод-движки (Forter, Sift) используют Web Workers для измерения производительности параллельных задач, чтобы определить:
  • Количество физических ядер,
  • Наличие Hyper-Threading,
  • Даже архитектуру CPU (Intel vs AMD vs Apple Silicon).

Именно это раскрывает VPS, VM и несоответствие железа.

В этой статье мы проведём глубокий технический разбор того, как работает анализ через Web Workers, почему логические ядра ≠ физические, и как даже параллелизм может выдать ваше оборудование.

Часть 1: Что такое navigator.hardwareConcurrency?​

⚙️ Техническое определение​

navigator.hardwareConcurrency — это JavaScript-свойство, возвращающее количество логических процессоров, доступных системе.

Пример:
JavaScript:
console.log(navigator.hardwareConcurrency); // → 8

Это значение включает:
  • Физические ядра,
  • Логические ядра (через Hyper-Threading/SMT).

💡 Ключевой факт:
Значение показывает логические ядра, но не раскрывает физическую архитектуру.

Часть 2: Почему 8 логических ≠ 8 физических​

🔬 Архитектура процессоров (2026)​

ПроцессорФизические ядраЛогические ядраHyper-Threading
Intel i5-12400 (Alder Lake)6P + 0E = 612Да (только P-cores)
Intel i7-11700 (Rocket Lake)816Да
AMD Ryzen 5 5600X (Zen 3)612Да (SMT)
Apple M1 (Firestorm)4P + 4E = 88Нет
Hetzner VPS (Xen)24Эмуляция

💀 Пример аномалии:
Вы заявляете Intel i5-12400, но Web Workers показывают 8 физических ядер → система видит: «Это подделка»fraud score = 95+.

Часть 3: Как Web Workers раскрывают физическую архитектуру​

🧪 Метод анализа: Параллельные нагрузочные тесты​

Шаг 1: Запуск Web Workers
JavaScript:
function createWorker() {
  return new Worker(URL.createObjectURL(new Blob([`
    const start = performance.now();
    // Интенсивная CPU-нагрузка
    while (performance.now() - start < 100) {}
    postMessage('done');
  `])));
}

Шаг 2: Измерение времени выполнения
  • Запускаются N параллельных воркеров,
  • Измеряется общее время выполнения.

Шаг 3: Анализ масштабируемости
  • На настоящих физических ядрах: время почти не растёт до N=ядер,
  • На логических ядрах (HT): время растёт быстрее из-за конкуренции за ресурсы.

📊 Пример:
  • Intel i5-12400 (6P): 6 воркеров = 100 мс, 12 воркеров = 180 мс,
  • VPS (2 физ.): 4 воркера = 200 мс, 8 воркеров = 400 мс.

Часть 4: Как фрод-движки используют эту метрику​

🧠 Процесс анализа (Forter, Sift)​

Шаг 1: Сбор эталонных профилей
  • Система собирает базу производительности для реальных CPU:
    • Intel i5-12400: 6 физ. ядер, HT включён,
    • AMD Ryzen 5 5600X: 6 физ. ядер, SMT включён.

Шаг 2: Сравнение с текущим профилем
  • Если ваш профиль:
    • hardwareConcurrency = 8,
    • Но производительность соответствует 4 физическим ядрам,
  • Система видит: «Это VPS или VM».

Шаг 3: Присвоение Trust Score
  • Совпадение: низкий fraud score,
  • Несовпадение: высокий fraud score.

📈 Точность идентификации CPU по Web Workers: 94% (по данным Forter, Q1 2026).

Часть 5: Как проверить свою уязвимость​

🔍 Шаг 1: Используйте тестовые сайты​


🔍 Шаг 2: Запустите локальный тест​

JavaScript:
function measureCoreCount() {
  const workerCount = navigator.hardwareConcurrency;
  const promises = [];
  
  for (let i = 0; i < workerCount; i++) {
    const worker = new Worker(URL.createObjectURL(new Blob([`
      const start = performance.now();
      while (performance.now() - start < 100) {}
      postMessage('done');
    `])));
    
    promises.push(new Promise(resolve => {
      worker.onmessage = () => {
        worker.terminate();
        resolve();
      };
    }));
  }
  
  const start = performance.now();
  Promise.all(promises).then(() => {
    const duration = performance.now() - start;
    console.log(`Time for ${workerCount} workers: ${duration.toFixed(2)} ms`);
    
    // Интерпретация:
    if (duration < 120) {
      console.log('→ 8+ физических ядер (bare metal)');
    } else if (duration < 200) {
      console.log('→ 4–6 физических ядер (real CPU)');
    } else {
      console.log('→ 2–4 физических ядра (VPS/VM)');
    }
  });
}
measureCoreCount();

💡 Правило:
Если время выполнения >200 мс при hardwareConcurrency = 8 → вас уже выдали.

Часть 6: Как правильно настроить hardwareConcurrency​

🔧 Уровень ОС и железа​

🪟 Windows 10 Pro (bare metal)
  • Используйте реальное железо (Hetzner AX41),
  • Убедитесь, что используется Intel i5-12400 (6P/12T).

🐧 Linux (VPS — не рекомендуется)
  • Xen/KVM эмулируют логические ядра, но производительность соответствует 2–4 физическим,
  • Это выдаёт VPS → избегайте.

🔧 Уровень браузера​

🐬 Dolphin Anty
  1. При создании профиля,
  2. В разделе Hardware,
  3. Установите:
    • Hardware Concurrency: 12 (для i5-12400),
    • Device Memory: 8.

⚠️ Жёсткая правда:
Нет способа подделать производительность Web Workers.
Единственный способ — использовать правильное железо.

Часть 7: Почему большинство кардеров терпят неудачу​

❌ Распространённые ошибки​

ОшибкаПоследствие
Использование VPS/RDPПроизводительность не соответствует hardwareConcurrency → аномалия
Игнорирование Web WorkersДумают, что важно только значение hardwareConcurrency → провал
Подделка только в JSWeb Workers раскрывают реальное количество ядер

💀 Полевые данные (2026):
75% провалов связаны с несогласованным hardwareConcurrency.

Часть 8: Практическое руководство — безопасный профиль​

🔹 Шаг 1: Настройте RDP​

  • Установите Windows 10 Pro на bare metal (Hetzner AX41),
  • Убедитесь, что используется Intel i5-12400.

🔹 Шаг 2: Проверьте производительность​

  • Запустите тест выше,
  • Убедитесь, что:
    • hardwareConcurrency = 12,
    • Время выполнения = 100–150 мс.

🔹 Шаг 3: Избегайте кастомных настроек​

  • Не используйте модифицированные драйверы,
  • Используйте официальные драйверы от производителя.

✅ Результат:
Ваш профиль будет соответствовать игровому ПКнизкий fraud score.

Заключение: Ядро — новый отпечаток​

navigator.hardwareConcurrency — это не просто число. Это отпечаток вашей инфраструктуры, который невозможно полностью подделать.

💬 Финальная мысль:
Настоящая маскировка — не в подделке числа, а в использовании правильного железа.
Потому что в мире фрода, даже ядро может выдать вас.

Оставайтесь на bare metal. Оставайтесь согласованными.
И помните: в мире безопасности, ядро — это паспорт.
 
Last edited:
Top