Источник: работа-вахтой.рф, пробит через реальный браузер + CDP
Цель: применить в нашем антифроде
Как устроен KillBot
1. Механизм проверки
KillBot подменяет страницу на заглушку (меню для пауков + fingerprint-скрипты), пока не убедится, что запрос идёт от реального браузера.
2. Что он проверяет (fingerprint)
- WebGL: vendor + renderer через UNMASKED_VENDOR_WEBGL / UNMASKED_RENDERER_WEBGL, MAX_TEXTURE_SIZE, MAX_VIEWPORT_DIMS
- Canvas fingerprint: шрифты через getBoundingClientRect (div со скрытым текстом в Shadow DOM)
- navigator.plugins: список плагинов (в headless пусто)
- navigator.maxTouchPoints, devicePixelRatio
- performance.memory: только в реальном Chrome (в headless undefined)
- FPS через requestAnimationFrame (в headless = 0)
- Timezone (Intl.DateTimeFormat), locale
- navigator.webdriver: главный палево-флаг
3. Схема запросов
```
- 1. GET /lid_svo/ → заглушка + скрытое меню (ссылки с?from=bot)
- 2. GET r1-r5.<домен>/ping → проверка доступности серверов
- 3. GET r1.<домен>/js/cn.js → fingerprint-скрипт (исполняется)
- 4. GET r1.<домен>/r/in.php?png=
&rr= - 5. POST r1.<домен>/cn.php?url=
&png= &raf= &lv= - 6. Ответ cn.php → документ.dispatchEvent(kbDataReceived)
- 7. Если ок → перезагрузка с реальным контентом
→ gzip-сжатые данные fingerprint (Blob + CompressionStream)
```
4. Cookie
- kbSession, kbUserID, kbAct, kbReloaded: ставятся JS-ом (document.cookie), не Set-Cookie
- Поэтому requests без JS-движка не может получить cookies
5. Обход (что сработало)
Реальный браузер + CDP (remote-debugging-port):
```
Start-Process browser.exe --remote-debugging-port=9222 --user-data-dir=<профиль>
затем Playwright: connect_over_cdp("http://127.0.0.1:9222")
```
Ключ: браузер запускается как обычная программа (не через Playwright API), поэтому:
- нет флага HeadlessChrome в UA
- реальный WebGL/Canvas/plugins/memory
- реальный FPS
6. Что НЕ работало (уроки)
- Playwright headless/headful: палится (navigator.webdriver, WebGL SwiftShader, plugins=[])
- Мобильный UA: тоже блок
- Перехват ответов cn.php: даёт только меню
- Подмена JS: ошибка (нужен JS, не текст)
- Прокси RU: не помогает (IP не главное)
- Dolphin Anty бесплатный план: без автоматизации
- puppeteer-extra-stealth: не пробивает (KillBot проверяет глубже)
Выводы для НАШЕГО антифрода
- 1. Fingerprint-проверка: WebGL vendor/renderer + canvas + plugins + FPS, отсекает headless-ботов
- 2. Проверка navigator.webdriver: главный маркер
- 3. Заглушка для пауков: меню с?from=bot (SEO-обман пауков)
- 4. gzip-сжатие fingerprint при передаче: защита от перехвата
- 5. Флаг kbReloaded: защита от мгновенного релоада (заставляет ждать)
- 6. Реальный браузер обходит всёЗначит, наш антифрод должен не только скриптом, но и поведением (тайминги, скроллы)
Заметка про пробив
- Пробил: реальный Yandex Browser + CDP (remote-debugging-port=9222)
- Скрипт: cdp_real_browser.py
- Файлы: rabota_cdp_real.html, rabota_stealth.html, rabota_dolphin.html