Эмуляция железа ломается не в GPU, а в несогласованности CPU, RAM и WebGL
Разберем энтропию данного параметра: антифрод редко верит одной строке navigator.hardwareConcurrency. Он сверяет её с поведением потока, размером heap, скоростью выполнения JS и тем, как браузер отвечает на тяжелые циклы. Если ядра «8», а event loop ведет себя как у слабой машины, профиль становится шумным.
Память работает аналогично. deviceMemory — грубый сигнал, но рядом идут доступный heap, лимиты рендера, профиль аллокаций и косвенные следы сжатия изображений. Под капотом Chromium API значение можно подменить, но нельзя оставить без внимания смежные признаки: слишком высокий объем RAM при урезанном WebGL-контексте или наоборот выглядит как ручная сборка.
С видеокартой еще жестче. WebGL vendor, renderer, supported extensions и fingerprint канваса должны совпадать с семейством GPU. Если в ответе виден условный Intel, а шейдеры и список расширений тянут на дискретный адаптер, детект на уровне графического стека срабатывает быстро. Отдельно проверяют стабильность noise-модели: случайный шум без физической логики заметен.
Спуфинг через инъекцию JS-кода допустим только как часть цельной модели: ядра, память и GPU должны формировать правдоподобный пакет, а не набор независимых подмен. Иначе API-слой выглядит аккуратно, но низкоуровневые сигналы выдают расхождение. Практика простая: меняйте параметры только связно, затем прогоняйте CreepJS и BrowserLeaks, чтобы ловить конфликт до выхода в прод.
Антидетект: эксперт
@antidetect_expert_arb
Эмуляция железа ломается не в GPU, а в несогласованности CPU, RAM и WebGL
Этот пост опубликован в Telegram-канале Антидетект: эксперт. Подписаться можно по ссылке: @antidetect_expert_arb.