P³ pppokerbot

Бот в PPPoker: четыре слоя детекции

Бота в PPPoker ловят не одним способом, а четырьмя слоями сигналов: от дешёвого в обходе к дорогому. Ниже модель, по которой работают платформа и крупные клубы, отдельно от баек, которые ходят по форумам. Страница обновлена 6 октября 2026.

Вопрос «поймёт ли платформа, что конкретный игрок бот» зависит от того, сходятся ли в вердикте четыре стороны, которые смотрят на игрока (устройство, стол, аналитика клуба и живой человек), и достаточно ли дёшева ошибка, чтобы действовать.

Это наша реконструкция, а не документация PPPoker: платформа не публикует ни пороги, ни веса сигналов. Там, где мы экстраполируем, а не знаем, мы так и пишем.

Слой 1. Отпечаток устройства

Клиент PPPoker — нативное приложение для Android и iOS, плюс десктопная оболочка. При установке и на старте каждой сессии он отдаёт отпечаток: модель устройства, версия ОС, разрешение экрана, строка GPU, признак root или jailbreak, флаг ADB/USB-отладки, список установленных клавиатур и устойчивый ID устройства, захешированный в собственном пространстве идентификаторов платформы.

На этом слое попадаются эмуляторы со стандартным отпечатком (BlueStacks, LDPlayer, MEmu «из коробки»), средства автоматизации, которые цепляются к процессу клиента, и мультиаккаунты с одного физического устройства.

Живой Android-телефон с настоящей сессией и валидным ID этот слой не ловит. Серьёзные операторы держат фермы телефонов (стойки реальных аппаратов, у каждого свой IMEI и свой ID на платформе). Слой 1 не отличает их от телефона игрока.

# сигналы на старте сессии (иллюстрация; имена полей изменены)
{
  "dev_model": "SM-G991B",
  "dev_os":    "android-12",
  "dev_id":    "<sha256(platform-secret + hw-fingerprint)>",
  "dev_root":  false,
  "dev_emu":   false,
  "input_methods": ["com.google.android.inputmethod.latin"],
  "gpu":       "Mali-G78 MP14"
}
Цена обхода. Примерно стоимость б/у Android-телефона и новой SIM на каждое место за столом. Любители спотыкаются на этом слое. Серьёзные операторы обошли его года три назад.

Слой 2. Тайминги действий

Клиент передаёт тайминги каждого действия с точностью до миллисекунд: время от раздачи до первого касания, распределение времени на решение, траектория и длина движения ползунка при выборе размера ставки, кинематика тапа по «чеку» (одним пальцем или несколькими, какая площадь касания), жесты в простое, переходы приложения между передним планом и фоном.

Цель детекции здесь не «слишком быстро». Задержку бот может подмешивать любую, и грамотный оператор это делает. Смотрят на форму: совместное распределение (сложность решения × затраченное время × уверенность действия) у детерминированной политики не похоже на человеческое.

Человек, которому на ривере по мокрому борду сделали 3-бет, думает долго, а потом ставит либо мало, либо с полным коммитом. Бот с джиттером, подогнанным по маргиналам, думает разное время, но размер ставки берёт из непрерывного распределения. Гистограммы времени на раздумье у обоих проходят тест хи-квадрат против человеческого прайора, а совместный тест с контекстом решения проходит только один.

Здесь же работает площадь касания. Настоящий палец на кнопке в 320 пикселей оставляет другую траекторию пятна контакта, чем синтетическое событие, посланное через API специальных возможностей. Разница лежит в шумовом полу пятна контакта, и клиент замеряет его на старте сессии, чтобы получить базовую линию.

Байки и реальность. «Бот фолдит за 17 мс» относится к байкам, в 2026 году такого никто не выпускает. Аналитика платформы помечает подозрительно узкое распределение времени на префлопе при глубоких стеках.

Слой 3. Граф оппонентов

После 2024 года именно этот слой изменил детекцию. PPPoker ведёт для каждого игрока историю встреченных оппонентов в виде графа: игрок это узел, вес ребра хранит число сыгранных вместе рук и чистый обмен фишками. По этому графу платформа считает оценки сговора и пар «бот и бот».

Синтетический игрок на длинной дистанции набирает рёбра только с теми, кто играет в клубах, где оператор запускает бота. Такой граф оппонентов трудно изменить. У живого игрока длинный хвост рёбер с людьми из других клубов: зашёл за другом, сыграл фриролл, сел гостем в игру юниона. «Тонкость хвоста распределения оппонентов» — статистический сигнал, который считается дёшево.

Граф показывает и кольца. Если N подозрительных аккаунтов сидели за одними столами заметно чаще, чем предсказывает модель ликвидности юниона, это детекция без анализа поведения отдельных аккаунтов. Этот слой ловит фермы телефонов, чьи аккаунты на слоях 1 и 2 неотличимы от обычных.

# концепт: оценка по графу оппонентов
def graph_score(player, window=90_days):
    edges = opponent_edges(player, window)
    tail_thinness = 1 - shannon_entropy(edges) / log(len(edges) + 1)
    circle_density = max_clique_density(edges, threshold=0.05)
    return alpha * tail_thinness + beta * circle_density
Цена обхода. Выше, чем у двух предыдущих слоёв вместе. Чтобы подделать граф оппонентов под настоящий, нужна либо реальная игра в других клубах (то есть фишки, которые придётся отдавать живым столам ради прикрытия), либо скоординированное воздействие на платформу в масштабе, которого ни у одного агента мы не наблюдали.

Слой 4. Ручная проверка

Это единственный слой, чьё решение окончательное. Флагнутые сессии смотрит человек: сотрудник службы доверия платформы или, чаще, сотрудник клуба, который работает с выгрузкой истории рук и выносит суждение.

Перед человеком сессия оказывается по одному из трёх сигналов:

Ручная проверка не детерминирована. Мы видели аккаунты с сильными сигналами по слоям 2 и 3, которые проверку пережили, потому что проверяющий сидел на стороне оператора. Видели и аккаунты со слабыми сигналами, которые забанили, потому что старший агент вынес случай на уровень спора внутри юниона. Детерминированный слой 4 за квартал превратил бы обход в обычный товар.

Что из этой модели следует

Ветки на Reddit о детекции ботов не случайно превращаются в споры про выплаты. Почему эти две темы так часто путают, разобрано в статье про Reddit и ботов в PPPoker (на английском).

Если это ваша неделя

Если вы держите клуб и вопрос «насколько мы уязвимы» возвращается снова и снова, с людьми, которые строили и проверяли детекцию со стороны оператора, можно связаться напрямую. Первый разговор закрытый и бесплатный. Прайс-листа у нас нет, потому что одна и та же работа не повторяется дважды.