Как стать автором
Обновить

FunCaptcha (Arkose Labs): принципы работы, особенности и методы распознавания (автоматические и ручные варианты)

Уровень сложностиПростой
Время на прочтение23 мин
Количество просмотров523

Как работает FunCaptcha и чем она отличается от классических капч

Продолжаем путешествовать по миру капч (Фантастические капчи и где они обитают, а также способы борьбы с ними), и сегодня на очереди очередной “крепкий орешек” во вселенной капч - FunCaptcha (Arkose Labs).

FunCaptcha – это тип CAPTCHA от компании Arkose Labs, который предлагает пользователям небольшие головоломки вместо привычных задач вроде распознавания текста или выбора картинок с автобусами. В классических капчах (например, reCAPTCHA) проверка часто основывается на распознавании искаженных символов или простых изображений. Arkose Labs пошли другим путем: их “развлекательные” капчи представляют интерактивные задания с 3D-объектами, логическими головоломками и аудио-вопросами​. Такой подход призван быть юзер френдли для человека, но должен затруднить жизнь ботам.

Типичные задания FunCaptcha бывают следующими:

  • Поворот изображения – Пользователю показывают перевернутый объект (например, животное) и предлагают повернуть его в правильное положение с помощью стрелок. Это проверяет пространственное мышление – то, с чем у алгоритмов могут возникнуть сложности​.

  • Выбор объектов по условию – Например, нужно выбрать из набора изображений те, на которых выполнено определенное условие. Встречается головоломка с игральными кубиками: «выберите пару костей, сумма очков на верхних гранях которых равна заданному числу». Ботам сложно понять контекст картинки и логически соотнести объекты​ (кстати, пресловутое число 16 пошатнуло не одно психическое состояние разгадывающего).

  • Интерактивные задачи – В некоторых вариантах нужно перемещать элементы. Например, перетащить кусочек пазла в нужное место или провести персонажа в заданную точку по схеме. Тут проверяется способность узнавать паттерны и следовать инструкциям, что затруднительно для скриптов​.

  • Аудио-загадки – В отличие от классических аудио-капч «скажите слова/цифры с записи», Arkose предлагает вопросы на слух. Например: “какая из аудиозаписей – звук барабанов?” или “где говорящий – единственный человек?”​. Пользователь должен прослушать несколько звуков и выбрать правильный – это проверяет понимание содержания, а не распознавание текста, что гораздо тяжелее автоматизировать.

В итоге FunCaptcha заметно отличается от традиционных капч. Она использует игровые сценарии и 3D-графику, избегая шаблонных задач. Инструкции обычно понятны без слов (через изображение-указку или интуитивный интерфейс), чтобы пользователи любой языковой среды могли решить задачу легко​. Такой подход повышает удобство для реальных людей (капча воспринимается скорее как мини-игра), но осложняет автоматическое распознавание, поскольку боту нужно понимать содержание задания, а не просто читать текст. Неудивительно, что многие разработчики, сталкиваясь с этой системой, в шутку называют FunCaptcha «факкапча» – намекая, сколько проблем она может доставить ботам и тем, кто пытается их написать.

Почему FunCaptcha считается сложной для автоматизации

“FunCaptcha решение” оказалось гораздо труднее реализовать, чем обход классических текстовых капч. На то есть несколько причин:

  • Вариативность и частое обновление заданий. Arkose Labs постоянно добавляет новые виды головоломок и вариации. По официальным данным, одна только серия Match Key-челленджей (обновленная версия FunCaptcha) может насчитывать свыше 1250 вариантов одного задания​. Это значит, что бот не может быть “натаскан” на ограниченный набор картинок – постоянно будут встречаться новые сцены, образы и правила. Для уверенного распознавания потребовалось бы собрать и разметить сотни тысяч изображений (Arkose Lab оценивает свою базу примерно в 500 000 изображений для обучения ML-модели на уровне их сложнейших капч)​ – очевидно что это колоссальная трудозатрата.

  • Интерактивность и контекст. Боту недостаточно распознать отдельный объект – нужно понять инструкцию и выполнить действия. Например, повернуть фигуру на нужный угол или выбрать правильно все подходящие картинки из нескольких. Скрипты, основанные на шаблонах или компьютерном зрении, могут сбиваться, если меняется угол объекта, освещение или формулировка задачи. Требуется настоящее компьютерное зрение + логика, близкие к человеческому, что выходит за рамки простого OCR.

  • Дополнительные защиты Arkose (MatchKey). Arkose Labs внедряет механизм challenge-response под названием MatchKey, делающий автоматизацию ещё сложнее. По сути, помимо решения видимой задачи, браузер должен доказать, что он “честно” исполняет заложенный сценарий. Например, при инициализации сессии капча выдает уникальный скрипт (по URL dapib), который должен вычислить специальный параметр ответа – часто называют tguess или match key​. Этот скрипт привязан к конкретной сессии и меняется во времени, выступая своего рода “доказательством работы”: без его выполнения даже правильно угаданное решение не будет принято сервером. Для бота это огромная проблема – приходится исполнять чужой JS-код или пытаться эмулировать его логику, а скрипты регулярно обновляются.

  • Отпечатки устройства и окружения. Чтобы отличить скрипт от реального пользователя, Arkose собирает множество параметров окружения: User Agent, разрешение экрана, время рендеринга WebGL, движение мыши, набранные ранее токены и пр. Эти данные могут упаковываться в скрытый параметр (на некоторых сайтах он называется blob), который передается на сервер​. Сгенерировать корректный blob без запуска настоящего браузера непросто. Если скрипт просто шлет запросы к API Arkose, минуя браузер, платформа может определить аномалии (например, нехарактерные задержки, отсутствие определенных событий) и повысить сложность задания или вовсе отклонить попытку.

  • Ограничение по времени и попыткам. FunCaptcha не всегда дает неограниченное время на решение. Если пользователь (или бот) слишком долго “думает”, задача может смениться на другую. Так бывает, что при решении капчи повторно (спустя ~15 секунд) Arkose выдавала новую серию испытаний​. Для автоматизации это означает, что слишком медленное решение = неудача: скрипт может получить корректный ответ, а сервер уже потребует следующий. Более того, при нескольких неверных попытках подряд система может усилить проверку или совсем заблокировать дальнейшие запросы. То есть долгий отклик критичен!

Все эти факторы делают FunCaptcha одной из самых устойчивых систем к бот - трафику. Если классическую капчу можно решить, подав изображение на OCR или использовав публичный API, то здесь приходится воспроизводить поведение человека в целом: от движка браузера и взаимодействия с 3D-графикой до логического “мышления”. Тем не менее, задача автоматизации «факапчи» актуальна для многих – рассмотрим, какие данные нужны для ее обхода и какими способами вообще можно попытаться ее распознать. 

Получение ключевых параметров капчи на сайте

Прежде чем пытаться решить FunCaptcha автоматически, нужно получить с целевого сайта данные, необходимые для запроса к Arkose Labs. При интеграции FunCaptcha сайт-владелец использует публичный ключ Arkose и связанный с ним адрес сервиса Arkose (так называемый Service URL или коротко surl). Эти параметры генерируются Arkose Labs для каждого клиента (сайта) и зашиты в код капчи на странице.

Как их обнаружить? Обычно публичный ключ – это GUID, который можно найти в HTML-разметке страницы. Например, часто на странице присутствует скрытый элемент ввода с именем fc-token (или похожим), в значении которого содержатся необходимые данные. Вот пример кода страницы с указанными данными (фрагмент HTML):

<input type="hidden" id="FunCaptcha-Token" name="fc-token"
 value="702178f80cd6ade39.2875608305|r=eu-west-1|...|pk=2CB16598-CB82-4CF7-B332-5990DB66F3AB|...|surl=https%3A%2F%2Fclient-api.arkoselabs.com|...">

Здесь присутствует строка value, где видно pk=<...> – это и есть public key, а также surl= – URL сервиса Arkose, закодированный в виде ссылки. В данном примере публичный ключ равен 2CB16598-CB82-4CF7-B332-5990DB66F3AB, а surl – https://client-api.arkoselabs.com (дефолтный адрес API Arkose)​. На других сайтах surl может быть кастомным поддомена Arkose (например, blizzard-api.arkoselabs.com для сервисов Blizzard и т.п.), поэтому лучше всегда его извлекать, если он указан.

Альтернативный способ – поиск параметра data-pkey в HTML. Некоторые сайты вставляют виджет Arkose через контейнер <div data-pkey="PUBLIC_KEY" ...> или через JavaScript-конфиг. В любом случае, публичный ключ (Open Key) и адрес сервиса (surl) можно найти через инструменты разработчика, поиск по исходному коду страницы или анализ сетевых запросов при загрузке капчи​. Также может потребоваться дополнительный параметр blob (если сайт его использует) – как правило, он передается как часть запроса при инициации капчи и может храниться в том же скрытом поле или генерироваться скриптом Arkose. Если blob необходим, его наличие и значение обычно видно в исходном коде страницы (в JavaScript переменных) или можно отловить в DevTools (по запросу к .../fc/gfct/ на Arkose API).

Итак, получив public key (открытый ключ сайта) и опционально surl и blob, у нас есть данные для обращения к сервису распознавания капчи или напрямую к Arkose (если решение будет настроено без использования сервиса распознавания капчи). Теперь давайте рассмотрим, какие есть подходы к распознаванию FunCaptcha автоматически.

Как распознать "факапчу": обзор методов обхода

Существует несколько стратегий автоматического решения FunCaptcha. Условно их можно разделить на три категории:

  1. Использовать сторонние платные сервисы распознавания (anti-captcha сервисы), которые берут на себя всю сложную работу.

  2. Использовать open-source или DIY-решения (самостоятельные скрипты), создавая своего бота – например, задействовать распознавание аудио или обученные нейросети, либо скрипты из открытых репозиториев.

  3. Пойти путём эмуляции пользователя в браузере – с помощью Selenium или другого инструмента автоматизировать сам браузер, возможно, вкупе с первым или вторым подходом.

Рассмотрим плюсы, минусы и реализации каждого из подходов.

Решение через платные сервисы (2Captcha, Rucaptcha, SolveCaptcha и др.)

Самый простой способ для разработчика – отдать задачу решения капчи на аутсорсинг специальному сервису. Существуют сервисы распознавания капчи (Rucaptcha, 2Captcha, SolveCaptcha, DeathByCaptcha, etc.), которые специализируются на обходе капч. Как правило, они работают по API: вы отправляете им необходимые параметры капчи, сервис на своей стороне ее решает (либо с помощью работников-людей, либо с помощью нейросетей, либо комбинированно) и возвращает готовый токен ответа.

Для FunCaptcha большинство таких сервисов поддерживают метод распознавания через токен. Он заключается в следующем:

  1. Вы извлекаете с целевого сайта public key и surl (как описано выше). Эти значения понадобятся сервису распознавания.

  2. Делаете запрос к API сервиса: указываете метод = funcaptcha, передаете публичный ключ (параметр publickey), URL Arkose (surl) и адрес страницы, на которой появилась капча (pageurl)​. Также передать свой API-ключ для авторизации на сервисе.

  3. Сервис ставит вашу задачу в очередь на решение. Через их API вы получите обратно идентификатор задачи (например, ID капчи).

  4. Спустя некоторое время (обычно 15–30 секунд) вы опрашиваете API сервиса с этим ID, чтобы узнать результат. Если капча уже решена, сервис вернет строку-токен вида например: 3084f4a302b176cd7.96368058|r=ap-southeast-1|...|surl=https://funcaptcha.com. Если еще нет – ответ будет что-то вроде CAPCHA_NOT_READY, тогда нужно подождать и повторить запрос через пару секунд​.

  5. Полученный response token вставляется обратно в форму на сайте. Обычно на целевой странице есть скрытое поле (например, fc-token), куда нужно подставить полученный токен вместо изначального значение, после чего можно отправлять форму или вызывать завершающий запрос в приложение (нажатие кнопки подтверждения и т.п.)​. Сервер сайта проверит токен с помощью Arkose API – и при валидном токене вы пройдете капчу.

На практике использование такого API можно реализовать несколькими строчками кода. Пример на Python с библиотекой 2Captcha:

from twocaptcha import TwoCaptcha

solver = TwoCaptcha("ВАШ_API_KEY_2CAPTCHA")

result = solver.funcaptcha(sitekey=PUBLIC_KEY, url=PAGE_URL, surl=SURL)

token = result['code']   # полученный токен решения FunCaptcha

print("FunCaptcha token:", token)

Либо без сторонней библиотеки, просто HTTP-запросами:

# 1. Отправляем капчу на решение

url = f"http://2captcha.com/in.php?key={API_KEY}&method=funcaptcha&publickey={PUBLIC_KEY}&surl={SURL}&pageurl={PAGE_URL}"

captcha_id = requests.get(url).text.split('|')[1]

# 2. Ждем и запрашиваем результат

time.sleep(20)

res = requests.get(f"http://2captcha.com/res.php?key={API_KEY}&action=get&id={captcha_id}").text

while "CAPCHA_NOT_READY" in res:

    time.sleep(5)

    res = requests.get(...).text

token = res.split('|', 1)[1]  # токен решения после "OK|"

Подобным образом работают и другие сервисы. Различия лишь в деталях API – где-то используются POST-запросы с JSON, где-то GET – но суть одна: передать ключи, получить готовый ответ. Крупнейшие платформы (2Captcha, SolveCaptcha и др.) имеют готовые SDK и библиотеки под популярные языки, что упрощает интеграцию.

Что происходит “под капотом” сервисов? Чаще всего они либо привлекают к решению реальных людей, либо используют свои нейросетевые модели (или гибрид). Например, 2Captcha и Anti-Captcha исторически опирались на сеть из работников: ваш запрос с параметрами капчи фактически транслируется на их внутренний интерфейс, где оператор видит ту же головоломку (с помощью эмуляции браузера) и решает ее вручную. После этого система возвращает вам токен. Однако для FunCaptcha ручной труд – не единственный вариант: появились сервисы, утверждающие, что применяют AI для решения Arkose. Один из них – SolveCaptcha. По отзывам, SolveCaptcha в 2024 году выделялся наиболее быстрым решением FunCaptcha за счет AI-алгоритмов​. То есть вместо того, чтобы ждать ~20 секунд, ответ иногда приходит за 5–10 секунд, потому что задачу решает не человек, а обученная модель (распознающая изображение и эмулирующая нужные действия).

์Также, SolveCaptcha заявляют о комбинированном подходе: сначала пытаются решить автоматически, а если не получается – подключают человека​. Для нас, как пользователей API, это прозрачно – мы просто получаем результат или ошибку. Стоимость решения FunCaptcha у разных сервисов отличается, но она выше чем за простую капчу: в среднем порядка $2–3 за 1000 решений при ручном распознавании (точная цена зависит от выбранного сервиса и срочности) и до 1 доллара при автоматическом​. Но в расчете на одну штуку это всего несколько десятых цента – часто дешевле, чем тратить время на разработку собственного алгоритма.

Ограничения метода: главный минус – зависимость от стороннего сервиса и время ожидания. Несмотря на заявления о “мгновенном” решении, на практике среднее время ~20 секунд (при высокой нагрузке – дольше). Для интерактивных задач Arkose это критично: как я писал выше, если затянуть с ответом, капча может уже смениться. Впрочем, сервисы стараются учитывать это – многие решают FunCaptcha без прокси от имени своих серверов​, чтобы скорость была максимальной. Если сайт-цель строго привязывает решение к IP пользователя, может потребоваться режим с прокси: например, Anti-Captcha позволяет отправить задачу в браузер работника через указанный прокси, чтобы Arkose видела тот же IP, что и у пользователя бота​. Это дороже и дольше по времени, но иногда оправдывает себя.

Еще одно ограничение – новые виды задач. Когда Arkose выпускает новый тип головоломки, могут пройти дни или недели, прежде чем сервисы распознавания капчи научатся его решать. Например, в начале 2023 появилась версия FunCaptcha с так называемым MatchKey, и первые недели некоторые авто-солверы не справлялись – приходилось ждать обновления с их стороны​. В такие моменты бот-разработчики особенно чувствуют зависимость от внешнего решения. Тем не менее, для большинства практических случаев использование готовых сервисов – наиболее быстрый и надежный путь обойти “факапчу” без глубокого погружения в ее механику.

Open-source и DIY-решения: аудио-решатели, нейросети, скрипты GitHub

Вокруг FunCaptcha существует сообщество энтузиастов, которые пытаются создавать свои решения и делятся наработками. Рассмотрим несколько направлений таких DIY-подходов:

1. Распознавание через аудио. Исторически у многих капч слабое место – аудиоверсия (для слабовидящих). Некоторые сайты с FunCaptcha позволяют переключиться на аудио-вариант задания. Ранние версии Arkose действительно имели относительно простые аудио-голосовки (произнесенные цифры и т.п.). Это породило скрипты, которые автоматизировали аудио-режим: например, проект Funcaptcha-Audio-Solver загружает аудио-файл с Arkose, прогоняет его через сервис распознавания речи (Google Speech-to-Text или аналог) и отправляет расшифрованный ответ назад в капчу. Такой скрипт работает только на сайтах, где доступен аудио-вариант и где аудио-загадка сводится к распознаванию речи (цифр, букв)​. На многих популярных сайтах аудио-режим FunCaptcha может быть отключен или же сами аудио-задания сделаны в новом формате (например, “выберите звук, где поет одна птица” – и Speech-to-Text тут не поможет). Поэтому хотя open-source решение через аудио и существует, его применение ограничено. К тому же Arkose может определять подозрительно быстрое переключение на аудио и ответ за доли секунды как нечеловеческое поведение.

2. Нейросетевые решения (Computer Vision). Более амбициозное направление – обучить модель распознавать картинки FunCaptcha. Некоторые энтузиасты пробовали создавать датасеты и тренировать нейросети для конкретных задач, например, определять угол поворота животных или читать числа на игральных костях. Отдельные успехи достигались: в сети появлялись видео, где самодельная программа решает “вращающуюся капчу” за счет анализа изображения и эмуляции нажатия стрелок. Но, как отмечалось ранее, Arkose регулярно увеличивает вариативность. На форуме BlackHatWorld я находил такой кейс: у разработчика была собственная нейросеть, которая успешно решала несколько видов FunCaptcha, пока Arkose Labs не обновили механизм – после обновления (т. н. новая версия с MatchKey) решение сломалось, и автоматизация остановилась​. Основные трудности здесь – недостаток данных (нужно много примеров капчи для обучения) и громоздкость поддержки: как только выходит новый тип головоломки, модель требует доработки. Тем не менее, некоторые сервисы (например, SolveCaptcha, NopeCHA) инвестируют именно в ML-решения, что доказывает осуществимость подхода, хоть и ценой больших ресурсов.

Иногда нейросетевой подход сочетается с аудио: мне встречались описания попыток классифицировать тип звука (например, отличить звук барабанов от гудка) с помощью ML-моделей, чтобы решать новые аудио-вопросы Arkose. Но публичных открытых решений такого плана пока нет – в основном это внутренние разработки компаний и разработчиков энтузиастов.

3. Скрипты и библиотеки на GitHub для обхода механик Arkose. Помимо непосредственно распознавания головоломок, есть технические задачи: например, сгенерировать валидный fingerprint браузера или вычислить нужный tguess (match key) для ответа. Сообщество исследовало JS-код Arkose и выложило ряд утилит. Например, репозиторий unfuncaptcha содержит инструменты для работы с BDA (browser data) – можно формировать корректный fingerprint-пакет, чтобы капча “доверяла” окружению. Другой модуль tguess позволяет подсовывать Arkose Labs сгенерированный параметр проверки на основе того самого скрипта dapib​. Эти библиотеки не решают капчу целиком, но помогают тем, кто пишет своего бота: их применяют вместе с компьютерным зрением или даже с ручным решением. Проще говоря, open-source скрипты берут на себя сложные части (эмулировать поведение браузера, обойти защиту Arkose), а разработчик может сосредоточиться на распознавании задания.

Пример: можно запустить скрытый браузер (Chromium) через Puppeteer, загрузить FunCaptcha, с помощью скриптов с GitHub отключить некоторые проверки Arkose (подсунув свой fingerprint), извлечь изображение задания (например, спарсить <canvas> или скриншот), отправить это изображение на свой решатель или даже в сервис типа SolveCaptcha (который по изображению вернет координаты клика​), затем эмулировать клики или нажатия стрелок в браузере. Такие гибридные схемы – скорее исследовательские, их реализуют продвинутые разработчики под свои нужды. В открытом доступе есть проекты, демонстрирующие подобную автоматизацию, однако они часто быстро устаревают, поскольку Arkose закрывает выявленные лазейки.

Вывод по DIY: Самостоятельно решить FunCaptcha “с нуля” – очень нетривиальная задача. Open-source наработки могут покрыть отдельные части проблемы, но требуют времени на разбирательство и настройку. Аудио-решатели просты, но подходят далеко не везде. Нейросети перспективны, но требуют большого объема данных и вычислительных мощностей для обучения, не говоря уже о поддержке. Поэтому DIY-подход оправдан либо в учебных/исследовательских целях, либо если вы работаете над серьезным проектом, где масштаб и безопасность диктуют отказаться от платных сервисов и создать свое решение (например, в антиспам-системах крупных компаний). В остальных случаях, скорее всего, выгоднее воспользоваться уже готовыми сервисами или хотя бы их API, чем пытаться полностью воспроизвести человеческое поведение своими силами.

Автоматизация с помощью браузера (Selenium и др.)

Третий подход – не пытаться “разгадать” капчу интеллектуально, а эмулировать реального пользователя, выполняющего задание. По сути, это напоминает автоматизацию UI-тестирования: мы программно управляем настоящим браузером (через Selenium, Playwright, Puppeteer), который загружает страницу и капчу, и стараемся пройти ее так же, как прошел бы человек.

Простейший вариант – вообще не решать автоматически, а вывести капчу человеку-оператору. Например, некоторые боты способны при возникновении FunCaptcha передавать управление на удаленный интерфейс, где сидит сотрудник, решает головоломку, после чего скрипт продолжается. Но это уже не полностью автоматическое решение, к тому же такая схема мало масштабируется.

Нас больше интересует полностью автоматизированный сценарий в браузере. Возможны разные реализации:

  • Комбинация с сервисом распознавания. Здесь Selenium используется, чтобы корректно загрузить капчу и дождаться появления нужных элементов (public key, etc.). Далее скрипт может собрать параметры и отправить задачу в 2Captcha (как описано ранее) или в SolveCaptcha, получить токен и вставить его на странице. То есть браузер выполняет роль “держателя контекста”, а решает задачу внешний сервис. Этот способ довольно надежен: он гарантирует, что все нужные JS Arkose отработают (сгенерируют fingerprint, session и пр.), а мы просто подставим готовое решение. В среде Selenium можно прописать ожидание (WebDriverWait) появления скрытого поля fc-token, затем заполнить его решенным токеном и выполнить сабмит. Такой метод часто применяют на практике, особенно когда нужно автоматизировать целый сценарий взаимодействия с сайтом, а не только капчу.

  • Полностью свой решатель капчи внутри браузера. Более сложный вариант – писать логику решения в коде, который управляет браузером. Например, определить, что за задача отображена, и выполнить соответствующие действия:

    • Если это головоломка с вращением объекта – проанализировать изображение (можно получить canvas из DOM или сделать скриншот элемента) и вычислить, насколько повернут объект. Были попытки вычислять угол наклона животных с помощью OpenCV-шаблонов или специализированных моделей. Затем эмулировать нажатия стрелок в Selenium (посылая send_keys или через JS) нужное число раз и нажать "Verify".

    • Если задача с выбором картинок (например, “выберите все изображения, на которых есть X”) – можно вытащить каждое подизображение, прогнать через модель классификации (или воспользоваться API типа SolveCaptcha, который по base64-картинке вернет, какие из 6 изображений отмечать​), а потом с помощью Selenium кликнуть по нужным элементам.

    • В случае сложных многоэтапных игр (как загадка с местами в самолете, где нужно перемещать фигурку по рядам) – это еще больший вызов. Потребовалось бы распознавать текстовые метки (ряд/место), понимать, куда кликать стрелками. Теоретически возможно прописать детерминированный алгоритм под конкретную игру, но каждое новшество Arkose свело бы такую систему на нет.

Как видно, универсальный браузерный бот для Arkose почти сопоставим по сложности с написанием DIY-решения из предыдущего раздела. Разница лишь в том, что тут мы используем реальный браузер (минимизируя проблемы с fingerprint и MatchKey, т.к. штатный JS Arkose отрабатывает как у обычного пользователя). Но сам этап “принятия решения” все равно ложится на наш код.

Зато управление браузером дает некоторые преимущества:

  • Можно собирать данные “на лету” (например, делать скриншоты), отлаживать по шагам, визуально видеть, что капча отобразилась.

  • Selenium/Playwright позволяют задать профиль браузера, чтобы выглядело более правдоподобно (загрузить необходимые куки, включить видео/звук для решения аудио).

  • В случае с комбинацией сервисов: можно заранее запускать процесс решения параллельно. Например, открываем страницу, сразу вытаскиваем ключи и шлем на 2Captcha, пока капча анимировано отображается – возможно, часть времени перекроется и общее ожидание будет меньше.

Ограничения: чисто браузерная автоматизация очень чувствительна к изменениям интерфейса. Любое обновление фронтенда Arkose (изменение селекторов, логики переходов между этапами) может сломать скрипт. Также браузер – это ресурсоемко: запускать сотни потоков Selenium, каждый из которых крутит 3D-анимацию, нереально (в то время как условная 2Captcha может параллельно решать тысячи капч на своих серверах). Поэтому такой подход годится либо для относительно небольшого числа задач, либо в случаях, когда интеграция с внешними API недопустима по соображениям безопасности и тп.

На практике часто используется гибридный вариант: браузер + капча-сервис. Он относительно прост: Selenium скрипт логирует в консоль или файл найденный public key и прочие параметры, затем внешняя система (человек или другой процесс) вызывает API распознавания, получает токен и вводит его через Selenium. Такой сценарий распространен среди тех, кто делает ботов для специфических целей (регистрация аккаунтов, парсинг данных за защищенными формами) – он уменьшает риск ошибок, связанных с fingerprint, поскольку браузер выполняет “честное” прохождение, и нам остается только обеспечить правильный токен решения.

Ограничения и сложности методов обхода

Подведем итог ограничениям каждого подхода:

  • Сервисы распознавания: зависимость от сторонней платформы, время ожидания решения (обычно 15–30 сек), возможная неработоспособность при вводе новых капч Arkose (пока сервис не адаптируется). Также есть небольшой риск, что сайт узнает о факте использования solver-сервиса – например, Arkose передает сайту информацию об IP решающего. Если вы используете решение без прокси, сайт может увидеть, что капчу решил не ваш IP, а какой-то дата-центр​. В некоторых случаях это может привести к дополнительной проверке. Решение – использовать режим с прокси (когда сервис решает с IP вашего региона) или выбирать сервисы, заявляющие полную незаметность. Стоимость – тоже фактор: если вы решаете тысячи капч ежедневно, даже $3 за 1000 превращаются в заметные суммы.

  • Open-source/самописное решение: требует высокой технической экспертизы и времени. Аудио-способ ограничен доступностью аудио-варианта и простотой самих загадок (современные аудио Arkose слишком сложны для тривиального распознавания). Нейросетевые решения – длительная разработка, постоянная поддержка и обновление модели. Кроме того, тестировать такую систему сложно: для отладки приходится воспроизводить работу капчи в контролируемых условиях, что само по себе непросто (Arkose может не давать много попыток с одного IP, либо придётся эмулировать их API). В результате многие публичные скрипты либо устарели, либо решают лишь часть задачи (например, только генерируют токены, но не распознают изображение).

  • Автоматизация браузера: основной минус – низкая скорость и масштабируемость. Один браузер выполняет одну капчу за раз, нагружая CPU/GPU. Масштабировать на десятки потоков – тяжело. Кроме того, Selenium веб-драйверы иногда детектируются – Arkose вполне может определить Headless Chrome и либо усложнить для него задачу, либо вовсе блокировать (правда, Arkose заявляет соответствие WCAG и поддержку скринридеров, так что полностью запрещать автоматизацию им невыгодно). Но headless-браузер без правильного приведения окружения может выдавать аномальные параметры (например, отсутствует реальная видеокарта для WebGL), что повысит подозрения. Все это делает подход нуждающимся в тонкой настройке.

Важно понимать, что ни один метод не дает 100% гарантии прохода Arkose. Разработчики FunCaptcha активно борются с обходом: вводят новые головоломки, анализируют траектории курсора, могут задавать последовательность из нескольких этапов (например, решить 2–3 мини-игры подряд). Часто реализуется принцип: если есть сомнения в трафике, капча становится сложнее или повторяется больше раз. Поэтому у бота может уйти, скажем, 5 решенных токенов, чтобы наконец система сочла его успешным (после отправки токена сайт иногда возвращает новую капчу – возможно, как реакцию на подозрительность)​. Это нужно учитывать при планировании автоматизации – быть готовым к нескольким итерациям или отказу.

С другой стороны, Arkose Labs стремится не задушить пользователя: слишком жесткая капча отпугнет и “хороших” юзеров. Они балансируют между сложностью и юзабилити​. Для нас это означает, что при умеренных попытках обхода шанс успеха все же остается – особенно если грамотно комбинировать методы.

MatchKey и новые меры защиты Arkose Labs

Отдельно стоит поговорить о MatchKey – так Arkose Labs называет свой обновленный комплекс защит для капч нового поколения. По сути, MatchKey – маркетинговое название улучшенной FunCaptcha, вобравшей в себя все лучшие практики против ботов. Что включает этот механизм:

  • Ещё более разнообразные задания. Как уже упоминалось, 3D-капчи Arkose теперь генерируются с огромным числом вариаций (более 1250)​. Например, в задачах с поворотом могут меняться модели (разные животные, предметы), фон, направление, дополнительный отвлекающий контент. В логических задачах (“найди правильный объект”) – множество комбинаций и совершенно разный визуал. Такая вариативность бьет по методам машинного зрения: решить одно-два статичных задания можно, но покрыть тысячи вариантов – практически нереально без огромной обучающей выборки​.

  • Комбинация мультимодальных проверок. MatchKey-челленджи могут объединять несколько типов проверок. Например: сначала пользователь решает визуальную головоломку, сразу вслед за ней – короткую аудио-загадку. Или в процессе визуальной задачи (перемещения объекта) также должно срабатывать некоторое скрытое условие (например, последовательность действий, которую бот повторить не сможет). Таким образом, для прохождения нужно одновременно преуспеть на нескольких фронтах, что резко снижает вероятность случайного автоматического обхода.

  • Динамический ключ ответа (match key). Под этим подразумевается уже упомянутый ранее принцип: простой ответ “да/нет” на сервер не отправляется. Вместо этого ответ снабжается криптографическим или вычисляемым ключом, подтверждающим, что решение получено честно. Arkose Labs на своем сайте заявляет MatchKey как “самую сильную CAPTCHA из существующих” именно благодаря этой challenge-response схеме​. Для бот-разработчика это означает необходимость запускать сторонний код и вычислять дополнительный параметр для каждого ответа. Как пример – механизм tguess: при каждой попытке вращения объекта Arkose дает уникальный скрипт, который должен обработать ваш “guess” (угаданный ответ) и выдать контрольное значение​. Без этого контрольного значения сервер не примет решение как верное. Проще говоря, даже если бот визуально определил правильно, куда кликать, ему нужно еще сгенерировать правильный “сопровождающий ключ”, тесно связанный с внутренней логикой Arkose. Это значительно повышает барьер входа для автоматизации.

  • Улучшенная работа с аудио. Arkose MatchKey включает более 20 видов аудио-вопросов​, отходя от простого диктанта. Например, как уже было, пользователь должен прослушать несколько звуков и ответить на вопрос, который предполагает понимание чему звук принадлежит (где звук пчелы, где барабаны и т.д.). Причем аудио генерируются с разными шумами, вариациями, возможно даже меняются от сеанса к сеансу. Они утверждают, что это крупнейшее разнообразие аудио-капч в индустрии​. Это значит, что стандартный обходной вариант – скачал аудио и отдал Speech API – больше не помогает. Нужно решать задачу аудиального распознавания на уровне классификации смыслов, что близко к задаче обучения ИИ.

  • Тестирование против ботов. Arkose активно тестирует свои новые задачи на новейших алгоритмах машинного обучения​. По их заявлениям, они знают точно, сколько данных и усилий потребуется, чтобы обойти каждую их защиту, и стараются сделать так, чтобы затраты для злоумышленников были экономически невыгодны. Например, если для надежного решения одной капчи нужен полугодовой труд команды и инфраструктура за миллионы долларов – мало кто будет этим заниматься ради спама на сайте с Arkose. Конечно, со временем мощность алгоритмов растет, но Arkose тоже не стоит на месте.

В совокупности MatchKey делает FunCaptcha очень стойкой. Однако “неприступных крепостей” не бывает. Уже спустя некоторое время после выхода MatchKey-капч появились улучшенные решения от анти-капча сервисов и новые находки энтузиастов. Просто теперь это гонка вооружений: Arkose усложняет – разработчики ищут тонкие места – Arkose снова их прикрывает.

Для человека же принципиальных изменений нет: как были забавные 3D-картинки, так и остались. Разве что их тематика стала еще более разнообразной, и, как отмечают пользователи, решать Arkose капчи часто даже проще, чем разбирать цифры на смазанной рекапче – сказывается акцент на UX. Правда, если система посчитает вас ботом, она может “подвесить” на вас несколько раундов капчи подряд, что уже утомительно (например, 5 разных головоломок одну за другой)​. Но обычному пользователю такое почти не грозит – Arkose оценивает риск по множеству параметров и подавляющему большинству реальных людей дает пройти проверку быстро.

Какой метод решения использовать и когда

Мы рассмотрели три подхода к обходу FunCaptcha. Какой же выбрать? Это зависит от ваших целей, ресурсов и ограничений:

  • Если вам нужно быстро и надежно автоматизировать небольшое количество действий (например, написать скрипт для личного использования или разового парсинга), то оптимально воспользоваться API платного сервиса. За символическую плату вы получаете абстракцию над всей сложностью. 2Captcha, Rucaptcha, SolveCaptcha и прочие сейчас умеют решать большинство задач Arkose Labs. Интеграция займет считанные минуты, а поддерживать ничего не нужно – сервис сам будет обновляться, при появлении нововведений, чтобы не отставать от Arkose. Этот вариант хорош и для прототипирования: можно сначала подключить внешний решатель, а уже потом, если понадобятся оптимизации, думать о собственном решении.

  • Если вы ограничены в средствах, и объем капч большой, можно попробовать open-source подходы. Например, при массовой рассылке SMS может быть накладно платить за каждую капчу – тогда имеет смысл инвестировать время в свое решение. Аудио-скрипт может быть внедрен как запасной вариант: вдруг на сайте есть аудио-капча – тогда вы ее пройдете вообще бесплатно, без обращения в сторонний сервис. Но надеяться только на аудио нельзя. Обучение нейросети “под себя” – вариант для энтузиастов или крупных игроков (например, разработчики спам-ботов теоретически могут попытаться построить модель под конкретный вид FunCaptcha, если таргетируют один сайт). Учтите, что поддержка такой модели – постоянный процесс, потребующий мониторинга капчи и обновления датасета.

  • Если вы интегрируете Arkose Labs FunCaptcha в свой сервис как проверку, и хотите протестировать прочность – можно написать Selenium-скрипт, который с помощью ваших же production-скриптов будет пытаться ее проходить. Это поможет выявить слабые места. Здесь, конечно, не стоит выкладывать решение в открытый доступ, но вы можете в контролируемых условиях оценить, как сложно боту пройти вашу капчу.

  • Автоматизация через браузер полезна, когда вам нужно именно воспроизвести последовательность действий пользователя целиком. Скажем, вы автоматизируете тестирование сайта, где на определенном шаге всегда возникает FunCaptcha. В тестовом окружении можно отключить капчу, но если нет – то приходится решать и ее. Использовать облачный сервис на каждый прогон тестов может быть неудобно (например, тесты запускаются часто, и вы не хотите зависеть от внешних API). Тогда можно встроить решение капчи в сам тест: например, подключить библиотеку NopeCHA или аналог прямо в браузере – она будет локально анализировать картинки (с помощью ML-модели) и кликать по ним. Это избавит от сетевых задержек и внешних зависимостей, но потребует загрузки ML-модели в среду браузера.

  • Когда важна скорость и масштаб, а бюджет не ограничен, имеет смысл комбинировать подходы: например, основной поток решений пускать через платный сервис (ИИ + люди), а параллельно исследовать возможности снизить затраты – либо через встроенное решение простых кейсов, либо через оптимизацию параметров (например, заранее прогревать Arkose сессии, чтобы реже выпадали сложные задания). 

В реальности часто используются гибридные стратегии. Например, некоторые разработчики сначала пытаются решить FunCaptcha своими силами (напрямую крутя браузер), и только если не получается за N секунд – отправляют задачу на 2Captcha как запасной вариант. Такой подход может чуть сэкономить деньги, но требует внимательно отслеживать эффективность.

FunCaptcha от Arkose Labs – один из самых продвинутых и “непробиваемых” видов капчи на сегодняшний день. Она эволюционировала от простых вращающихся картинок до целого набора многоуровневых испытаний (MatchKey), бросающих вызов самым современным ботам. Но способы ее распознавания существуют, и регулярно обновляются.

Теги:
Хабы:
+1
Комментарии2

Публикации