hCaptcha на сайтах, защищенных алгоритмами Cloudflare

Cloudflare

Что произошло?

Недавно Cloudflare изменил способ обработки токенов hCaptcha, полученных в результате решения капчи. Сейчас токены отправляются не в виде обычного текста внутри HTTP-запроса на сервер, как это было раньше. Теперь токены шифруются с помощью callback-функции на javascript перед отправкой.

Как это работает сейчас?

Когда вы решаете hCaptcha, токен передается в callback-функцию, которая задана внутри обфусцированного javascript кода, загружаемого из /cdn-cgi/challenge-platform/h/b/orchestrate/captcha/v1.

Сallback-функция использует данные, определенные внутри javascript кода, и применяет определенную логику для шифрования токена вместе с дополнительными данными перед их отправкой на серверную часть:/cdn-cgi/challenge-platform/h/b/flow/ov1/.

Могу ли я обойти hCaptcha на сайтах, защищенных Cloudflare, с помощью 2Captcha API?

Да, можете. Наше расширение для Google Chrome 2Captcha Solver делает это автоматически. Вы можете попробовать использовать его, чтобы удостовериться, что оно работает в вашем случае.

Есть ли простой способ обойти hCaptcha на странице, защищенной Cloudflare?

Нет, простого способа не существует. Чтобы обойти hCaptcha, вы должны понимать, как токен шифруется javascript кодом. Наше расширение для Google Chrome 2Captcha Solver может помочь вам найти код callback-функции.

Просто установите расширение и активируйте его, затем откройте сайт, на котором вы хотите решить hCaptcha. Затем, в коде сайта найдите элемент captcha-widget и изучите его. Помимо прочего, в нём будет описан атрибут data-callback, содержащий копию callback-функции. Теперь, когда вы знаете имя функции, вы можете использовать его в консоли javascript, чтобы перейти к определению функции и изучить её код. Этот код обфусцирован, но вы можете установить несколько точек останова и определить выражения для отслеживания (watch expressions) для понимания происходящего.

Может ли 2Captcha помочь мне с этими сложностями?

К сожалению, нет, мы не можем взять это на себя. Мы можем решить саму капчу и предоставить вам валидный токен в качестве решения капчи, остальную работу вы должны выполнить самостоятельно.

И что же мне делать?

По нашему мнению, наиболее эффективный способ - это использование javascript-инъекции для переопределения метода hcaptcha.render.

Сохраните исходную render-функцию внутри переменной, а затем используйте свою собственную функцию, которая перехватит аргументы container и params, а затем вернёт исходную render-функцию.

Теперь можно распарсить аргументы вашей функции, чтобы получить определение обратного вызова из data-callback, который, в свою очередь, находится в params. Затем вызовите найденную callback-функцию, передав токен с решением капчи в качестве единственного аргумента.

Есть и альтернативное предложение: полностью деобфусцировать код callback-функции, чтобы понять, что именно функция берет и использует для генерации данных, передаваемых затем в запросе к /cdn-cgi/challenge-platform/h/b/flow/ov1/.

Мы также рекомендуем посмотреть репозиторий cfresearch repo, где Steven scaredos публикует свои исследования по алгоритмам защиты CloudFlare.