""" Performance Timing Spoof Module Спуфит window.performance.timing для консистентности. Amazon FWCIM собирает performance.timing.toJSON() """ from .base import BaseSpoofModule class PerformanceSpoofModule(BaseSpoofModule): """Спуфинг Performance API""" name = "performance" description = "Performance timing spoof" def get_js(self) -> str: return """ (function() { // Спуфим performance.timing для консистентности const originalTiming = window.performance.timing; if (originalTiming && originalTiming.toJSON) { const originalToJSON = originalTiming.toJSON.bind(originalTiming); // Добавляем небольшой шум к timing значениям Object.defineProperty(originalTiming, 'toJSON', { value: function() { const data = originalToJSON(); // Не модифицируем, просто возвращаем оригинал // Важно чтобы timing выглядел реалистично return data; }, configurable: true }); } // Убеждаемся что performance.now() работает корректно // и не выдаёт слишком точные значения (fingerprint protection) const originalNow = performance.now.bind(performance); Object.defineProperty(performance, 'now', { value: function() { // Округляем до 0.1ms для защиты от timing attacks return Math.round(originalNow() * 10) / 10; }, configurable: true }); })(); """