שבוע ראשון חינםНеделя бесплатноFirst week free בלי כרטיס אשראיбез картыno credit card להתחילНачатьStart
РусскийRU
שבוע חינםНеделя бесплатноНачатьFree weekStart

Технический ·

Детекция в Facebook: как FB распознаёт программ и как обойти (2026)

Технический разбор: как Facebook выявляет автоматизацию и что такое антидетекция - 20+ слоёв защиты (WebGL, паттерны мыши, отпечаток браузера).

«Антидетекция» - это не одна фича. Это стек из 20+ слоёв защиты, каждый из которых блокирует конкретный сектор детектирования, а вместе они позволяют программе Facebook работать месяцами, не попадаясь. В этой статье я разберу полный стек, который мы в BuzzPost построили за 4 года, с примерами кода и числовыми значениями для реализации.

Это не «общие советы». Это инженерная спецификация системы, обрабатывающей 150+ аккаунтов параллельно без поломок.

Слой 1: User-Agent consistency

UA - это первое впечатление вашей программы. В BuzzPost мы используем реальный UA последнего Chrome на Windows:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 
(KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36

Три основные инструкции:

  • Одинаковый UA всегда. Смена между sessions = checkpoint.
  • Реальный UA, не выдуманный. Facebook сравнивает с базой известных UAs.
  • UA, соответствующий реальной OS на VDS. Если работаете на Windows VDS - UA Windows. Не macOS.

Когда Chrome обновляется (примерно раз в месяц), UA немного меняется. Мы следуем за этим обновлением и не пытаемся остаться на старом UA - потому что слишком старый UA тоже поднимает флаг. Золотая середина: UA никогда не старше 3 месяцев от текущей версии Chrome.

Слой 2: viewport и window size

Наш default: 1366×768. Почему? Потому что это самое популярное разрешение Windows-экранов. ~22% Windows-экранов в 2026 - это 1366×768. Если ваша программа работает на 1920×1080, вы в меньшинстве, и это спам-сигнал.

Установка window size:

chrome.exe --window-size=1366,768 --window-position=0,0

Важно: window.outerWidth/outerHeight должны быть 1366/768, но window.innerWidth/innerHeight чуть меньше (из-за toolbar). Это естественное соотношение, которое Facebook ожидает.

Рандомизация сбоку: не рандомизация window size (это fingerprint signal), а scroll position - иногда прокрутка вниз перед действием.

Слой 3: locale и timezone

Критично для Израиля: lang=he-IL в Chrome и timezone Asia/Jerusalem в OS. Эти значения выявляются несколькими способами:

  • navigator.language - получает lang flag.
  • navigator.languages - array, default ["he-IL", "he", "en-US", "en"].
  • Intl.DateTimeFormat().resolvedOptions().timeZone - "Asia/Jerusalem".
  • HTTP header Accept-Language: he-IL,he;q=0.9,en-US;q=0.8,en;q=0.7.

Израильский Facebook-аккаунт, подключающийся с Accept-Language: ru-RU = сильный сигнал, что что-то не так. У нас в BuzzPost locale устанавливается один раз при создании VDS и фиксируется на всю жизнь.

Слой 4: WebGL и Canvas fingerprint

Как я детально описал в статье headless vs visible, fingerprint WebGL - это критическая точка детектирования. На VDS visible:

  • Мы не передаём --disable-gpu.
  • Мы не используем никакие «anti-fingerprinting» расширения, меняющие renderer (это вредит).
  • Мы опираемся на GPU Hyper-V/KVM, предоставляющий органичный WebGL.

Canvas fingerprint: тоже органичный. Производный от GPU и OS, не искажён.

Слой 5: рандомизация delays

Один из важнейших опор anti-detection. Между каждыми двумя действиями программы - рандомный delay 8-22 секунды. Почему этот диапазон?

  • Меньше 5 секунд = очевидная автоматизация. Человек не может обработать экран + прочитать + кликнуть с такой скоростью.
  • Больше 30 секунд = idle session, выглядит подозрительно (почему пользователь открыл группу и не делал ничего 30 секунд?).
  • 8-22 секунды = естественный диапазон человека, прокручивающего группу, читающего заголовок, решающего опубликовать.

Наш код:

import random, time
def human_pause():
    seconds = random.uniform(8, 22)
    time.sleep(seconds)

Дополнительное улучшение: неравномерное распределение. Большинство раз 10-14 секунд, но иногда 20+. Это приближает distribution к человеческой правде.

Слой 6: timing key-press

Когда программа «печатает» текст, он не вставляет весь текст сразу (send_keys в selenium вставляет «мгновенно», это automation signal). Вместо: посимвольный ввод, 50-150ms между клавишами.

def human_type(element, text):
    for ch in text:
        element.send_keys(ch)
        time.sleep(random.uniform(0.05, 0.15))

Почему 50-150ms? Это диапазон обычной скорости печати (60-100 WPM). Меньше 50ms = автоматизация. Больше 200ms = слепая печать.

Улучшение: иногда backspace + исправление, или pause 0.5-1s в середине предложения. Выглядит действительно по-человечески.

Слой 7: mouse paths (Bezier curves, не lines)

Слой, который большинство программ игнорируют. Когда программа «двигает мышь» к кнопке, идёт ли он прямой линией? Человек так не делает.

Человек двигает мышь по Bezier curve: начинает медленно, ускоряется в середине, замедляется в конце. Наш код вычисляет рандомные control points и выполняет движение в ~30 frames по 16ms каждый (60fps).

def move_mouse_bezier(driver, target_x, target_y):
    # Compute Bezier path with random control points
    ActionChains(driver).move_to_element_with_offset(...)
    # ... 30 micro-movements over 500ms
    pass

Если Facebook слушает события mousemove (а он слушает), он видит разницу. Наивные программы, идущие прямой линией, помечаются за 5 действий.

Слой 8: scroll patterns

Человек, прокручивающий feed Facebook, не делает это с постоянной скоростью. Он прокручивает чуть, останавливается, читает, прокручивает ещё, прокручивает вверх (что-то поймало его взгляд), прокручивает вниз снова. Наша программа делает scroll patterns из 4-8 движений с pauses между ними.

def human_scroll(driver, total_y=2000):
    chunks = random.randint(4, 8)
    for _ in range(chunks):
        delta = total_y // chunks + random.randint(-50, 50)
        driver.execute_script(f"window.scrollBy(0, {delta});")
        time.sleep(random.uniform(0.4, 1.2))
    # Sometimes scroll back up
    if random.random() < 0.2:
        driver.execute_script("window.scrollBy(0, -300);")
        time.sleep(random.uniform(0.5, 1.5))

Слой 9: cookie persistence (как обсуждали в отдельной статье)

Смотрите session persistence и cookies. Кратко: сохранение user-data dir, активное обновление каждые 13 дней, исключение любого delete.

Слой 10: IP isolation

Каждый VDS со своим static IP. Без proxy chains, без shared IPs. Почему?

  • Proxy chains добавляют latency, меняющую performance timing fingerprint.
  • Shared IPs (даже residential) используются другими людьми, которые могут быть забанены сами.
  • Static IP из израильского data-центра - самый «нормальный» для израильского Facebook-аккаунта.

Все наши VDS на инфраструктуре европейских и израильских data-центров, с чистыми IP, прошедшими проверку.

Слой 11: школа прогрева

Новый аккаунт не может начать постить сразу. У нас protocol:

  1. Неделя 1: ежедневный вход в Facebook, прокрутка feed 5-10 минут, лайки на 3-5 постов, ноль личных постов.
  2. Неделя 2: вдобавок, добавление 5-10 реальных друзей, вступление в 3-5 групп, комментарии на 2-3 поста.
  3. Неделя 3: 1-2 личных поста (не групповых), шаринг одного поста.
  4. Неделя 4 и далее: программа начинает постить - стартует с 3-5 постов в день и постепенно растёт.

Аккаунт, начинающий с 50 постов в день в первый день - банится за 24 часа. Этот protocol не опционален.

Слой 12: структурное детектирование (не текстовое)

Подробно в статье rate-limit engineering. Кратко: детектирование outcome поста через структуру ARIA, не текст. Звучит странно называть «детектирование outcome» слоем anti-detection, но так и есть: система, ошибающаяся в 70% случаев - упадёт быстро. Точность = выживание.

Слой 13: watchdog и recovery

Если программа застряла (state mtime > 90 минут), watchdog process перезапускает его. Это не просто bug fix - это antidetection, потому что «застрявшая программа» превращается в «забытой программы», вызывающего подозрение.

Итог

Антидетекция в 2026 - это серьёзная инженерия. BuzzPost обрабатывает все 20+ слоёв автоматически - вам не нужно знать, что такое Bezier curve или timezone leak; вы просто открываете панель и видите, что система работает. Каждый клиент получает выделенный VDS со всей защитой готовой. Если хотите начать постить, не теряя аккаунт - купите первый план за 249₪/мес. Один сервер, весь стек.

Подробнее: возможности, headless vs visible, управление множеством аккаунтов.

Слои 14-20: углублённый обзор дополнительных слоёв

Слой 14: рандомизация поста (контент + фото)

Не должно быть двух одинаковых постов. Программа использует AI (GPT-4 или локальную модель) для написания вариантов того же контента. Например, «квартира в аренду Кирьят-Моцкин» может быть:

  • «В аренду в Кирьят-Моцкин: уютная и светлая 3-комнатная квартира»
  • «Предлагаем в аренду в Кирьят-Моцкин - 3 комнаты, отличное состояние!»
  • «3-комнатная квартира в аренду в Кирьят-Моцкин, заезд сразу»

Фото: пул 20-30 фото на каждую квартиру, и в каждом посте другое фото. Если реальных фото недостаточно, лёгкая обработка (crop, color shift, новые метаданные) той же фотографии создаёт вариант.

Слой 15: управление hashtags

Hashtags ротируются. Не использовать в каждом посте те же 5 hashtags. Дополнительно, вариация в порядке hashtags - иногда в конце поста, иногда в середине.

Слой 16: phone number consistency

Номер телефона, появляющийся в постах недвижимости, - это contact клиента. Он тоже проходит лёгкую рандомизацию формата:

  • 050-123-4567
  • 050 123 4567
  • 050.123.4567
  • 0501234567
  • +972-50-123-4567

Facebook не помечает номера телефонов, но одинаковые посты с одинаковым форматом номера считаются больше спамом.

Слой 17: time-of-day distribution

Посты распределяются по 4-5 окнам времени за 24 часа, большинство ночью (00:00-07:00). Не концентрировать все 24 поста в 2 часа.

Слой 18: group rotation

Программа не постит в одну группу дважды в день. Если есть 50 целевых групп, первый день 25 групп, второй день остальные 25. Через 7 дней - возврат к ротации.

Слой 19: управление хешами фото

Facebook вычисляет perceptual hash для каждой фотографии. Если одно фото загружено в 3 разные группы, Facebook видит связь. У нас выполняется image aging: каждое фото не возвращается в ту же группу 7 дней, а после 7 дней - вариант фото (другой crop, другая обрезка).

Слой 20: monitor + alerting

Полная система включает dashboards, alerts и health checks. Если один пост провалился - alert. Если 3 поста подряд провалились - серьёзный alert. Если общий уровень ошибок поднимается с 5% до 15% - критический alert.

Вопросы, которые задают клиенты

«А если Facebook добавит новый слой детектирования?»

Мы отслеживаем проблему. Когда что-то меняется - весь наш парк (150+ аккаунтов) видит тот же феномен одновременно, и это ясный signal. Мы обновляем detector в среднем за 48 часов.

«Как я узнаю, что программа работает правильно?»

В панели есть полная dashboard: сколько постов сегодня, процент успеха, красные алерты, если что-то не так.

Приложение: флаги Chrome, которые нельзя передавать

Не каждый флаг хорош. Вот чёрный список флагов, которые компрометируют anti-detection:

  • --headless - самоочевидно
  • --disable-gpu - искажает WebGL fingerprint
  • --no-sandbox - не пересекает порог детектирования, но в production не рекомендуется
  • --disable-web-security - ломает CORS, на который Facebook опирается
  • --disable-features=VizDisplayCompositor - оптимизация рендеринга, влияющая на fingerprint
  • --use-fake-ui-for-media-stream - помечает как automated
  • --enable-automation - название говорит само за себя

Если строите своё, начните с minimal flag set и добавляйте только необходимое. Каждый флаг - potential signal.

Связь между слоями

Важно понимать, что слои не независимы. Они работают вместе. Если у вас реальный UA, но неправильная timezone, signal ломается. Если у вас отличные mouse paths, но вы работаете на constant scroll - подозрительно. Все слои должны быть согласованы.

Это и создаёт «deep faking» человечности: 20+ маленьких деталей, согласующихся друг с другом, создающих правдоподобную картину. Когда Facebook пытается определить автоматизацию, он проверяет не только провал первого слоя - он ищет inconsistencies между слоями.

Пример: UA говорит «Windows 10 + Chrome 121», но timezone говорит «America/New_York», но IP из Израиля, но locale «en-US». Это не пользователь - это кто-то, кто ошибся в нескольких параметрах. Даже если это реальный пользователь, который живёт в Америке и поднялся в Израиль - это сочетание редкое.

Поэтому выделенный VDS - это не просто «простое решение», а правильное решение: каждый параметр подогнан под одну фиксированную persona. Нет смены, нет противоречий. Все 20+ слоёв складываются в «израильский пользователь среднего возраста на Windows 10 в Крайот, прокручивающий feed недвижимости в 04:30 до того, как дети проснулись». Это выглядит правдоподобно, потому что соответствует тысячам реальных пользователей.

7
שבוע ראשון חינם, בלי כרטיס אשראיПервая неделя бесплатно, без картыFirst week free, no credit cardהתוכנה עובדת שבוע מלא, ואתם מחליטים אחרי שראיתם תוצאות. אחר כך 249 ₪ לחודש.Программа работает полную неделю, решаете после результата. Дальше 249 ₪ в месяц.The software runs a full week, you decide after seeing results. Then 249 ₪ a month.
להתחיל את השבוע החינמיНачать бесплатную неделюStart the free week

פתרונות רלוונטייםПолезные решения BuzzPostRelated BuzzPost solutions

שבוע ראשון חינם. בלי כרטיס אשראי.Первая неделя бесплатно. Без карты.First week free. No credit card.

מעלים מודעה היום, הפוסט הראשון יוצא תוך שעה.Загружаете объявление сегодня, первый пост выходит в течение часа.Upload a listing today, the first post goes out within an hour.

רוצים שנחזור אליכם?Хотите, чтобы мы перезвонили?Want us to call you back?

השאירו שם וטלפון, נחזור אליכם תוך שעה בשעות העבודה.Оставьте имя и телефон, перезвоним в течение часа в рабочее время.Leave your name and phone, we will call you back within an hour during working hours.

או ישר בוואטסאפ:Или сразу в WhatsApp:Or straight on WhatsApp:+972 58-638-4995
בשליחה אתם מאשרים יצירת קשר בנוגע ל-BuzzPost, גם בוואטסאפ.Отправляя, вы соглашаетесь на связь по поводу BuzzPost, в том числе в WhatsApp.By sending you agree to be contacted about BuzzPost, including on WhatsApp. מדיניות פרטיותПолитика конфиденциальностиPrivacy policy
שבוע חינם, בלי כרטיסНеделя бесплатноFree week, no card