Капча стала привычным элементом интернета: искажённые тексты, картинки с «найди все светофоры», аудио-загадки и другие испытания, которые призваны отличить человека от машины. Каждый разработчик бот-систем или QA-инженер при автоматизации веб-сценариев хоть раз сталкивался с тем, что скрипт внезапно спотыкается о CAPTCHA. Возникает естественный вопрос: можно ли научить программу решать капчи так же, как это делает человек, – причём быстро и надёжно? В этой статье я попробую разобраться, как устроены ИИ-решатели капчи (AI CAPTCHA solver) – от классических методов OCR до современных нейросетей.

Виды CAPTCHA и почему их сложно пройти ботам

Прежде чем ломать капчу, посмотрим, какими они бывают и в чём их сложность для алгоритмов. CAPTCHA (Completely Automated Public Turing test to tell Computers and Humans Apart, полностью автоматизированный публичный тест Тьюринга для различия компьютеров от людей) представлена множеством форм. Основные типы можно классифицировать так:

  • Текстовые капчи – классические изображения с искажёнными символами (буквами, цифрами), которые нужно ввести вручную. Раньше такие задачки решались методами OCR (оптического распознавания символов). Однако с усилением искажений и шума простое распознавание стало затруднительно: символы накладываются, изгибаются, покрываются помехами специально против сегментации и распознавания. Это создаёт проблему для бот-программ, ведь компьютер должен суметь выделить и опознать каждый символ, что нетривиально без обучения.

  • reCAPTCHA v2 (Google) – всем знакомый вариант: чекбокс «I'm not a robot» (который анализирует поведение пользователя), а при подозрении – всплывающее окно с сеткой из картинок 3×3, где нужно выбрать изображения по заданному критерию (например, все квадраты с машинами). Эта капча совмещает поведенческий анализ и визуальную задачу классификации объектов на изображениях. Ботам сложно, потому что нужно понять содержимое изображений – задача из области компьютерного зрения.

  • reCAPTCHA v3 и Cloudflare Turnstile – невидимые капчи нового поколения. Не требуют от пользователя никаких действий: система на бэкенде анализирует множество параметров поведения, окружения, браузера и выставляет скрытый рейтинг «подозрительности». Если рейтинг низкий – пользователь считается человеком, если высокий – может последовать дополнительная проверка. Для бота это сложный барьер, так как нужно имитировать человеческое поведение по множеству сигналов, а не решить конкретную головоломку.

  • hCaptcha и FunCaptcha – альтернативные капчи от других сервисов (Cloudflare, Arkose Labs). По сути похожи на reCAPTCHA v2: пользователь получает либо набор картинок для классификации, либо интерактивную задачу (например, вращать 3D-объект или отыскать элемент). Каждая такая система добавляет свои вариации визуальных пазлов.

  • GeeTest и другие пазлы – популярны в азиатских сервисах варианты с кусочками пазла (нужно сдвинуть фрагмент картинки в правильное положение), перетасовкой частей изображения, простыми вопросами или слайдерами. Например, капча-пазл предлагает совместить вырезанный фрагмент с отверстием на изображении, что требует координации и понимания изображения. Для ботов это трудно, т.к. нужно и распознавание образов, и симулирование человеческого ввода (движение мыши).

  • Аудио-CAPTCHA – обычно дополняет визуальную капчу для пользователей с ограниченным зрением. Проигрывается искажённая аудиозапись с числами или словами, которую нужно разобрать и ввести. Считается, что людям проще распознать речь с помехами, чем машинам. Однако и эти капчи небезупречны: исследователи из Стэнфорда научились автоматизированно взламывать аудио-капчи с вероятностью до 75% с помощью алгоритмов распознавания речи. С появлением мощных моделей ASR (Automatic Speech Recognition) аудиозагадки уже не гарантируют защиту.

  • Поведенческие и невидимые капчи – я уже упомянул reCAPTCHA v3, Turnstile, а также существуют скрытые тесты, интегрированные в сайт (например, honeypot-поля, которые заполняют только боты, или анализ скорости заполнения формы). Всё это капчи нового типа, проверяющие естественность действий пользователя. Здесь ботам противостоит не конкретная загадка, а необходимость притвориться реальным пользователем: двигать мышь «по-человечески», ждать случайные задержки, обладать «чистым» браузером. Такие методы труднее обойти напрямую алгоритмом, поэтому нужны обходные пути – например, поучение токена reCAPTCHA через API или базы браузерных отпечатков.

Более подробно можно посмотреть в моей предыдущей статье - какие виды капчи бывают.

Каждый вид CAPTCHA требует особого подхода для решения. Универсальный капча решатель до сих пор остаётся вызовом: бот-система должна уметь распознавать текст, классифицировать картинки, синтезировать поведение – в зависимости от того, какая проверка встретилась. Перейдём к тому, как капчи пытаются решать алгоритмы и эволюции этих методов.

От OCR к нейросетям: эволюция взлома CAPTCHA

Первые попытки автоматического решения капч были тесно связаны с развитием OCR (оптического распознавания символов). Классическая текстовая CAPTCHA – искажённые буквы/цифры на шумном фоне – по сути предназначена ломать голову именно OCR-системам. Старые версии капч могли быть взломаны относительно простыми методами: фильтрацией изображения, выделением контуров, сегментацией на отдельные символы и сравнением с шаблонами или применением стандартных OCR-движков вроде Tesseract. Например для некоторых простых капч можно вообще обойтись и без «интеллекта»: достаточно наложить несколько образцов цифр друг на друга и получить маску, уникальную для каждого символа, которой и находят совпадения на картинке. Однако такие трюки годятся лишь для самых примитивных и однообразных капч.

Усложнение капчи vs. улучшение алгоритмов. Создатели капч отвечали на взломы увеличением сложности: символы стали сильнее искажать, накладывать цветной шум, фоновые узоры, делать шрифт непостоянным. Появились капчи со слипающимися символами, где буквы перекрывают друг друга. Всё это затрудняло сегментацию – ключевой этап для классического OCR. В игру вступило машинное обучение: исследователи начали обучать модели различать символы капчи, даже в шуме. Ещё в 2000-х появились работы, где применяли SVM и другие алгоритмы для распознавания конкретных генераторов капч. Но прорыв случился с появлением глубокого обучения.

В 2014 году команда Google опубликовала новость о сенсационном результате: их нейросеть научилась решать самые трудные текстовые капчи с точностью 99,8% (какая ирония, Гугл сам стал пионером в области распознавания защиты, которую фактически они же и придумали - я про рекапчу). Фактически, машина превзошла человека в том, что когда-то задумывалось как чисто человеческая задача! Это сразу сделало текстовые искажения бесполезными – если алгоритм может читать символы лучше людей, то такая защита теряет смысл. Вероятно еще и поэтому Google быстро перевёл reCAPTCHA с рябых текстов на картинки и оценку поведения пользователя.

Относительно моей первой фразы в данном абзаце, напрашивается еще и такая мысль - если бы не тщеславие одних и глупость других, может мы бы до сих пор находились бы в точке, когда появилась reCaptcha или даже простые текстовые капчи. Ведь как только какой то энтузиаст находил решение, он тут же, со скоростью света выкладывал его на всеобщее обозрение и соответственно это побуждало разработчиков капчи усложнять ее… Язык мой - враг мой…

Похожий сюжет разворачивается и с капчами на картинках. Изначально предполагалось, что распознавать, скажем, светофоры на фото компьютерам сложнее, чем людям: у людей развито зрительное восприятие. Но с революцией в компьютерном зрении (глубокие сверточные сети) эта асимметрия исчезла. Современная модель классификации изображений способна с высокой точностью определять объекты – достаточно вспомнить, как точно ваш телефон распознает на фото животных, знаки и другие объекты. Свежий пример: с 2024 года с помощью продвинутой модели YOLO можно находить светофоры и другие изображения reCAPTCHA v2 во всех 100% случаев, тогда как ранее лучшие результаты были в пределах ~70%. Более того, ИИ-боту теперь приходится проходить столько же картинок, сколько и среднему человеку, прежде чем система его пропустит. Хотелось бы верить, что лозунг: «мы официально вступили в эпоху после капч», где классические проверки уже не способны отличить человека от умной машины наконец настал, но есть ощущение что это еще не конец.

Важно понимать: глубокое обучение не просто повысило точность – оно изменило сам подход к решению CAPTCHA. Раньше скрипт должен был выполнять ряд жёстких шагов: отфильтровать фон, разделить символы, распознать их по отдельности. Теперь же нейросеть можно обучить end-to-end: подаешь ей картинку капчи – на выходе сразу строка текста (или вероятность нужного класса для картинки). Вспомогательные задачи, как сегментация, сеть может научиться выполнять внутренне, без ручного кодирования правил. Например, архитектура DenseNet с вариацией DFCR, пришедшая из Китая (откуда же еще, как не из страны явившей миру порох, правда?), достигла точности >99,9% на капчах с шумом и слипшимися символами – за счёт того, что глубокая сверточная сеть сама научилась видеть отдельные символы даже в сложном случае и уверенно их классифицировать.

Для наглядности, небольшая таблица:

Подход к взлому капчи

Классический (OCR, скрипты)

Современный (ИИI/нейросети)

Требования

Правила фильтрации, библиотеки OCR, шаблоны. Требует ручной настройки под каждую капчу.

Обученная ML-модель (CNN/RNN). Требует датасет для тренировки, но потом работает универсальнее.

Сегментация символов

Необходима: отдельный поиск границы каждого символа перед распознаванием. Частый сбой при помехах или соединённых буквах.

Явно не нужна: end-to-end модель распознаёт текст сразу целиком, скрыто сегментируя по внутренним признакам. Даже слипшиеся символы распознаются правильно.

Точность на сложных капчах

Ограничена, часто <90% на сильных искажениях. Для повышения приходится дописывать эвристики под конкретный случай.

Близка к 100% при достаточном обучении. Ошибается реже человека на типовых задачах, но может быть уязвима к совсем новым типам, не входившим в обучающие данные.

Адаптивность

Плохо переносится на новые виды капч: нужна переработка кода/логики.

Можно дообучить на новых данных. Универсальные архитектуры (например, ResNet, Transformer) применимы к разным задачам.

Скорость решения

Высокая (миллисекунды), т.к. алгоритмы простые. Но на сложных капчах может тратить время на попытки сегментации.

Высокая: нейросети выполняют распознавание за десятки миллисекунд на GPU. Узкое место – подготовка данных и, в случае сервисов, очередь задач (о чём далее).

Как видно, ИИ превзошёл классические методы в гибкости и эффективности. Но как именно нейросети решают проблему капчи? Рассмотрим основные типы архитектур, которые применяются для взлома разных капч.

Нейросети против капчи: CNN, RNN, CRNN, Transformers

Современные AI CAPTCHA solver-ы опираются на богатый арсенал моделей глубокого обучения. Выбор архитектуры обычно зависит от типа капчи. Вот основные ключевые подходы:

Сверточные нейронные сети (CNN) – специализируются на изображениях. CNN научились вытягивать из картинки значимые особенности: контуры букв, текстуры, формы объектов. Поэтому на капчах их используют прежде всего для распознавания символов или классификации картинок. Более простой вариант: обучить сверточную сеть распознавать отдельный символ (0–9, A–Z) – тогда сначала изображение капчи нужно нарезать на символы. Более продвинутый вариант – прогонять всю капчу целиком через CNN, получая признак для каждого участка изображения. Например, можно скормить CNN горизонтальную «полосу» изображения и получить активации, соответствующие разным позициям символов. Однако сами по себе CNN не моделируют последовательность символов, поэтому в сложных капчах их дополняют рекуррентными слоями.

Рекуррентные нейронные сети (RNN) – семейство сетей, способных обрабатывать последовательности (ряды данных). В контексте капч RNN применяли для считывания текста слева направо, как делает человек. Например, можно сначала извлечь из картинки признаки (векторные представления столбцов изображения) и подать их RNN, которая последовательно «читает» их и выдаёт последовательность символов. Классические модули – LSTM или GRU – могут запоминать контекст, что полезно, если символы влияют друг на друга (скажем, алгоритм пытается учесть вероятности сочетаний букв). RNN особенно полезны для динамических или последовательных капч: например, когда пользователь вводит несколько цифр, появляющихся по одной, или для озвученных капч (где последовательность звуков нужно преобразовать в последовательность символов). Тем не менее, по отдельности RNN с картинками работают хуже, поэтому часто их соединяют с CNN.

CRNN (Convolutional Recurrent Neural Network) – комбинация CNN и RNN, ставшая де-факто стандартом для распознавания текстовых капч и вообще текстов на изображениях. Типичная схема: сверточная сеть (например, несколько слоёв сверточные + пулинговые) извлекает из изображения капчи карту признаков, которую можно трактовать как последовательность признаков по ширине картинки. Далее идёт рекуррентный блок (часто BiLSTM – двунаправленная LSTM), который обрабатывает эту последовательность признаков и учитывает контекст соседних символов. Выход RNN затем преобразуется в прогноз последовательности символов. Для обучения такой модели часто используют CTC-loss (Connectionist Temporal Classification), который позволяет соотнести произвольную длину выхода сети с реальной строкой текста капчи. Благодаря CTC, модель не требует идеального разделения на символы – она сама обучается «растягивать» выход под нужную длину. Итог: CRNN может читать капчу целиком, даже если символы перекрываются или их количество разнится от капчи к капче.

В реальных проектах CRNN неоднократно демонстрировали свою эффективность. К примеру, обученная на сгенерированных 20к синтетических капчах модель CNN+BiLSTM показала высокую точность на ранее невиданных капчах, причём модель угадывала даже символы с незнакомыми искажениями. А при сравнивании с классическим подходом (разделение картинки капчи на 5 частей и классифицировании каждого фрагмента отдельной CNN-моделью) end-to-end модель с LSTM гораздо надёжнее и легче обобщала разные шрифты.

Трансформеры и внимание – новейший класс моделей, завоевавший NLP и CV. В контексте капчи трансформеры применяются пока в исследовательских целях, но потенциал огромный. Transformer хорошо умеет работать с последовательностями без рекуррентности, за счёт механизма само внимания (self-attention). Например, можно взять Vision Transformer (ViT) – разбить изображение капчи на пачки, пропустить через слои self-attention, получив векторы признаков. Далее применить текстовый декодер (ещё один трансформер), который будет генерировать текст по картинке, «внимательно» смотря на нужные области изображения через механизм внимания. По сути, это схоже с тем, как большие модели сейчас описывают картинки текстом. Уже есть примеры, где трансформеры успешно применялись для взлома капч: так, архитектура на основе Swin-Transformer показала >90% точности на сложных текстовых капчах, опередив классические CNN+RNN. А в 2023 году были попытки привлечь большие языковые модели (LLM) для логических капч, правда точность оставила ожидать лучшего ~63%. Но тренд ясен: Трансформеры способны объединить зрение и язык, решая даже капчи с описанием сцен или сложными вопросами.

Generative Adversarial Networks (GAN) – хотя GAN-ы напрямую не «решают» капчу, они внесли вклад с другой стороны. Идея GAN – соревновательное обучение генератора и дискриминатора – применялась для генерации капч, близких к реальным, с целью улучшить обучение решателей. Идея проста - генератор создаёт капчу изображения, а дискриминатор (по сути, решатель капчи) пытается отличить сгенерированную от настоящей. По мере обучения генератор начинает выпускать всё более трудные для дискриминатора капчи – фактически, сеть учится на автоматически создаваемых «сложных» примерах, помогающих повысить точность распознавания. Такой подход позволяет получать неограниченное количество обучающих данных и адаптироваться к новым видам искажения капч. 

Практика: инструменты и сервисы для решения CAPTCHA

Теория – это интересно и даже местами не скучно, но как применять всё вышесказанное на практике? Давайте рассмотрим существующие инструменты, от открытых библиотек до коммерческих сервисов, которые позиционируются как ИИ решатели капчи.

Open-source: GitHub и сообщества исследователей

За последние годы сообщество выложило множество проектов, демонстрирующих обход разных капч. Достаточно поискать на GitHub запросы вроде “captcha solver ai” или “AI captcha solver GitHub”, и найдутся десятки репозиториев. Как правило, это либо исследовательские проекты, либо утилиты, заточенные под конкретную капчу.

  • Решатели текстовых капч на нейросетях. Например, один из проектов (репозиторий CAPTCHA-Solver) подробно описывает построение модели CNN+BiLSTM. Авторы генерируют набор из ~20k синтетических капч (случайные буквы и цифры, с разными шрифтами, линиями помех) и обучают модель распознавать последовательности длины 5. В коде применяются фреймворки PyTorch и TensorFlow, а для обработки изображений – OpenCV, Pillow. Используя библиотеку pytesseract как контроль, сравнивают качество. В итоге обученная модель успешно решает >95% капч из тестовой выборки за доли секунды, тогда как стандартный OCR ошибается на большинстве сложных искажений. Подобные проекты выкладывают и датасеты – например, вот открытый датасет ~30к капч с mail.ru и скрипты для обучения модели под них.

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

  • Браузерные расширения и скрипты для обхода капч. В веб-автоматизации известны инструменты, которые можно настроить в Selenium/Puppeteer. Например, open-source расширение Buster (для Chrome/Firefox) умеет автоматически жать кнопку «прослушать аудио» в reCAPTCHA и слать аудиофайл на Google Speech-to-Text API – полученный текст вводится обратно, обходя капчу бесплатно или расширение для решения популярных видов капчи SolveCaptcha которое решает капчу с помощью ИИ, своими внутренними алгоритмами. 

Другой пример – библиотека 2captcha-solver (npm, Python) интегрируется с сервисом 2Captcha, чтобы в скрипте из кода отправлять капчу на решение и получать ответ. На GitHub есть тема captcha-solving с подборкой таких инструментов. Многие из них поддерживают сразу несколько сервисов (reCAPTCHA, hCaptcha, FunCaptcha и т.д.), автоматически определяя, что за вид капчи на странице. Обычно open-source инструмент предоставляет удобный API, а «под капотом» может использовать либо внешние сервисы, либо встроенные модели (как Buster для аудио или SolveCaptcha для других видов капчи).

На гитхабе есть не только проекты для решению капчи – некоторые посвящены и их генерации. Например, библиотека captcha на Python позволяет генерировать типичные текстовые капчи для тренировки моделей.

Коммерческие сервисы: люди vs. машины

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

Для наглядности таблица сравнение ИИ-сервисов с человеческими:

Сервис / подход

Пример

Метод решения

Время и успех

Стоимость (ориентир)

Человеческий

2Captcha, Anti-Captcha

Живые люди по всему миру, вводящие капчи за плату.

~7–20 сек на reCAPTCHA (изображения быстрее). Точность ~99% (при необходимости отвечают несколько человек).

~$2–3 за 1000 решённых reCAPTCHA (в среднем $0.002 за капчу). Около $0.5–1 за 1000 простых текстовых.

Искусственный интеллект

noCaptchaAi

Специализированные нейросети и эмуляция браузера.

~5 сек на reCAPTCHA v2 (часто ограничивается минимальным временем самой капчи). Точность до 99% на поддерживаемых типах. Возможны сбои на совсем новых типах.

~$0.8–1 за 1000 решённых reCAPTCHA (т.е. $0.0008 за штуку).

Гибридный

SolveCaptcha (расширение), др.

Сначала пытается ИИ, если не вышло – подключает человека.

Комбинирует плюсы: ИИ мгновенно решает лёгкие 80–90%, люди добивают остальное. Время ~5–15 сек, успех ~99.9%.

~$1–2 за 1000 (цена зависит от доли задач для людей)

Стоит учитывать, что сервисы с людьми могут столкнуться с недоступностью работников в некоторые моменты, а ИИ-сервисы – с изменением алгоритмов капчи (потребуется обновление моделей).

Как видно, ИИ-решатели капч уже экономически выгоднее во многих случаях. Неудивительно, что даже классические сервисы начинают внедрять машинное обучение, чтобы не уступить рынок конкурентам.

Будущее капчи в эпоху ИИ

Есть ощущение, что текущая ситуация сложившаяся на рынке капчи выглядит как переломная: классические Turing-тесты для пользователя всё хуже выполняют свою задачу. ИИ научился читать искажённый текст, видеть объекты на фото, разбирать аудио – порой с нечеловеческой точностью. Добавьте к этому синтетические данные, GANы и распределённые вычисления – и выходит, что любая конкретная CAPTCHA рано или поздно будет взломана машиной.

Разработчики капчи, конечно тоже, не сидят сложа руки. Наблюдается существенный сдвиг к невидимым проверкам (поведенческим факторам), к использованию обширных контекстных данных (история браузера, параметры устройства – вплоть до анализа движений мыши, угла наклона телефона и проч.). В идеале проверка должна происходить так, чтобы пользователь её не ощущал. Например, Cloudflare Turnstile вообще не задаёт вопросов, а делает «проверку безопасности» фоном – и при этом, по их мнению, это эффективнее классической капчи. Другой тренд – многослойная аутентификация: прежде чем показать капчу, система анализирует, знаком ли ей пользователь (залогинен, есть ли токен, откуда пришёл). Возможно, капча будущего вообще уйдёт с уровня UI в бэкграунд, а для подозрительных случаев будут применяться меры вроде проверки по SMS или биометрии (что уже за гранью классической капчи).

С развитием веб-протоколов и идентификации, вероятно мы вообще будем проходить в сеть по принципу доверенного аттестата (через учетную запись на ГосУслугах, устройство или цифровой паспорт) – и тогда дополнительная проверка будет уже не нужна. Но ведь есть люди которые самостоятельно отдают свои ГосУслуги скаммерам… 

Нет, это еще точно не конец!

Комментарии (0)