Zone 01 // Текстовые поля — все типы input
42
Москва
Санкт-Петербург
Екатеринбург
Новосибирск
Zone 02// Select, Checkbox, Radio, Toggle
Чекбоксы
Radio-группа
Toggle switches
Zone 03// Кнопки всех мастей
0← Счётчик
Zone 04// Shadow DOM — open mode

// Shadow root в режиме open — доступен через element.shadowRoot

shadow-root (open)
Zone 05// Shadow DOM — closed mode

// Shadow root в режиме closed — element.shadowRoot === null.

shadow-root (closed)
Zone 06// Canvas — попади в кнопку

// Нарисованная на canvas кнопка. Каждый раз в случайном месте.

// Кликните по кнопке на canvas
Zone 07// iframe — вложенный документ

// В iframe живёт отдельный document. В ZP: GetDocumentByAddress("1") — первый iframe.

Zone 08// Динамический DOM

// Элементы появляются после действий или с задержкой.

// Здесь появятся динамические элементы
✓ Элемент появился через 2 секунды — id="delayed-element"
Бесконечный список (scroll)
Элемент #1
Элемент #2
Элемент #3
Элемент #4
Элемент #5
Табы
Контент вкладки Alpha.
✓ Вы добрались до вкладки Gamma!
Zone 09// Хитрые элементы — ловушки
Скрытые в DOM элементы
↑ Три поля выше скрыты по-разному.
Перекрытые элементы
Перекрывающий слой
Drag & Drop
Item AItem BItem C
Перетащи сюда
contenteditable
Этот текст можно редактировать напрямую в div
// dialog элемент

Нативный HTML <dialog>.

Дерево (details)
Раздел A
Пункт A-1
Пункт A-2
Подраздел A-3
Пункт A-3-1
Раздел B
Пункт B-1
Пагинация
Zone 10// Прочие HTML-элементы
Информация — alert-info
Успех — alert-success
Предупреждение
Ошибка — alert-error
progress & meter
Статус-индикаторы
OnlineOfflinePending
automationzennoerrorinfo42!
#ИмяСтатусДействие
1Алисаactiveудалить
2Бобbannedудалить
3Викторpendingудалить
details/summary
Скрытый раздел 1
Раздел 2 — открыт по умолчанию
Контент видимый сразу.

Обычный жирный курсив подчёркнутый зачёркнутый inline code ZP

Это blockquote — цитата.
var doc = instance.ActiveTab.MainDocument;
var el = doc.FindElementById("input-text");
ARIA-атрибуты
div[role=button] — не кнопка, но кликабелен
Zone 11// Лог событий
// Лог пуст — взаимодействуй с элементами
Zone 12// Web3 — Injected Wallet (MetaMask)

// Требует браузерного расширения-кошелька. Попап подтверждения — отдельное окно расширения.

Статус
не подключён
Адрес кошелька
Подпись
Zone 13 // Canvas Fingerprinting — отпечаток браузера через canvas

// Сайты рисуют текст и фигуры на скрытом canvas, считывают пиксели через getImageData() и хэшируют результат.
// Рендеринг отличается у разных GPU, ОС, версий браузера и драйверов — это уникальный отпечаток.
// Используется в: Cloudflare, PerimeterX, Akamai, FingerprintJS, DataDome и других anti-bot системах.

Скрытый canvas (как у реальных сайтов)
↑ Виден только для демонстрации. Реально — style="display:none" или position:absolute; left:-9999px
Canvas Hash (SHA-256 like)
— нажмите Generate
DataURL (первые 80 символов)
Pixel Sample [0,0] RGBA
Полный Browser Fingerprint
// Нажмите Generate для сбора отпечатка
// Эти данные реальные — именно их отправляет ваш браузер
WebGL Fingerprint
// WebGL инфо появится после Generate
// Как сайты используют canvas fingerprint
1. Рисуют текст с эмодзи и спецсимволами (рендеринг шрифтов уникален)
2. Рисуют градиент + фигуры (антиалиасинг зависит от GPU)
3. toDataURL('image/png') → base64 строка
4. Хэшируют строку → короткий fingerprint ID
5. Сохраняют в localStorage / отправляют на сервер
6. Сравнивают при каждом визите — если изменился, подозрение
→ В ZennoPoster: каждый профиль должен иметь стабильный canvas fingerprint
Zone 14 // Bot Detection — как сайты обнаруживают ботов

// Каждая проверка ниже — это реальная техника детекции. Запускай и смотри что видит сайт о твоём браузере.

Navigator / Window checks
// Нажми "Запустить проверки"
Поведенческие сигналы
Mouse movement entropy
Двигай мышь здесь
events: 0 | unique points: 0
Keyboard timing (человек печатает неравномерно)
avg interval: — ms | variance: —
Focus / Blur события
// Переключайся между полями
Scroll behavior
scroll events: 0 | smooth: ?
Cloudflare Turnstile (реальный виджет)
// Sitekey 1x00000000000000000000AA — тестовый от Cloudflare.
// Всегда проходит без реальной проверки. Для продакшна нужен свой sitekey.
// Токен приходит в data-testid="turnstile-token"
Turnstile Token
— ожидание прохождения виджета
Статус
pending
// Как Turnstile работает:
1. Собирает browser signals (canvas, webgl, mouse, timing)
2. Запускает JS challenge (proof of work)
3. Возвращает подписанный токен
4. Бэкенд проверяет токен через Cloudflare API
→ Токен одноразовый и живёт 5 минут
Zone 15 // Anti-DevTools — техники обнаружения открытых инструментов разработчика

// Все техники ниже реально работают в браузере. Открой DevTools и наблюдай за реакцией страницы.

DevTools: не обнаружены
Техника 1 — Window Size
Когда DevTools открыты сбоку, window.outerWidth - window.innerWidth > 100.
Когда открыты снизу, outerHeight - innerHeight > 100.
outerWidth - innerWidth > 100
outerHeight - innerHeight > 100
outer: | inner:
diff:
Техника 2 — console.log Timing
В открытом DevTools console.log выполняется медленнее из-за рендеринга.
Замеряем время выполнения 1000 console.log вызовов.
t0 = performance.now()
console.log(obj) × 100
t1 = performance.now()
if (t1 - t0 > threshold) → devtools open
— не запущено
Техника 3 — debugger; Timing
Инструкция debugger; останавливает выполнение только если DevTools открыты.
Замеряем время — если > ~10ms, DevTools активны.
t0 = Date.now()
debugger;
t1 = Date.now()
if (t1 - t0 > 10) → devtools open
— не запущено
Техника 4 — Object toString (getter trick)
DevTools вызывает toString() на объектах при их отображении.
Если создать объект с getter на toString — он сработает только в консоли.
const x = {
  get toString() {
    devToolsDetected = true
    return () => 'object'
  }
}
console.log(x) // → срабатывает getter
— открой консоль и посмотри
Техника 5 — CSS / Element Inspector
Когда элемент выбран в Inspector, браузер может изменить его computed стили.
Также: firebug-specific CSS свойства, vendor prefixes.
Выбери этот элемент в Inspector → результат изменится
— мониторинг активен
Техника 6 — Native Function Check (Anti-Automation)
Автоматизация часто перезаписывает нативные функции (navigator.webdriver и др.).
Проверяем через Function.prototype.toString — у нативных функций вывод содержит [native code].
— нажми Проверить
Реакция на открытые DevTools
Когда DetTools обнаружены, сайты могут:
• Показать предупреждение
• Скрыть контент
• Перенаправить на другую страницу
• Сбросить сессию / выйти
• Отправить сигнал на сервер
🔓 Защищённый контент — виден пока DevTools закрыты
SECRET_DATA: {"user":"admin","token":"eyJhbGc..."}