Пример взлома простой капчи за 15 минут с помощью машинного обучения | by NeuroHive Ru
У меня нет времени разрезать каждую из 10,000 картинок в фотошопе. Это бы заняло несколько дней, а у меня осталось всего 10 минут. И нельзя просто автоматически разделить все картинки на 4 одинаковых куска. Потому что алгоритм задает символам случайное горизонтальное положение:
Символы сдвинуты случайным образом, чтобы изображение было сложнее разделить.
К счастью, это всё же можно автоматизировать. При обработке изображений часто приходится находить связные области из пикселей одного цвета. Границы таких областей называют контурами. В OpenCV есть встроенная функция findContours(), которую мы используем, чтобы найти связные области.
Итак, начнем с изображения капчи:
Преобразуем изображение в бинарное (это называется thresholding), чтобы было легче найти связные области:
Далее, используем функцию findContours(), чтобы выделить связные группы пикселей, состоящие из одного цвета:
Теперь, нужно просто сохранить каждый прямоугольник как отдельное изображение. И, так как мы знаем последовательность символов в каждом изображении, можно подписать каждый прямоугольник своим символом при сохранении.
Погодите-ка! Тут есть проблемка! Буквы в капче иногда накладываются друг на друга:
И наш алгоритм отмечает их как одну:
Если проблему не решить, то у нас будут плохие обучающие данные. Это нужно исправить, потому что с такими данными мы обучим модель распознавать эти две слившиеся буквы как одну.
Простой выход из этой ситуации сказать, что если какой-то прямоугольник в ширину сильно больше, чем в высоту, то это нужно считать двумя буквами. В этом случае, прямоугольник можно просто разрезать посередине и считать, что этот два прямоугольника:
Мы разделим пополам все прямоугольники, ширина которых сильно превышает высоту, и будем считать их за две буквы. Способ слегка “химический”, но с этими капчами работает.
Теперь, когда у нас есть способ извлекать из капчи отдельные буквы, давайте прогоним наш алгоритм через весь датасет. Цель — получить много вариантов написания для каждой буквы. Каждую букву можно сохранять в отдельную папку.
Вот так выглядит моя папка с буквой “W” после того, как я запустил свой алгоритм:
«Ломай меня полностью!» Как одни алгоритмы генерируют капчу, а другие её взламывают
CAPTCHA – полностью автоматизированный публичный обратный тест Тьюринга для различения компьютеров и людей путем автоматической настройки определенных заданий, которые трудны для компьютеров, но просты для людей. Эта технология стала стандартом безопасности, используемым для предотвращения автоматического голосования, регистрации, спама, словарных атак на пароли веб-сайтов и т. п.
Существующие капчи разделяют на три категории: текстовые, графические и аудио/видео. Ниже мы рассмотрим, как генерируются различные капчи и какие успехи сейчас есть с их обходом. Не ругайте за качество изображений – мы взяли рисунки из научных публикаций, на которые даём ссылки =) Полный список публикаций, взятых для анализа, приведён в конце статьи.
1.1. Текстовая капча
Текстовые капчи являются наиболее часто используемыми, но из-за простой структуры они и наиболее уязвимы. Такой вид капч, как правило, требует распознать геометрически искаженную последовательность, состоящую из букв или цифр.
Для повышения безопасности применяются различные механизмы защиты, которые можно разделить на антисегментационные и
1.1.1. Полые символы
В случае стратегии создания капчи «полые символы» для
формирования каждого символа используются
контурные линии.
1.1.2. Перекрытие символов
Объединение и перекрытие символов (англ. сrowing characters together, CCT) усложняют сегментацию, но при этом также снижает удобство для чтения пользователем. То есть и сами люди не всегда успешно могут обойти такую капчу.
Исследователям из Китая и Пакистана удалось взломать CTT с вероятностью от 27.1% до 53.2% [2].
1.1.3. Фоновые шумы
Рис. 4. Фоновые шумыGoogle’s reCAPTCHA, использующая изображения из Street View, ломается в 96% случаев [3].
1.1.4. Двухуровневая структура
Гао [4] предложил подход к сегментации для разделения изображения капчи как по вертикали, так и по горизонтали, и добился успеха в 44.6% (9 с на изображение), используя свёрточную нейронную сеть.
1.2. Капча-изображение
1.2.1. Капча на основе отбора
Голль [5] предложила использовать метод опорных векторов (SVM) для различения изображений кошек и собак в капче Asirra с вероятностью успешного распознавания 82.7%.
Команда Гао [6] использовала OpenCV для обнаружения лиц во FR-CAPTCHA. Удалось получить вероятность обнаружения от 8% до 42% с обработкой изображения менее, чем за 14 секунд. FaceDCAPTCH была распознана с вероятностью 48% в среднем за 6.2 секунды.
Сотрудники Колумбийского университета обошли reCAPTCHA и Facebook CAPTCHA с вероятностью 70.78% и 83.5% соответственно.
1.2.2. Капча на основе кликов
Такие кликовые капчи имеют два защитных механизма: антивыявление и антираспознавание. Правильное распознавание символов с развитием машинного обучения уже не является сложной задачей. Поэтому почти все механизмы защиты ориентированы на то, чтобы помешать злоумышленникам правильно выявить символы.
1.2.3. Капча на основе перетаскивания
Капча на основе перетаскивания определяет, является ли пользователь человеком, через трек мыши, скорость перемещения указателя и время отклика.
Рис. 8. Капча на основе перетаскивания1.3. Аудио/видеокапчи
1.3.1 Аудиокапча
Эта капча
обычно рассматривается как альтернатива
зрительной
в случае пользователей с ослабленным
зрением. Слушателям предлагается выполнить
задание исходя из того, что они услышали, например, определить конкретный звук,
например, звук колокольчика или фортепиано [8].
Существует еще один тип капчи на основе аудио, в котором от пользователей требуется не просто слушать, а произносить. Например, Гао [9] предложил звуковую капчу (Рис. 9), в которой пользователь должен зачитать предложение, выбираемое случайным образом из книги. Сгенерированный аудиофайл анализируется, чтобы определить, является ли пользователь человеком.
Но и аудиокапча взламывается: ученые из Стэнфордского университета научились взламывать аудиокапчу с вероятностью 75%.
1.3.2 Видеокапча
В видеокапче пользователям предоставляется видеофайл, и они должны выбрать предложение, которое описывает движение человека на видео.
Рис. 10. Сводная таблица. Типы капчЯпонские исследователи использовали решение на базе HMM (скрытой марковской модели) и получили точность 31.
Рассмотрим теперь, как именно для взлома капчи используются нейронные сети.
В 2017 году Гао Хуан, Чжуан Лю и другие [10] построили 4 глубоких свёрточных нейронных сети с архитектурой, называемоей теперь DenseNet. Плотные блоки нейронных сетей чередовались со слоями skip-connection (Рис. 10). Вход каждого слоя в блоке являлся объединением выхода всех предыдущих слоев. Это отличало новую архитектуру от традиционных на тот момент нейросетей, где слои были соединены последовательно.
Рис. 11. DenseNet с тремя плотными блоками [11]Архитектура DenseNet имеет ряд преимуществ: она решает проблему дисперсии и эффективно использует особенности всех предшествующих сверточных слоев, понижая вычислительную сложность параметров сети и демонстрируя хорошую производительность классификации.
Примером вариации архитектуры DenseNet является нейросеть DFCR. Исходные изображения капчи размером 224×224 проходили через слой свертки и объединялись в пулы для вывода изображений размером 56×56. После этого поочередно соединялись 4 «плотных» блока, чередуясь с переходными слоями (Рис. 11). Структура переходного слоя позволяла уменьшить размерность карты признаков и ускорить вычисления.
Рис. 12: Архитектура DFCR на примере распознавания изображения с символами «W52S» [11]Далее карты признаков использовались для проверки соответствия карты и класса. Значения в каждой карте признаков суммировались для получения среднего значения, которое принималось за значение класса и выводилось в соответствующий softmax-слой классификации.
Эксперименты показывают, что DFCR не только сохраняет основные преимущества DenseNet, но и снижает потребление памяти. Кроме того, точность распознавания капчи с фоновым шумом и наложенными друг на друга символами выше 99.9% [11].
Рис. 13. Процесс обучения генератора текстовых капч на GAN [12]Генератор
капч на GAN (генеративно-состязательная сеть) cостоит
из двух частей:
1) сеть, создающая
капчи, приближенные к оригинальным; 2) нейросеть, отличающая
искусственную капчу от
настоящей (солвер).
Перед подачей капчи солверу, в ней удаляются использованные средства защиты и нормализуется шрифт. Например, производится заполнение полых символов и нормализация промежутков между ними. Модель препроцессинга основывается на Pix2Pix.
Рис. 14. Схема алгоритма. Сначала используется небольшой датасет реальных капч для обучения синтезатора капчи (1). Далее генерируются искусственные капчи (2) для обучения солвера (3). Совершенствование солвера (4) [12]Затем генерируется большое количество капч с маркировкой, которые используются для обучения солвера. Обученный солвер принимает капчу после препроцессинга и выдает соответствующие символы. Тонкая настройка солвера происходит с помощью небольшого набора вручную размеченных капч, которые собираются с целевого сайта.
В качестве конкретной свёрточной нейронной сети хорошим вариантом оказалось использование архитектуры LeNet-5, которая изначально применялась для распознавания одиночных символов. Добавление двух сверточных слоев и трех слоев пулинга расширило ее возможности до распознавания нескольких символов.
Рис. 15: Алгоритм тренировки солвера [12]Информация, полученная на ранних слоях нейронных сетей, полезна для решения множества других классификационных задач. Более дальние слои более специализированы. Это свойство используется для калибровки солвера, чтобы избежать систематической ошибки или переобучения.
Выходной слой солвера состоит из ряда нейронов с одним нейроном на символ. Например, если в капче n
символов, выходной слой будет содержать n
нейронов, где каждый нейрон соответствует возможному символу. Если количество символов не фиксировано, то необходимо тренировать солвер для каждого возможного n
.
Результаты вероятности взлома :
- Перекрытие (в зависимости от сложности) – от 25.1% до 65%
- Поворот (15°, 30°, 45°, 60°) – 100%, 100%, 99. 85%, 99.55%
- Искажение – 92.9%
- Эффект волны – 98.85%
- Комбинация вышеперечисленных – 46.30%
Чтобы распознать последовательность символов без сегментации, можно использовать модель, состоящую из свёрточной нейронной сети, соединенной с нейросетью с долгой краткосрочной памятью (LSTM) и механизмом внимания.
Рис. 16. Обзор архитектурыСвёрточная нейронная сеть представляет собой энкодер, извлекающий признаки из капчи. Исходное изображение представляется в виде линейного векторного пространства. Созданный энкодером вектор признаков обозначается fijc, где i и j – индексы местоположения на карте признаков, c – индекс каналов.
LSTM работает как декодер и переводит вектор признаков в текстовую последовательность. В отличие от рекуррентной нейронной сети, LSTM умеет хранить информацию в течение длительных промежутков времени.
В традиционной модели sequence-to-sequence на каждом временном шаге на вход передается вектор f. Но узким местом стандартной модели является то, что вход является постоянным. Механизм внимания позволяет декодеру игнорировать неактуальную информацию, сохраняя при этом наиболее значимую информацию о векторе f. Различным частям вектора признаков присваиваются различные веса, так что модель может фокусироваться на каждом шаге на определенной части вектора, делая прогнозы более точными. Это является основной причиной того, что предложенный метод может распознавать отдельные символы без сегментации.
В экспериментах для декодирования использовалась сокращенная модель Inception-v3. Декодер состоял из LTSM-ячеек, каждая из которых содержала 256 скрытых нейронов. Количество ячеек LSTM равнялось максимальной длине строки капчи. Для всей структуры число обучаемых параметров составило 9 млн. В зависимости от исходного размера каждая капча масштабировалась так, чтобы короткая сторона находилась в диапазоне от 100 до 200 пикселей. На тренировочном этапе модель тренировалась по стохастическому градиентному спуску с использованием момента 0.9. Скорость обучения равнялась 0.004. На обучение было потрачено 200 эпох с размером батча 64.
Рис. 17. CCT-капчиПосле каждой эпохи происходила проверка модели. Если производительность модели была лучше, чем у текущей лучшей модели, веса лучшей модели обновлялись. В качестве данных для эксперимента были собраны CCT-капчи (текст с перекрытием) (Рис. 17).
Для образца капчи в тестовом наборе полная прогнозируемая последовательность символов считалась правильно определенной только в том случае, если она была идентична ответу, помеченному вручную. Для выборки в 10 000 образцов (обучающая и тестовая в соотношении 3:1) вероятность успешного распознавания составила 42.7%. По мере увеличения количества образцов до 50 000, 100 000, 150 000 и 200 000 вероятность увеличилась до 87.9%, 94.5%, 97.4% и 98.3% соответственно.
Обучение с подкреплением использовалось для обхода Google reCAPTCHA v3 [14].
Взаимодействие
бота со средой было смоделировано как марковский
процесс принятия решений (MDP).
MDP задавался кортежем
(S, A, P, r), где S – конечное множество состояний, A – конечное множество действий, P – вероятность перехода между состояниями P(s, a, s’), r – вознаграждение, получаемое после перехода в состояние s’ из состояния s с вероятностью P.
Целью похода было найти оптимальное правило π*, которое максимизирует ожидаемые вознаграждения в будущем. Предположим, что правило параметризируется набором весов w, таким, что π = π(s, w). Затем задача задается как
где γ – некоторая константа (discount factor), rt – вознаграждение в момент времени t.
Обучение с подкреплением оценивает градиенты по формуле
Для прохождения reCAPTCHA пользователь перемещает курсор, пока не установит флажок reCAPTCHA. В зависимости от этого взаимодействия система reCAPTCHA «наградит» пользователя баллом. Этот процесс был смоделирован как MDP, где пространство состояний S – это возможные позиции курсора на веб-странице, а пространство действий A = {вверх, влево, вправо, вниз}. Такой подход делает задачу похожей на задачу grid world.
Как
показано на Рис. 18, отправной точкой
является начальная позиция курсора, а целью
является позиция reCAPTCHA. Для каждого теста отправная точка выбирается
случайным образом из верхней правой
или верхней левой области. Затем строится
сетка, где каждый пиксель между начальной
и конечной точками является возможным
положением курсора. Размер
ячейки c
– количество пикселей между
двумя последовательными позициями.
Например, если курсор
находится на позиции (x0, y0)
и совершает
действие влево, то следующей позицией
будет (x0 – c, y0)
.
В каждом тесте позиция курсора случайная, бот выполняет последовательность действий до достижения reCAPTCHA или предела T, где a и b – это высота и ширина сетки соответственно.
По окончании теста бот получает обратную связь от reCAPTCHA, как и любой обычный пользователь.
В большинстве предыдущих работ для автоматизации действий веб-браузера использовался Selenium, однако он часто проваливал тест, так как в HTTP-запросах обнаруживался автоматически сгенерированный заголовок и другие дополнительные переменные, которые отсутствуют в обычном браузере.
Эту проблему можно решить двумя разными способами. Первый заключается в создании прокси для удаления автоматического заголовка. Второй вариант заключается в запуске браузера из командной строки и управлении мышью с помощью специальных пакетов Python, таких, как библиотека PyAutoGUI.
Забавно, что симуляции, выполняемые в браузере с подключенным аккаунтом Google, с большей вероятностью проходили проверку, чем симуляции без авторизации.
В экспериментах с discount factor γ = 0.99, скоростью обучения – 10-3 и размером батча 2000. капча взламывалась с вероятностью 97.4%.
Как можно заметить уже из этой статьи, машинное обучение имеет высокий порог вхождения, а ведь все, что было описано в публикации – только вершина айсберга. Если копать глубже, то скоро можно претендовать на звание джуниора по нейронным сетям =)
А ведь для реальной работы нужна команда специалистов и аренда вычислительных мощностей. Добавим к этому время обучения/переобучения сетей, растущее количество видов капч, разнообразие языков, и получится, что быстрее и дешевле воспользоваться онлайн-сервисами, где капчи решают живые люди.
Среди подобных сервисов выделяется ruCaptcha. На сервисе есть тонкая настройка солвера: количество слов, регистр, цифры и/или буквы, язык (55 на выбор), математические действия и т. д.
Решаются следующие виды капч: обычная текстовая, ReCaptcha версий 2 и 3, GeeTest, hCaptcha, ClickCaptcha, RotateCaptcha, FunCaptcha, KeyCaptcha.
Взаимодействие с сервером происходит через API, то есть можно встроить решение в собственный продукт. Есть функция возврата за неправильное распознавание, а на возникшие вопросы отвечает техподдержка (адекватная в сравнении с конкурентами).
Конечно, за решение капч, сервис платит конкретным людям, готовым решать задания за небольшую плату. Соответственно эти деньги сервис берёт у клиентов, которым не приходится заниматься рутиной. Расценки на момент написания статьи были следующие: 1000 капч взламывались не более, чем за 44 ₽ (в среднем 7. 5 с на капчу), 1000 рекапч за 160 ₽ (в среднем 32 с на капчу). То есть единая цена независимо от нагрузки и от того, сколько заплатили другие заказчики.
Для сравнения: один мидл-специалист по машинному обучению обойдется на рынке минимум в 150 000 ₽/мес.
Напишите, если пользовались сервисом – интересно узнать ваше мнение (пока мы основываемся на мнении авторов следующих статей: англоязычная и три русских: раз, два, три).
Источники
[1] Gao, H., Wang, W., Qi, J., Wang, X., Liu, X., & Yan, J. (2013, November). The robustness of hollow CAPTCHAs. In Proceedings of the 2013 ACM SIGSAC conference on Computer & communications security (pp. 1075-1086). ACM.
[2] Hussain, R. , Gao, H., & Shaikh, R. A. (2017). Segmentation of connected characters in text-based CAPTCHAs for intelligent character recognition. Multimedia Tools and Applications
[3] Goodfellow, I. J., Bulatov, Y., Ibarz, J., Arnoud, S., & Shet, V. Multitdigit Number Recognition from Street View Imagery using Deep Convolutional Neural Networks.
[4] Gao, H., Tang, M., Liu, Y., Zhang, P., & Liu, X. (2017). Research on the Security of Microsoft’s Two-Layer Captcha. IEEE Transactions on Information Forensics and Security, 12(7), 1671-1685.
[5] Golle, P. (2008, October). Machine learning attacks against the Asirra CAPTCHA. In Proceedings of the 15th ACM conference on Computer and communications security (pp. 535-542). ACM.
[6] The robustness of face-based CAPTCHAs. Haichang Gao, Lei Lei, Xin Zhou, Jiawei Li, Xiyang Liu. Institute of Software Engineering, Xidian University.
[7] Chow, R., Golle, P., Jakobsson, M., Wang, L., & Wang, X. (2008, February). Making captchas clickable
[8] The SoundsRight CAPTCHA: an improved approach to audio human interaction proofs for blind users. Jonathan Lazar, Jinjuan Heidi Feng, Tim Brooks, Genna Melamed, Jon Holman, Abiodun Olalere, Nnanna Ekedebe, and Brian Wentz
[9] Gao, H., Liu, H., Yao, D., Liu, X., & Aickelin, U. (2010, July). An audio CAPTCHA to distinguish humans from computers.
[10] G. Huang, Z. Liu, L. V. D Maaten, et al., Densely connected convolutional networks, Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, (2017), 2261–2269
[11] CAPTCHA recognition based on deep convolutional neural network
[12] Yet Another Text Captcha Solver: A Generative Adversarial Network Based Approach Guixin
[13] An end-to-end attack on text CAPTCHAs
[14] Hacking Google reCAPTCHA v3 using Reinforcement Learning
CAPTCHA (капча) — что это такое и для чего используется
Главная / ЧАстые ВОпросы21 января 2021
- Капча — это защита от автоматического спама
- Можно ли упростить прохождение CAPTCHA?
Здравствуйте, уважаемые читатели блога KtoNaNovenkogo. ru. Многие из вас только начиная свое знакомство с интернетом, кроме составляющих учетной записи (ник и логин\пароль), при регистрации также сталкиваются еще и с такой вещью, как капча.
Например, вас могли попросить ввести в поле те символы, что вы видите на расположенной выше картинке, или выполнить простейшее арифметическое действие. Иногда просят указать те картинки, где изображено что-то определенное. Все эти ребусы называют одним общим словом — CAPTCHA.
Но что это такое и зачем нужно? Слово капча образовано от английского исходника, который представляет из себя довольно сложную аббревиатуру. Приводить ее расшифровку я, думаю не стоит. Просто скажу в двух словах, что CAPTCHA — это специальный тест, призванный отличить действия человека от действий компьютера (программы, скрита). Другими словами, эта штука проводит верификацию пользователя на предмет его человечности.
Зачем это может понадобиться? Какие виды капч бывают? Исчезнут ли они когда-нибудь, чтобы не усложнять жизнь пользователям интернета? На эти вопросы я как раз и постараюсь ответить в этой заметке.
Капча — это защита от автоматического спама
В интернете существует очень много способов заработать себе на хлеб насущный. Многие из них являются легальными, а многие нет. Как раз к последним относятся взломы сайтов, рассылка спам-сообщений по блогам и форумам, массовая регистрация аккаунтов на различных сервисах и т.п.
Все эти способы заработка на первый взгляд кажутся малоэффективными (копеечными), но не торопитесь с выводами. Если рассылать спам, ломать сайты и регистрироваться где ни попадя будет не реальный человек, а программа, которая никогда не устанет, то это в корне меняет расклад. А если представить, что запускается она на тысячах чужих взломанных компьютерах (ресурсов которых не жалко), то заработать можно таким образом очень большие деньги.
Но от всего этого автоматического спама (когда грязную работу выполняет безустанная программа) уже довольно давно придумали защиту. Это капча! Разработали эту концепцию уже давно, как вариант реализации теста Тьюринга, способного достоверно определить кто именно проходит данный тест — человек или машина.
В идеале ребус заданный CAPTCHA с легкостью должен разгадывать практически любой человек, а вот компьютер на этом тесте должен забуксовать или вообще спасовать перед неразрешимой задачей. Так ли это на самом деле? Давайте посмотрим. Например, довольно сложно будет программе решить показанную на рисунке задачку, не правда ли? А человеку это будет совсем не сложно.
Однако, чаще всего используют буквенную или цифровую капчу, на которой надписи изображены не четко, а также присутствую различные помехи, которые как бы человеку особо задачу не усложняют (на самом деле все же усложняют, а иногда и до нервного срыва доводят), а вот автоматические системы распознавания текстов (есть целое направление софта, которое ориентировано на эти задачи, к примеру программы, помогающие оцифровывать книги в библиотеках) могут на этих помехах «споткнуться».
Однако и человеку доставляет мало радости разбираться где закорючка добавлена специально, а где она к букве относится. Иногда глядя на CAPTCHA, которую просят разгадать, вообще начинаешь думать — а надо ли мне здесь регистрироваться (оставлять комментарий) или ну его на фиг!
С другой стороны, «редиски» зарабатывающие описанным выше способом тоже не лыком шиты и у них на вооружении есть ряд инструментов, которые позволяют таки обойти капчу, поэтому ее и усложняют повышая тем самым ее непробиваемость.
В некоторых случаях кому-то бывает выгодно использовать человеческое распознавание капч на потоке. Этой цели например служит биржа Рукапча и сервис для заработка КолотиБабло, где все желающие могут заработать на вводе CAPTCHA, а заказы поступают от тех, кому такие распознавания нужны в больших количествах (например, с сервиса Anti Captcha).
Но несомненно, что наличие этой защиты все равно существенно снижает эффективность атак и отсекает большую часть потоков спама, льющегося в интернете нескончаемым потоком. Хотелось бы, конечно, обойтись без этих ребусов, на которых теряется часть посетителей, но не получается пока.
Можно ли упростить прохождение CAPTCHA? Оказывается да!
Хотя, безусловно, шаги в нужном направлении уже совершаются. Один из лидеров онлайн-бизнеса (вряд ли вам известная компания Google 🙂 ) примерно год назад существенно упростила свою капчу (они ее называют reCAPTCHA), сделав ее прохождение наверное самым простым из возможных вариантов. Судите сами. Так выглядела CAPTCHA от Гугла раньше:
А так она выглядит сейчас:
Насколько проще поставить одну единственную галочку, а не разгадывать буквенный ребус и не искать в темноте нужные клавиши на клавиатуре (капчи ведь чаще всего именно английскими буквами вводятся).
В общем сделан шаг в нужном направлении, и по мере распространения именно этого вида защиты будет упрощаться жизнь пользователей интернета (лично я именно reCAPTCHA использую для защиты своих комментариев — можете сами ее опробовать прокрутив эту страниц вниз до конца).
Удачи вам! До скорых встреч на страницах блога KtoNaNovenkogo.ru
Использую для заработка
Тайны ввода капчи «Ой» Яндекса
Те, кто подписан на меня в твиттере, знают, что я нет-нет, да что-нибудь опубликую о капче Яндекса — знаменитая в узких кругах страница «Ой». Любители пользоваться RDS-баром мне прекрасно поймут.
Сначала капчи были безобидными и легко разгадывались, но спустя время игра становилась все интереснее. Я задал вопросы службе поддержки, чтобы понять, как ее правильно вводить. Может быть, эта информация сэкономит кому-то время и сбережет нервы =) .
Кстати, на днях я наконец-то перевел блог на https и новый сервер
. Если будут какие-то баги, ошибки или неточности — дайте, пожалуйста, знать.
Итак, в чем, собственно, дело. Те, кто ставит в свои браузеры и часто пользуется RDS-баром (полезный и быстрый сбор основных показателей сайта) могут посчитаться Яндексом за спамером (много автоматических запросов к поисковой системе). Чтобы это предотвратить, отечественный поисковик создал страницу «Ой» с замысловатыми капчами.
Яндекс пишет, что после ввода капчи, она долго не беспокоит пользователя. Но это первое лукавство — вполне возможно, что страница с ней появится уже через 10-15 минут.
Второе лукавство — это ввод телефона.
Знает ли житель Тверской области, что его номер телефона «рекламируется» на Яндексе
? Все-таки просит указать номер телефона, правда, не свой.Вопросы службе поддержки Яндекса
Я недавно задал следующие вопросы по поводу работы капчи, чтобы быстрее ее заполнять. Получил короткие, но емкие ответы.
1. Учитывается ли регистр букв?
Да.
2. Необходимо ли вводить спецсимволы (например, звездочка или доллар $)
Да.
Примечание: здесь я надеялся, что данные символы не учитываются, но оказалось обратное. Для нелюбителей нажимать «обновить изображение с капчей» дам ссылку на страницу в википедии со спецсимволами
.3. Нужно ли добавлять буквы, которые подразумеваются в слове. Например, видно «entral», но подразумевается «central» — нужно ввести «entral» или «central»?
Нет, нужно вводить лишь то, что видно.
4. Учитываются ли знаки препинания: точки, запятые, двоеточия и так далее?
Да.
5. Учитываются ли знаки: скобки, слеши, апострофы, знаки ударения?
Да.
Примечание. Скобку или слеш поставить не проблема, а вот с буквой по ударением у меня не получилось бы
.6. Засчитываются только 100%-ые совпадения введенной информации с картинки или процент немного ниже? Например, если я правильно ввел 12 букв (2 слова по 6 букв) и забыл поставить точку после первого (а она была на картинке). Ввод такой капчи засчитывается или система признает ее неправильно введенной и покажет другую?
Да, принимается только 100% совпадение.
7. Нужно ли ставить пробелы между словами, которые показываются на разных изображениях?
Пробелы ставить нужно.
Второе кстати
. Участвуйте в конкурсе к прошлому посту (участие займет всего минуту). Высокие шансы оказаться в призовой тройке.
Также я замечал, что при многократном обновлении изображений капчи она могла просто удалиться (то есть страница «Ой» просто пропадала, а работа с Яндексом продолжалась).
Попадались ли вам интересные экземпляры? Делитесь своими отзывами и примерами в комментариях
!P.S. Может быть, кто-нибудь знает как прикрутить к этому делу антикапчу
?«Яндекс», пожалуйста, сделай что-то со своими каптчами — Приёмная на vc.ru
Не писать же нейронку для распознавания картинок. Человек уже не способен это прочитать.
10 581 просмотров
{ «author_name»: «Юрий Другач», «author_type»: «self», «tags»: [], «comments»: 20, «likes»: 39, «favorites»: 5, «is_advertisement»: false, «subsite_label»: «claim», «id»: 87608, «is_wide»: true, «is_ugc»: true, «date»: «Fri, 11 Oct 2019 13:21:03 +0300», «is_special»: false }
{«id»:167310,»url»:»https:\/\/vc. ru\/u\/167310-yuriy-drugach»,»name»:»\u042e\u0440\u0438\u0439 \u0414\u0440\u0443\u0433\u0430\u0447″,»avatar»:»2825a01a-cbb5-506f-7670-fcfee7706283″,»karma»:3290,»description»:»»,»isMe»:false,»isPlus»:false,»isVerified»:false,»isSubscribed»:false,»isNotificationsEnabled»:false,»isShowMessengerButton»:false}
{«url»:»https:\/\/booster.osnova.io\/a\/relevant?site=vc»,»place»:»entry»,»site»:»vc»,»settings»:{«modes»:{«externalLink»:{«buttonLabels»:[«\u0423\u0437\u043d\u0430\u0442\u044c»,»\u0427\u0438\u0442\u0430\u0442\u044c»,»\u041d\u0430\u0447\u0430\u0442\u044c»,»\u0417\u0430\u043a\u0430\u0437\u0430\u0442\u044c»,»\u041a\u0443\u043f\u0438\u0442\u044c»,»\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c»,»\u0421\u043a\u0430\u0447\u0430\u0442\u044c»,»\u041f\u0435\u0440\u0435\u0439\u0442\u0438″]}},»deviceList»:{«desktop»:»\u0414\u0435\u0441\u043a\u0442\u043e\u043f»,»smartphone»:»\u0421\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u044b»,»tablet»:»\u041f\u043b\u0430\u043d\u0448\u0435\u0442\u044b»}},»isModerator»:false}
Что такое капча и зачем она нужна
Капча (captcha) — это защитный код, который выводится на страницах интернета в ряде случаев. Смысл ее заключается в том, чтобы автоматические программы, так называемые «боты», не смогли пробиться на сайт.
Обычно капча — это сочетание букв и цифр, которые нужно ввести в окошко.
Но бывают и более хитрые варианты. Например, нужно решить уравнение, выбрать из нескольких картинок определенную или сделать что-нибудь еще.
Пока вы этого не сделаете, сайт будет заблокирован, то есть выполнить на нем определенные действия не получится.
Зачем нужна капча
Есть программы, которые могут автоматически что-то делать в интернете. Например, рассылать рекламу, публиковать фальшивые отзывы. И вот чтобы их заблокировать, владельцы сайтов ставят капчу.
Например, есть страница в интернете, где посетители оставляют отзывы. Любой человек может заполнить несколько полей (имя, адрес почты) и отправить на сайт свое сообщение, где оно и будет опубликовано.
Эти действия легко сымитировать программой. Ее можно «научить» заполнять поля и публиковать нужные отзывы, чем и пользуются мошенники. Поэтому и была придумана капча – ведь ее программа не введет, а, значит, не сможет опубликовать сообщение.
Но капча появляется и в других случаях. Например, вы просто общаетесь на своей страничке Вконтакте, и вдруг ни с того ни с сего она возникает. Пока вы ее не пройдете, на сайте ничего сделать не получится.
Это происходит потому, что системе показалось что-то в ваших действиях подозрительным. Например, вы слишком быстро отвечали на сообщения, и сайт заподозрил, что это делает не человек, а программа.
Вот и приходится вводить в окошко то, что нарисовано на картинке. Оно, конечно, не очень удобно, зато защищает страницы от взлома.
Следует заметить, что применение капчи всё равно не спасает сайты от рекламы, взломов и прочих нехороших вещей. Но всё-таки избавляет их от излишне настойчивых притязаний.
Какие бывают капчи и как их вводить
reCAPTCHA – проверка, разработанная Гугл. Чтобы ее пройти, нужно поставить галочку в квадратик возле «Я не робот».
Обычно через пару секунд после этого появляется птичка зеленого цвета – значит, капча пройдена.
Но бывает системе этого недостаточно и открывается окошко, где нужно выбрать картинки определенного вида. Например, все фотографии, где есть витрины. Значит, нужно щелкнуть по каждой из них левой кнопкой мышки.
На заметку. Нажимать нужно по каждой картинке, где есть хотя бы часть требуемого изображения. И выбирайте их не слишком быстро – между щелчками должно пройти 1-2 секунды.
Текстовые/цифровые капчи. В окошко нужно ввести кривоватые буквы/цифры, изображенные на картинке. Обычно английские, но бывают и русские.
Часто для удобства есть кнопка, нажав на которую картинка поменяется. Это нужно в случае, если буквы сложно разобрать. Ну, или когда вроде бы всё печатаешь верно, а система не пускает – выдает ошибку.
А еще бывает кнопка, которая озвучивает то, что написано. Нажав на нее, вы услышите голос, который проговорит буквы/цифры с картинки.
Образные. Это капчи в виде картинок. Как правило, нужно просто выбрать подходящее изображение.
Логические. В этом случае нужно решить какую-то задачку. Обычно она несложная: типа напечатайте, сколько будет 6 + 3. Значит, в уме (ну, или на калькуляторе) нужно сложить эти два числа, а результат напечатать в окошко.
Или, например, нужно ответить на какой-то вопрос, разгадать загадку.
Никто вас за это оценивать не будет. Просто таким образом система пытается отсеять автоматические регистрации. Если вы напечатаете правильный ответ, она вас пустит дальше. Ну а если нет, то предложит попробовать ввести капчу еще раз, но уже другую.
Автор: Илья Кривошеев
Декодирование капчи на Python — Версия для печати
Большинство людей не в курсе, но моей диссертацией была программа для чтения текста с изображения. Я думал, что, если смогу получить высокий уровень распознавания, то это можно будет использовать для улучшения результатов поиска. Мой отличный советник доктор Гао Джунбин [1] предложил мне написать диссертацию на эту тему. Наконец-то я нашел время написать эту статью и здесь я постараюсь рассказать о всем том, что узнал. Если бы только было что-то подобное, когда я только начинал…
Как я уже говорил, я пытался взять обычные изображения из интернета и извлекать из них текст для улучшения результатов поиска. Большинство моих идей было основано на методах взлома капчи. Как всем известно, капча — это те самые всех раздражающее штуки, вроде «Введите буквы, которые вы видите на изображении» на страницах регистрации или обратной связи.
Капча устроена так, что человек может прочитать текст без труда, в то время, как машина — нет (привет, reCaptcha!). На практике это никогда не работало, т. к. почти каждую капчу, которую размещали на сайте взламывали в течении нескольких месяцев.
У меня неплохо получалось — более 60% изображений было успешно разгадано из моей небольшой коллекции. Довольно неплохо, учитывая количество разнообразных изображений в интернете.
При своем исследовании я не нашел никаких материалов, которые помогли бы мне. Да, статьи есть, но в них опубликованы очень простые алгоритмы. На самом деле я нашел несколько нерабочих примеров на PHP и Perl, взял из них несколько фрагментов и получил неплохие результаты для очень простой капчи. Но ни один из них мне особо не помог, т. к. это было слишком просто. Я из тех людей, которые могут читать теорию, но ничего не понять без реальных примеров. А в большинстве статей писалось, что они не будут публиковать код, т. к. боятся, что его будут использовать в плохих целях. Лично я думаю, что капча – это пустая трата времени, т. к. ее довольно легко обойти, если знать как.
Собственно по причине отсутствия каких-то материалов, показывающих взлом капчи для начинающих я и написал эту статью.
Давайте начнем. Вот список того, что я собираюсь осветить в этой статье:
- Используемые технологии
- Что такое капча
- Как найти и извлечь текст из изображений
- Распознавание изображения с использованием ИИ
- Обучение
- Собираем все вместе
- Результаты и выводы
Используемые технологии
Все примеры написаны на Python 2. 5 с использованием библиотеки PIL. Должно работать и в Python 2.6.
Установите их в указанном выше порядке и вы готовы к запуску примеров.
Отступление
В примерах я буду жестко задавать множество значений прямо в коде. У меня нет цели создать универсальный распознаватель капч, а только показать как это делается.
Капча, что это такое в конце концов?
В основном капча является пример одностороннего преобразования. Вы можете легко взять набор символов и получить из него капчу, но не наоборот. Другая тонкость – она должна быть простая для чтения человеком, но не поддаваться машинному распознаванию. Капча может рассматриваться как простой тест типа «Вы человек?». В основном они реализуются как изображение с какими-то символами или словами.
Они используются для предотвращения спама на многих интернет-сайтах. Например, капчу можно найти на странице регистрации в Windows Live ID [4].
Вам показывают изображение, и, если вы действительно человек, то вам нужно ввести его текст в отдельное поле. Кажется неплохой идеей, которая может защитить вас от тысяч автоматических регистраций с целью спама или распространения виагры на вашем форуме? Проблема в том, что ИИ, а в частности методы распознавания изображений потерпели значительные изменения и становятся очень эффективными в определенных областях. OCR (оптическое распознавание символов) в наши дни является довольно точным и легко распознает печатный текст. Было принято решение добавить немного цвета и линий, чтобы затруднить работу компьютеру без каких-то неудобств для пользователей. Это своего рода гонка вооружений и как обычно на любую защиту придумывают более сильное оружие. Победить усиленную капчу сложнее, но все равно возможно. Плюс ко всему изображение должно оставаться довольно простым, чтобы не вызывать раздражение у обычных людей.
Это изображение является примером капчи, которую мы будем расшифровывать. Это реальная капча, которая размещена на реальном сайте.
Это довольно простая капча, которая состоит из символов одинакового цвета и размера на белом фоне с некоторым шумом (пиксели, цвета, линии). Вы думаете, что этот шум на заднем плане затруднит распознавание, но я покажу, как его легко удалить. Хоть это и не очень сильная капча, но она является хорошим примером для нашей программы.
Как найти и извлечь текст из изображений
Существует много методов для определения положения текста на изображении и его извлечения. С помощью Google вы можете найти тысячи статей, которые объясняют новые методы и алгоритмы для поиска текста.
Для этого примера я буду использовать извлечение цвета. Это довольно простая техника, с помощью которой я получил довольно неплохие результаты. Именно эту технику я использовал для своей диссертации.
Для наших примеров я буду использовать алгоритм многозначного разложения изображения. По сути, это означает, что мы сначала построим гистограмму цветов изображения. Это делается путем получения всех пикселей в изображении с группировкой по цвету, после чего производится подсчет по каждой группе. Если посмотреть на нашу тестовую капчу, то можно увидеть три основных цвета:
- Белый (фон)
- Серый (шум)
- Красный (текст)
На Python это будет выглядеть очень просто.
Следующий код открывает изображение, преобразует его в GIF (облегчает нам работу, т. к. в нем всего 255 цветов) с печатает гистограмму цветов.
from PIL import Image
im = Image.open("captcha.gif")
im = im.convert("P")
print im.histogram()
В итоге мы получим следующее:
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 2, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0
, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 1, 2, 0, 1, 0, 0, 1,
0, 2, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 3, 1, 3, 3, 0,
0, 0, 0, 0, 0, 1, 0, 3, 2, 132, 1, 1, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 15, 0
, 1, 0, 1, 0, 0, 8, 1, 0, 0, 0, 0, 1, 6, 0, 2, 0, 0, 0, 0, 18, 1, 1, 1, 1, 1, 2,
365, 115, 0, 1, 0, 0, 0, 135, 186, 0, 0, 1, 0, 0, 0, 116, 3, 0, 0, 0, 0, 0, 21,
1, 1, 0, 0, 0, 2, 10, 2, 0, 0, 0, 0, 2, 10, 0, 0, 0, 0, 1, 0, 625]
Здесь мы видем количество пикселей каждого из 255 цветов в изображении. Вы можете увидеть, что белый (255, самый последний) встречается чаще всего. За ним идет красный (текст). Чтобы убедиться в этом, напишем небольшой скрипт:
from PIL import Image
from operator import itemgetter
im = Image.open("captcha.gif")
im = im.convert("P")
his = im.histogram()
values = {}
for i in range(256):
values[i] = his[i]
for j,k in sorted(values.items(), key=itemgetter(1), reverse=True)[:10]:
print j,k
И получаем такие данные:
Цвет | Количество пикселей |
---|---|
255 | 625 |
212 | 365 |
220 | 186 |
219 | 135 |
169 | 132 |
227 | 116 |
213 | 115 |
234 | 21 |
205 | 18 |
184 | 15 |
Это список из 10 наиболее распространенных цветов в изображении. Как ожидалось, белый повторяется чаще всего. Затем идут серый и красный.
Как только мы получили эту информацию, мы создаем новые изображения, основанные на этих цветовых группах. Для каждого из наиболее распространенных цветов мы создаем новое бинарное изображение (из 2 цветов), где пиксели этого цвета заполняется черным, а все остальное белым.
Красный у нас стал третьем среди наиболее распространенных цветов и это означает, что мы хотим сохранить группу пикселей с цветом 220. Когда я экспериментировал я обнаружил, что цвет 220 довольно близок к 220, так что мы сохраним и эту группу пикселей. Приведенный ниже код открывает капчу, преобразует ее в GIF, создает новое изображение такого же размера с белым фоном, а затем обходит оригинальное изображение в поисках нужного нам цвета. Если он находит пиксель с нужным нам цветом, то он отмечает этот же пиксель на втором изображении черным цветом. Перед завершением работы второе изображение сохраняется.
from PIL import Image
im = Image.open("captcha.gif")
im = im.convert("P")
im2 = Image.new("P",im.size,255)
im = im.convert("P")
temp = {}
for x in range(im.size[1]):
for y in range(im.size[0]):
pix = im.getpixel((y,x))
temp[pix] = pix
if pix == 220 or pix == 227: # these are the numbers to get
im2.putpixel((y,x),0)
im2.save("output.gif")
Запуск этого фрагмента кода дает нам следующий результат.
Оригинал | Результат |
На картинке вы можете увидеть, что у нас успешно получилось извлечь текст из фона. Чтобы автоматизировать этот процесс вы можете совместить первый и второй скрипт.
Слышу, как спрашиваете: «А что, если на капче текст написан разными цветами?». Да, наша техника все еще сможет работать. Предположите, что наиболее распространенный цвет – это цвет фона и тогда вы сможете найти цвета символов.
Таким образом, на данный момент мы успешно извлекли текст из изображения. Следующим шагом будет определение того, содержит ли изображение текст. Я пока не буду писать здесь код, т. к. это сделает понимание сложным, в то время как сам алгоритм довольно прост.
for each binary image:
for each pixel in the binary image:
if the pixel is on:
if any pixel we have seen before is next to it:
add to the same set
else:
add to a new set
На выходе у вас будет набор границ символов. Тогда все, что вам нужно будет сделать – это сравнить их между собой и посмотреть, идут ли они последовательно. Если да, то вам выпал джек-пот и вы правильно определили символы, идущие рядом. Вы так же можете проверять размеры полученных областей или просто создавать новое изображение и показывать его (метод show()
у изображения), чтобы убедиться в точности алгоритма.
from PIL import Image
im = Image.open("captcha.gif")
im = im.convert("P")
im2 = Image.new("P",im.size,255)
im = im.convert("P")
temp = {}
for x in range(im.size[1]):
for y in range(im.size[0]):
pix = im.getpixel((y,x))
temp[pix] = pix
if pix == 220 or pix == 227: # these are the numbers to get
im2.putpixel((y,x),0)
# new code starts here
inletter = False
foundletter=False
start = 0
end = 0
letters = []
for y in range(im2.size[0]): # slice across
for x in range(im2.size[1]): # slice down
pix = im2.getpixel((y,x))
if pix != 255:
inletter = True
if foundletter == False and inletter == True:
foundletter = True
start = y
if foundletter == True and inletter == False:
foundletter = False
end = y
letters.append((start,end))
inletter=False
print letters
В результате у нас получалось следующее:
[(6, 14), (15, 25), (27, 35), (37, 46), (48, 56), (57, 67)]
Это позиции по горизонтали начала и конца каждого символа.
ИИ и векторное пространство при распознавании образов
Распознавание изображений можно считать самым большим успехом современного ИИ, что позволило ему внедриться во все виды коммерческих приложений. Прекрасным примером этого являются почтовые индексы. На самом деле во многих странах они читаются автоматически, т. к. научить компьютер распознавать номера довольно простая задача. Это может быть не очевидно, но распознавание образов считается проблемой ИИ, хоть и очень узкоспециализированной.
Чуть ли ни первой вещью, с которой сталкиваются при знакомстве с ИИ в распознавании образов являются нейронные сети. Лично я никогда не имел успеха с нейронными сетями при распознавании символов. Я обычно обучаю его 3-4 символам, после чего точность падает так низко, что она была бы на порядок выше, отгадывай я символы случайным образом. Сначала это вызвало у меня легкую панику, т. к. это было тем самым недостающем звеном в моей диссертации. К счастью, недавно я прочитал статью о vector-space поисковых системах и посчитал их альтернативным методом классификации данных. В конце концов они оказались лучшем выбором, т. к.
- Они не требуют обширного изучения
- Вы можете добавлять/удалять неправильные данные и сразу видеть результат
- Их легче понять и запрограммировать
- Они обеспечивают классифицированные результаты, таким образом вы сможете видеть топ X совпадений
- Не можете что-то распознать? Добавьте это и вы сможете разпознать это моментально, даже если оно полностью отличается от чего-то замеченного ранее.
Конечно, бесплатного сыра не бывает. Главный недостаток в скорости. Они могут быть намного медленнее нейронных сетей. Но я думаю, что их плюсы все же перевешивают этот недостаток.
Если хотите понять, как работает векторное пространство, то советую почитать Vector Space Search Engine Theory [5]. Это лучшее, что я нашел для начинающих.
Я построил свое распознавание изображений на основе вышеупомянутого документа и это было первой вещью, которую я попробовал написать на любимом ЯП, который я в это время изучал. Прочитайте этот документ и как вы поймете его суть – возвращайтесь сюда.
Уже вернулись? Хорошо. Теперь мы должны запрограммировать наше векторное пространство. К счастью, это совсем не сложно. Приступим.
import math
class VectorCompare:
def magnitude(self,concordance):
total = 0
for word,count in concordance.iteritems():
total += count ** 2
return math.sqrt(total)
def relation(self,concordance1, concordance2):
relevance = 0
topvalue = 0
for word, count in concordance1.iteritems():
if concordance2.has_key(word):
topvalue += count * concordance2[word]
return topvalue / (self.magnitude(concordance1) * self.magnitude(concordance2))
Это реализация векторного пространства на Python в 15 строк. По существу оно просто принимает 2 словаря и выдает число от 0 до 1, указывающее как они связаны. 0 означает, что они не связаны, а 1, что они идентичны.
Обучение
Следующее, что нам нужно – это набор изображений, с которыми мы будем сравнивать наши символы. Нам нужно обучающее множество. Это множество может быть использовано для обучения любого рода ИИ, который мы будем использовать (нейронные сети и т. д.).
Используемые данные могут быть судьбоносными для успешности распознавания. Чем лучше данные, тем больше шансов на успех. Так как мы планируем распознавать конкретную капчу и уже можем извлечь из нее символы, то почему бы не использовать их в качестве обучающего множества?
Это я и сделал. Я скачал много сгенерированных капч и моя программа разбила их на буквы. Тогда я собрал полученные изображения в коллекции (группы). После нескольких попыток у меня было по крайней мере один пример каждого символа, которые генерировала капча. Добавление большего количества примеров повысит точность распознавания, но мне хватило и этого для подтверждения моей теории.
from PIL import Image
import hashlib
import time
im = Image.open("captcha.gif")
im2 = Image.new("P",im.size,255)
im = im.convert("P")
temp = {}
print im.histogram()
for x in range(im.size[1]):
for y in range(im.size[0]):
pix = im.getpixel((y,x))
temp[pix] = pix
if pix == 220 or pix == 227: # these are the numbers to get
im2.putpixel((y,x),0)
inletter = False
foundletter=False
start = 0
end = 0
letters = []
for y in range(im2.size[0]): # slice across
for x in range(im2.size[1]): # slice down
pix = im2.getpixel((y,x))
if pix != 255:
inletter = True
if foundletter == False and inletter == True:
foundletter = True
start = y
if foundletter == True and inletter == False:
foundletter = False
end = y
letters.append((start,end))
inletter=False
# New code is here. We just extract each image and save it to disk with
# what is hopefully a unique name
count = 0
for letter in letters:
m = hashlib.md5()
im3 = im2.crop(( letter[0] , 0, letter[1],im2.size[1] ))
m.update("%s%s"%(time.time(),count))
im3.save("./%s.gif"%(m.hexdigest()))
count += 1
На выходе мы получаем набор изображений в этой же директории. Каждому из них присваивается уникальных хеш на случай, если вы будете обрабатывать несколько капч.
Вот результат этого кода для нашей тестовой капчи:
Вы сами решаете, как хранить эти изображения, но я просто поместил их в директории с тем же именем, что находится на изображении (символ или цифра).
Собираем все вместе
Последний шаг. У нас есть извлекание текста, извлекание символов, техника распознавания и обучающее множество.
Мы получаем изображение капчи, выделяем текст, получаем символы, а затем сравниванием их с нашим обучающим множеством. Вы можете скачать окончательную программу с обучающим множеством и небольшим количеством капч по этой ссылке [6].
Здесь мы просто загружаем обучающее множество, чтобы иметь возможность сравнивать с ним:
def buildvector(im):
d1 = {}
count = 0
for i in im.getdata():
d1[count] = i
count += 1
return d1
v = VectorCompare()
iconset =
['0','1','2','3','4','5','6','7','8','9','0','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','
u','v','w','x','y','z']
imageset = []
for letter in iconset:
for img in os.listdir('./iconset/%s/'%(letter)):
temp = []
if img != "Thumbs.db":
temp.append(buildvector(Image.open("./iconset/%s/%s"%(letter,img))))
imageset.append({letter:temp})
А тут уже происходит все волшебство. Мы определяем, где находится каждый символ и проверяем его с помощью нашего векторного пространства. Затем сортируем результаты и печатаем их.
count = 0
for letter in letters:
m = hashlib.md5()
im3 = im2.crop(( letter[0] , 0, letter[1],im2.size[1] ))
guess = []
for image in imageset:
for x,y in image.iteritems():
if len(y) != 0:
guess.append( ( v.relation(y[0],buildvector(im3)),x) )
guess.sort(reverse=True)
print "",guess[0]
count += 1
Выводы
Теперь у нас есть все, что нужно и мы можем попробовать запустить нашу чудо-машину.
Входной файл – captcha.gif
. Ожидаемый результат: 7s9t9j
python crack.py
(0.96376811594202894, '7')
(0.96234028545977002, 's')
(0.9286884286888929, '9')
(0.98350370609844473, 't')
(0.96751165072506273, '9')
(0.96989711688772628, 'j')
Здесь мы видем предполагаемый символ и степень уверенности в том, что это действительно он (от 0 до 1).
Похоже, что у нас действительно все получилось!
На самом деле на тестовых капчах данный скрипт будет выдавать успешный результат примерно в 22% случаев.
python crack_test.py
Correct Guesses - 11.0
Wrong Guesses - 37.0
Percentage Correct - 22.9166666667
Percentage Wrong - 77.0833333333
Большинство неверных результатов приходится на неправильное распознаваине цифры «0» и буквы «О». Нет ничего неожиданного, т. к. даже люди их часто путают. У нас еще есть проблема с разбиванием на символы, но это можно решить просто проверив результат разбиения и найдя золотую середину.
Однако, даже с таким не очень совершенным алгоритмом мы можем разгадывать каждую пятую капчу за такое время, где человек не успел бы разгадать и одну.
Выполнение этого кода на Core 2 Duo E6550 дает следующие результаты:
real 0m5.750s
user 0m0.015s
sys 0m0.000s
В нашем каталоге находится 48 капч, из чего следует, что на разгадывание одной уходит примерно 0.12 секунд. С нашими 22% процентами успешного разгадывания мы можем разгадывать около 432 000 капч в день и получать 95 040 правильных результатов. А если использовать многопоточность?
Вот и все. Надеюсь, что мой опыт будет использован вами в хороших целях. Я знаю, что вы можете использовать этот код во вред, но чтобы сделать действительно нечто опасное вы должны довольно сильно его изменить.
Для тех, кто пытается защитить себя капчей я могу сказать, что это вам не сильно поможет, т. к. их можно обойти программно или просто платить другим людям, которые будут разгадывать их вручную. Подумайте над другими способами защиты.
Автор: ad3w
[4] Windows Live ID: https://signup.live.com/signup.aspx?ru=http%3a%2f%2fmail.live.com%2f%3frru%3dinbox&wa=wsignin1.0&rpsnv=10&ct=1242258428&rver=5 .5.4177.0&wp=MBI&wreply=http:%2F%2Fmail.live.com%2Fdefault.aspx&lc=2057&id=64855&mkt=en-GB&bk=1242258418&rollrs=12&lic=1
[5] Vector Space Search Engine Theory: http://la2600.org/talks/files/20040102/Vector_Space_Search_Engine_Theory.pdf
Почему CAPTCHA стали такими сложными
В какой-то момент прошлого года постоянные запросы Google доказать, что я человек, стали становиться все более агрессивными. Все чаще и чаще за простой, немного слишком милой кнопкой с надписью «Я не робот» следовали требования доказать это — путем выбора всех светофоров, пешеходных переходов и витрин в сетке изображений. Вскоре светофоры утонули в далекой листве, пешеходные переходы искривлены и повернуты за угол, вывески на фасаде магазина расплывчаты и на корейском языке.Есть что-то однозначно удручающее в том, что вас просят определить пожарный гидрант и что с ним не удается справиться.
Эти тесты называются CAPTCHA, аббревиатура от полностью автоматизированного общедоступного теста Тьюринга, позволяющего отличить компьютеры от людей, и они уже достигли такого плато непостижимости. В начале 2000-х простых изображений текста было достаточно, чтобы сбить с толку большинство спам-ботов. Но десять лет спустя, после того как Google купил программу у исследователей Карнеги-Меллона и использовал ее для оцифровки Google Книг, тексты пришлось все больше искажать и скрывать, чтобы не отставать от улучшенных программ оптического распознавания символов — программ, которые окольными путями, все люди, решающие капчи, помогали совершенствоваться.
Все эти навесы, которые могут быть, а могут и не быть витринами? Это финал гонки вооружений человечества с машинами.
Поскольку CAPTCHA — это такой элегантный инструмент для обучения ИИ, любой конкретный тест может быть только временным, что изначально признали его изобретатели. Со всеми этими исследователями, мошенниками и обычными людьми, решающими миллиарды головоломок на пороге возможностей ИИ, в какой-то момент машины должны были пройти мимо нас. В 2014 году Google противопоставил один из своих алгоритмов машинного обучения людям, решая самые искаженные текстовые CAPTCHA: компьютер прошел тест правильно 99.8 процентов времени, в то время как люди получали всего 33 процента.
Затем Google перешел на NoCaptcha ReCaptcha, который отслеживает пользовательские данные и поведение, позволяя некоторым людям пройти через них, нажав кнопку «Я не робот», и представляет другим маркировку изображений, которые мы видим сегодня. Но машины снова догоняют. Все эти навесы, которые могут быть витринами, а могут и не быть? Это финал гонки вооружений человечества с машинами.
Джейсон Полакис, профессор информатики в Университете Иллинойса в Чикаго, лично отмечает недавнее увеличение сложности CAPTCHA.В 2016 году он опубликовал статью, в которой использовал стандартные инструменты распознавания изображений, в том числе собственный поиск Google по обратным изображениям, для решения CAPTCHA Google с изображениями с точностью 70%. Другие исследователи справились с задачами Google Audio CAPTCHA, используя собственные программы распознавания звука.
По словам Полакиса, сегодня машинное обучениепримерно так же хорошо, как люди, справляется с базовыми задачами распознавания текста, изображений и голоса. На самом деле, алгоритмы, вероятно, лучше справляются с этим: «Мы находимся на этапе, когда усложнение программного обеспечения в конечном итоге делает его слишком сложным для многих людей.Нам нужна альтернатива, но конкретного плана пока нет ».
Проблема многих из этих тестов не обязательно в том, что боты слишком умны, а в том, что люди их отстой
Литература по CAPTCHA изобилует фальстартами и странными попытками найти что-то, кроме текста или распознавания изображений, в чем люди универсально хороши, а машины с которыми борются. Исследователи пытались попросить пользователей классифицировать изображения людей по выражению лица, полу и этнической принадлежности.(Вы можете себе представить, как хорошо это прошло.) Были предложения по пустяковым CAPTCHA и CAPTCHA, основанным на детских стишках, распространенных в области, где якобы вырос пользователь. Такие культурные CAPTCHA нацелены не только на ботов, но и на людей, работающих на зарубежных фермах CAPTCHA, решающих головоломки за доли цента. Люди пытались заблокировать распознавание изображений, прося пользователей идентифицировать, скажем, свиней, но при этом создавая карикатуры на свиней и давая им солнцезащитные очки. Исследователи попросили пользователей идентифицировать объекты в пятнах, похожих на Magic Eye.В 2010 году исследователи предложили использовать CAPTCHA для индексации древних петроглифов, поскольку компьютеры не очень хорошо расшифровывают жесты оленей, нацарапанные на стенах пещер.
Недавно были предприняты попытки разработать похожие на игры CAPTCHA, тесты, которые требуют, чтобы пользователи поворачивали объекты на определенные углы или перемещали части головоломки в нужное положение, с инструкциями, которые даются не в тексте, а в символах или подразумеваются контекстом игрового поля. Есть надежда, что люди поймут логику головоломки, но компьютеры, не имеющие четких инструкций, будут поставлены в тупик.Другие исследователи пытались использовать тот факт, что у людей есть тела, используя камеры устройств или дополненную реальность для интерактивного доказательства человечности.
Проблема многих из этих тестов не обязательно в том, что боты слишком умны, а в том, что люди с ними плохо справляются. И дело не в том, что люди глупы; дело в том, что люди очень разнообразны по языку, культуре и опыту. Как только вы избавитесь от всего этого, чтобы провести тест, который может пройти любой человек , без предварительной подготовки или особых размышлений, у вас останутся грубые задачи, такие как обработка изображений, именно то, что будет делать индивидуальный ИИ. хорош в.
«Тесты ограничены человеческими возможностями», — говорит Полакис. «Дело не только в наших физических возможностях, вам нужно что-то, что [может] кросс-культурное, кросс-языковое. Вам нужен вызов, который подходит для кого-то из Греции, кого-то из Чикаго, кого-то из Южной Африки, Ирана и Австралии одновременно. И он должен быть независимым от культурных сложностей и различий. Вам нужно что-то, что легко для обычного человека, это не должно быть привязано к определенной подгруппе людей, и в то же время это должно быть сложно для компьютеров.Это очень ограничивает то, что вы на самом деле можете сделать. И это должно быть что-то, что человек может делать быстро, и это не слишком раздражает ».
Выяснение того, как исправить эти викторины с расплывчатыми изображениями, быстро приведет вас к философской территории: какое универсальное человеческое качество можно продемонстрировать машине, но которое не может имитировать никакая машина? Что значит быть человеком?
Но, возможно, наша человечность измеряется не тем, как мы выполняем задачу, а тем, как мы перемещаемся по миру — или, в данном случае, через Интернет.Игровые CAPTCHA, видео CAPTCHA, любой тест CAPTCHA, который вы придумаете, в конечном итоге будет сломан, говорит Шуман Гхосемаджумдер, который ранее работал в Google по борьбе с мошенничеством с кликами, прежде чем стать техническим директором компании Shape Security, занимающейся обнаружением ботов. Вместо тестов он предпочитает так называемую «непрерывную аутентификацию», по сути наблюдая за поведением пользователя и ища признаки автоматизации. «Настоящий человек не очень хорошо контролирует свои моторные функции, и поэтому он не может двигать мышью одним и тем же способом более одного раза при нескольких взаимодействиях, даже если они очень стараются», — говорит Гхосемаджумдер.«Хотя бот будет взаимодействовать со страницей, не двигая мышью или очень точно перемещая мышь, человеческие действия имеют« энтропию », которую трудно подделать, — говорит Гхосемаджумдер.
Команда Google, занимающаяся CAPTCHA, думает в том же духе. Последняя версия reCaptcha v3, анонсированная в конце прошлого года, использует «адаптивный анализ рисков» для оценки трафика в зависимости от того, насколько он кажется подозрительным; Затем владельцы веб-сайтов могут решить бросить вызов сомнительным пользователям, например запрос пароля или двухфакторную аутентификацию.Google не сказал бы, какие факторы влияют на эту оценку, кроме того, что Google наблюдает, как выглядит группа «хорошего трафика» на сайте, по словам Сай Хормаи, менеджера по продукту в команде CAPTCHA, и использует это для определения « плохое движение. » Исследователи безопасности говорят, что это, скорее всего, сочетание файлов cookie, атрибутов браузера, шаблонов трафика и других факторов. Одним из недостатков новой модели обнаружения ботов является то, что она может сделать навигацию в Интернете, сводя к минимуму слежку, раздражающим занятием, поскольку такие вещи, как VPN и расширения для защиты от отслеживания, могут пометить вас как подозрительных и проблемных.
«Я думаю, люди понимают, что существует приложение для моделирования обычного человека-пользователя … или глупых людей».
Аарон Маленфант, руководитель отдела разработки CAPTCHA в Google, говорит, что отказ от тестов Тьюринга призван обойти конкуренцию, которую люди продолжают проигрывать. «По мере того как люди вкладывают все больше и больше средств в машинное обучение, эти задачи будут становиться все сложнее и сложнее для людей, и именно поэтому мы запустили CAPTCHA V3, чтобы опередить эту кривую.Маленфант говорит, что через пять-десять лет проблемы с CAPTCHA, скорее всего, вообще не будут жизнеспособны. Вместо этого большая часть Интернета будет иметь постоянный секретный тест Тьюринга, работающий в фоновом режиме.
В своей книге « Самый гуманный человек » Брайан Кристиан принимает участие в конкурсе по тесту Тьюринга как человек-фольга и обнаруживает, что на самом деле довольно сложно доказать свою человечность в разговоре. С другой стороны, создатели ботов обнаружили, что это легко пройти, не будучи самым красноречивым или умным собеседником, а уклоняясь от вопросов, шутками без смысла, допуская опечатки или в случае с ботом, который выиграл соревнование Тьюринга в 2014 году. , утверждающий, что он 13-летний украинский мальчик, плохо владеющий английским языком.В конце концов, человеку свойственно ошибаться. Возможно, подобное будущее ожидает CAPTCHA, наиболее широко используемый тест Тьюринга в мире — новая гонка вооружений, чтобы не создавать ботов, которые превосходят людей по маркировке изображений и синтаксическому анализу текста, а ботов, которые делают ошибки, пропускают кнопки, отвлекаются. и переключать вкладки. «Я думаю, что люди понимают, что существует приложение для моделирования обычного человека-пользователя … или глупых людей», — говорит Гхосемаджумдер.
тестов CAPTCHA тоже могут сохраняться в этом мире. В 2017 году Amazon получила патент на схему, включающую оптические иллюзии и логические головоломки, которые люди с большим трудом расшифровывают.Этот тест называется тестом Тьюринга через неудачу, единственный способ пройти — получить неправильный ответ.
Buster: Решение Captcha для людей
Сэкономьте время, попросив Buster решить для вас коды капчи.
Buster - это расширение для браузера, которое помогает вам решать сложные капчи, выполняя аудио задачи reCAPTCHA с использованием распознавания речи. Проблемы решаются нажатием на кнопку расширения внизу виджета reCAPTCHA. Не гарантируется, что задачи всегда будут решены, необходимо учитывать ограничения технологии.Дальнейшее развитие Buster стало возможным благодаря поддержке замечательных спонсоров. Если вы хотите присоединиться к ним, посетите https://armin.dev/go/patreon. Клиентское приложение Показатель успешности расширения можно повысить, моделируя взаимодействие с пользователем с помощью клиентского приложения. Следуйте инструкциям в параметрах расширения, чтобы загрузить и установить клиентское приложение в Windows, Linux и macOS, или получите приложение из этого репозитория: https://github.com/dessant/buster-client#readme Решение более пары задач reCAPTCHA в день может привести к временной блокировке, независимо от того, используете ли вы расширение.Посетите вики для получения более подробной информации. https://github.com/dessant/buster/wiki/Inaccessible-reCAPTCHA-audio-challenge Мотивация Проблемы reCAPTCHA остаются значительной нагрузкой для Интернета, задерживая и часто блокируя наш доступ к услугам и информации в зависимости от наших физических и когнитивных способностей, нашего социального и культурного происхождения, а также устройств или сетей, из которых мы подключаемся. Сложность капч может быть настолько несбалансированной, что иногда они кажутся ботам более дружелюбными, чем людям.Цель этого проекта - улучшить наш опыт работы с капчами, предоставив нам легкий доступ к решениям, уже используемым автоматизированными системами. Необходимые разрешения: • Чтение и изменение всех ваших данных на веб-сайтах, которые вы посещаете: требуется для доступа к задачам • Взаимодействие с взаимодействующими собственными приложениями: необходимо для взаимодействия с клиентским приложением, когда включено моделирование пользовательского ввода. • Отображать уведомления: используется для отображения сообщений об ошибках. • Прочтите историю просмотров: необходимо для сброса проблем. Расширение также доступно для Edge и Firefox: https: // github.com / dessant / buster # readme Обзоры не отслеживаются для отчетов об ошибках, пожалуйста, используйте GitHub для вопросов и запросов функций. https://github.com/dessant/buster
CAPTCHA больше не сложно для ботов, и вот почему
CAPTCHA: устаревший подход к защите ботов
В течение многих лет владельцы веб-сайтов использовали ряд подходов и технологий для борьбы с постоянно развивающимися бот-угрозами. Одним из наиболее распространенных способов борьбы с ботами было использование CAPTCHA, механизма запроса-ответа, который обещал простой способ отличить бота от человека.CAPTCHA — это аббревиатура от c полностью a utomated p ublic T uring test, чтобы определить компьютер c и h umans a part. CAPTCHA используется на миллионах сайтов, чтобы помочь предотвратить отправку форм, выполнение логинов и доступ к конфиденциальным страницам или процессам ботами.
Как развивалась CAPTCHA
По мере развития угроз, связанных с ботами, появляются и механизмы CAPTCHA, предназначенные для их предотвращения. В ранних формах пользователей просили прочитать искаженный текст и отправить его в форме.
Пример одного из наиболее часто используемых сегодня типов Google reCAPTCHA.
Сегодня Google reCAPTCHA представляет собой доминирующую форму используемой технологии CAPTCHA. Одно исследование показало, что на одном миллионе ведущих веб-сайтов в мире, использующих CAPTCHA, Google reCAPTCHA была развернута на 94% из них.
Как не работает CAPTCHA
Несмотря на то, что CAPTCHA широко используется и продолжает использоваться, существуют две фундаментальные проблемы:
- Взаимодействие с пользователем : С точки зрения пользователя, как вам может сказать любой живой, опыт оставляет желать лучшего.Это отнимает много времени, становится все труднее и часто может помешать законным пользователям делать то, что они хотят и должны делать.
- Эффективность : Проще говоря, с точки зрения безопасности это не работает. Предполагалось, что задача будет легкой для пользователей и сложной для ботов, но на самом деле все стало совсем наоборот.
Ниже приводится обзор множества доступных опций, которые позволяют легко обойти проблемы CAPTCHA.
Как злоумышленники легко обходят вызовы CAPTCHA
На сегодняшний день злоумышленникам доступен ряд технологий и сервисов для решения CAPTCHA.Злоумышленники выбирают решатели, которые лучше всего работают против типа CAPTCHA, используемого на целевом сайте. Вот две категории высокого уровня:
Автоматизированные технологии и плагиныСуществует ряд автоматизированных технологий, включая API-интерфейсы, плагины для браузеров и расширения, которые позволяют злоумышленникам обходить или решать проблемы CAPTCHA. Вот несколько примеров:
- Группа исследователей из Ланкастерского университета, Северо-Западного университета и Пекинского университета использовала концепцию генеративной состязательной сети (GAN) для создания чрезвычайно быстрого и точного решателя CAPTCHA.
- Существует несколько бесплатных онлайн-сервисов и библиотек для решения CAPTCHA, которые используют технологии на основе глубокого обучения, включая GRIS, Alchemy, Clarifai и NeuralTalk. Академические исследования показывают, что подходы, основанные на глубоком обучении, очень точны при решении задач CAPTCHA.
- DeCaptcher — это пример одной из служб решения, доступных через API, что упрощает интеграцию в приложения. Основываясь на системе оптического распознавания символов, сервис решает задачи и предоставляет файл для загрузки, в котором подробно описывается время, изображение задачи и текст, использованный для решения задач.
- Инструменты с открытым исходным кодом и расширения браузера, включая Buster и UnCaptcha, используют распознавание звука, которое было предназначено для помощи пользователям с ослабленным зрением, и злоупотребляют им, чтобы обойти механизмы CAPTCHA в автоматическом режиме.
Кроме того, доступны сервисы, выполняемые человеком. В этих службах часто работают люди, которые работают на так называемых фермах. Эти услуги легко найти с помощью простого поиска в Google.Эти службы позволяют злоумышленникам обходить проблемы распознавания объектов, используемые в reCAPTCHA, экономически выгодно.
2captcha и anti-captcha — одни из самых популярных примеров такой службы. На высоком уровне эти службы позволяют клиентам отправлять целевые веб-сайты поставщику, часто через API. Персонал поставщика решит проблему и вернет решение заказчику. Эти поставщики рекламируют решение 1000 обычных задач CAPTCHA всего за 1 доллар и 1000 задач reCAPTCHA всего за 1 доллар.99 и 2,99 доллара.
Растущее распространение и использование решателей CAPTCHA
Учитывая их низкую / бесплатную стоимость, доступность и эффективность, использование решателей CAPTCHA продолжает расти. С помощью нашего решения PerimeterX Bot Defender мы обнаружили быстрое расширение использования решателей CAPTCHA. Как показано на диаграмме ниже, в период с августа 2019 года по март 2020 года мы увидели значительный рост количества попыток атак, в которых использовались решатели CAPTCHA.
Учитывая их доступность и простоту, использование решателей CAPTCHA быстро растет.
Заключение
Совершенно очевидно, что пользователи и компании не переносят механизмы CAPTCHA, которые прерывают поток пользователей и в конечном итоге снижают конверсию на веб-сайтах. В частности, по мере того, как искусственный интеллект продолжает совершенствоваться, отдельные подходы «визуальный вызов-ответ» нежизнеспособны. Проще говоря, организации не могут полагаться только на механизмы на основе CAPTCHA для борьбы с ботами, учитывая обилие решателей CAPTCHA. Эти реалии демонстрируют очевидный спрос на продвинутые механизмы, которые не расстраивают пользователей и которые сложно решить ботам.
CAPTCHA легко обмануть
CAPTCHA: люди против компьютеров
На некоторых веб-сайтах вы могли заметить, что вам не позволяют продолжить посещение или покупку, пока вы не решите загадку из непонятных букв или изображений. После того, как вы посмотрели на несколько волнистых линий, расшифровали слова и набрали правильное слово на пустом месте, вы, наконец, можете продолжить. Этот процесс выполняется для подтверждения того, что мы, на самом деле, человек, обращающихся к сайту.
Этот тест называется CAPTCHA (полностью автоматизированный общедоступный тест Тьюринга для различения людей и компьютеров) и используется во всем Интернете.Сайт продажи билетов Ticketmaster — отличный пример использования CAPTCHA; без проверки с участием человека «робот» потенциально мог бы купить миллионы билетов до того, как билеты на концерт или мероприятие разойдутся, а затем пожинать плоды скальпирования их по гораздо более высокой цене.
Необходимость угадывать комбинацию букв и цифр каждый раз, когда мы делаем что-то в сети, определенно раздражает. И требует много времени. Каждый раз, разгадывая капчу, вы тратите 10 секунд своей жизни. Вот почему CAPTCHA заработала плохую репутацию среди пользователей Интернета, несмотря на то, что была создана, чтобы гарантировать нашу безопасность.
CAPTCHA не позволяет киберпреступникам совершать набеги на Интернет
Captcha заботится!
Луис фон Ан, один из первых создателей CAPTCHA, продолжает успешно проводить испытания вместе с новым разработчиком Google. Он переродился в reCAPTCHA, расширение Captcha, которое берет слова из сканированных страниц старых книг — слова, которые компьютеру сложнее распутать. Защищая нашу безопасность, помогая «оцифровывать текст, комментировать изображения и создавать наборы данных машинного обучения»… теперь эти 10 драгоценных секунд используются для чего-то стоящего.
Это здорово, что мы помогаем оцифровывать книги, но когда дело доходит до интернет-безопасности,
эффективны ли CAPTCHA?Обойти CAPTCHA Google опасно просто
Трио исследователей из Колумбийского университета (Нью-Йорк) доказали , насколько легко обойти некоторые CAPTCHA . Подобные программы затрудняют злоумышленникам использование программных ботов для автоматического и массового сбора адресов электронной почты для спам-кампаний.Но они не надежны. Подобные процессы можно автоматизировать, и в конечном итоге компьютеры смогут решать reCAPTCHA, как вы или я.
Мы все больше и больше погружаемся в технологии. Компьютеры становятся все менее и менее зависимыми от людей, а роботы становятся все более и более программируемыми для выполнения человеческих действий. Несмотря на то, что это игра в кошки-мышки, Google продолжает разрабатывать и проводить тесты, такие как CAPTCHA, чтобы не позволяло роботам делать то, что , если должны делать только люди.
Как киберпреступники обходят CAPTCHA — блог Shape Security
CAPTCHA ( C полностью A автоматический тест P ublic T uring для определения компьютеров C и H umans A ), изначально был разработан для предотвращения ботов, вредоносных программ и искусственного интеллекта. (AI) от взаимодействия с веб-страницей. В 90-х это означало предотвращение спам-ботов. В наши дни организации используют CAPTCHA в попытке предотвратить более зловещие автоматические атаки, такие как заполнение учетных данных.
Однако почти сразу после внедрения CAPTCHA киберпреступники разработали эффективные методы ее обхода. Хорошие парни ответили «усиленными» CAPTCHA, но результат остался прежним: тест, который пытается остановить автоматизацию, обходится автоматизацией.
Есть несколько способов обойти CAPTCHA. Распространенным методом является использование службы решения CAPTCHA, которая использует дешевый человеческий труд в развивающихся странах для решения изображений CAPTCHA. Киберпреступники подписываются на сервис для решений CAPTCHA, которые интегрируются в их инструменты автоматизации с помощью API, заполняя ответы на целевом веб-сайте.Эти теневые предприятия настолько распространены, что многие можно найти с помощью быстрого поиска в Google, в том числе:
- Смерть от КАПЧА
- 2Captcha
- Колотибабло
- ProTypers
- Антигейт
В этой статье будет использоваться 2Captcha, чтобы продемонстрировать, как злоумышленники интегрируют решение для организации атак с заполнением учетных данных.
2Captcha
При доступе к сайту 2Captcha.com зритель встречает изображение ниже, спрашивая, хочет ли посетитель: 1) работать с 2Captcha или 2) покупать 2Captcha как услугу.
Вариант 1 — Работа на 2Captcha
Чтобы работать с 2Captcha, просто зарегистрируйте учетную запись, указав адрес электронной почты и учетную запись PayPal для внесения платежей. Во время теста учетная запись была подтверждена в течение нескольких минут.
Новые сотрудники должны пройти разовый курс обучения, который научит их быстро решать CAPTCHA. Он также дает подсказки, например, когда дело имеет значение, а когда нет. Пройдя обучение с достаточной точностью, работник может начать зарабатывать деньги.
После выбора «Начать работу» рабочий переносится на экран рабочей области, который изображен выше. Затем работнику предоставляется CAPTCHA и предлагается отправить решение. После правильного решения деньги переводятся в электронный «кошелек», и работник может запросить выплату в любое время по своему усмотрению. Кажется, нет конца количеству CAPTCHA, которые появляются в рабочей области, что указывает на устойчивый спрос на услугу.
2Captcha сотрудников стимулируют предоставлять правильные решения так же, как водителя Uber стимулируют предоставлять отличное обслуживание — рейтинги клиентов.Клиенты 2Captcha оценивают точность полученных ими решений CAPTCHA. Если рейтинг работника 2Captcha упадет ниже определенного порога, он будет удален с платформы. И наоборот, работники с наивысшими оценками будут вознаграждены в периоды низкого спроса, получив приоритет при распределении CAPTCHA.
Вариант 2 — 2Captcha как услуга
Чтобы использовать 2Captcha в качестве услуги, клиент (то есть злоумышленник) интегрирует API 2Captcha в свою атаку, чтобы создать цифровую цепочку поставок, автоматически загружая головоломки CAPTCHA с целевого сайта и получая решения для ввода на целевой сайт.
2Captcha предоставляет примеры сценариев для генерации вызовов API на разных языках программирования, включая C #, JavaScript, PHP, Python и другие. Пример кода, написанный на Python, воспроизводится ниже:
Интеграция 2CAPTCHA в автоматизированную атаку
Как злоумышленник будет использовать 2Captcha в атаке с заполнением учетных данных? На диаграмме ниже показано, как различные объекты взаимодействуют в процессе обхода CAPTCHA:
Технический процесс:
- Злоумышленник запрашивает источник CAPTCHA iframe и URL-адрес, используемый для встраивания изображения CAPTCHA с целевого сайта, и сохраняет его локально
- Злоумышленник запрашивает токен API с сайта 2Captcha
- Злоумышленник отправляет CAPTCHA в службу 2Captcha с помощью HTTP POST и получает ID Captcha, который представляет собой числовой идентификатор, связанный с изображением CAPTCHA, которое было отправлено в 2Captcha.Идентификатор используется на шаге 5 для запроса API GET к 2Captcha для получения решенной CAPTCHA.
- 2Captcha назначает CAPTCHA работнику, который затем решает ее и отправляет решение в 2Captcha.
- Атакующий программирует скрипт для проверки связи 2Captcha с использованием CAPTCHA ID (каждые 5 секунд до решения). Затем 2Captcha отправляет решенную CAPTCHA. Если решение все еще решается, злоумышленник получает сообщение от 2Captcha с указанием «CAPTCHA_NOT_READY», и программа повторяет попытку через 5 секунд.
- Злоумышленник отправляет запрос на вход на целевой сайт с заполненными полями (то есть набор учетных данных из украденного списка) вместе с решением CAPTCHA.
- Злоумышленник повторяет этот процесс с каждым изображением CAPTCHA.
В сочетании с фреймворками веб-тестирования, такими как Selenium или PhantomJS, злоумышленник может взаимодействовать с целевым веб-сайтом по-человечески, эффективно обходя многие существующие меры безопасности для запуска атаки с заполнением учетных данных.
Монетизация и криминальная экосистема
С таким элегантным решением как выглядит финансовая экосистема и как каждая из сторон зарабатывает деньги?
Монетизация: решатель CAPTCHA
Работа в качестве решателя CAPTCHA далеко не прибыльна. На основе показателей, представленных на сайте 2Captcha, можно рассчитать следующую выплату:
Если предположить, что на одну CAPTCHA уходит 6 секунд, работник может отправить 10 CAPTCHA в минуту или 600 CAPTCHA в час.За 8-часовой рабочий день это 4800 CAPTCHA. Исходя из того, что было заработано во время нашего испытания в качестве сотрудника за 2Captcha (примерно 0,0004 доллара за решение), это равняется 1,92 доллара в день.
Это пустая трата времени для людей в развитых странах, но для тех, кто живет в регионах, где несколько долларов в день могут быть относительно большими, услуги решения CAPTCHA — простой способ заработать деньги.
Монетизация: Атакующий
Злоумышленник платит третьей стороне, 2Captcha, за решения CAPTCHA пачками по 1000 штук.Злоумышленники делают ставки на решения, платя от 1 до 5 долларов за комплект.
Многие злоумышленники используют службы решения CAPTCHA в качестве компонента более крупной атаки с заполнением учетных данных, что оправдывает затраты. Например, предположим, что злоумышленник запускает атаку, чтобы проверить один миллион учетных данных от Pastebin на целевом сайте. В этом сценарии злоумышленнику необходимо обойти одну CAPTCHA с каждым набором учетных данных, что будет стоить примерно 1000 долларов. Предполагая, что успешное повторное использование учетных данных составляет 1,5%, злоумышленник может захватить более 15 000 учетных записей, и все они могут быть монетизированы.
Монетизация: 2Captcha
2Captcha получает оплату от Злоумышленника из расчета на 1000 CAPTCHA. Как упоминалось выше, клиенты (то есть злоумышленники) платят от 1 до 5 долларов за 1000 CAPTCHA. Такие сервисы, как 2Captcha, затем берут часть цены предложения, а остальное распределяют среди своих сотрудников. Поскольку сервисы решения CAPTCHA используются в качестве масштабного решения, прибыль неплохо складывается. Даже если 2Captcha получает только 1 доллар за 1000 решенных CAPTCHA, они приносят минимум 60 центов за пакет.Владельцы этих сайтов часто сами находятся в развивающихся странах, поэтому кажущиеся низкие доходы значительны.
А как насчет невидимой reCAPTCHA Google?
В марте этого года Google выпустил обновленную версию своей reCAPTCHA под названием «Invisible reCAPTCHA». В отличие от «no CAPTCHA reCAPTCHA», при которой все пользователи должны были нажимать печально известную кнопку «Я не робот», Invisible reCAPTCHA позволяет известным пользователям-людям проходить через нее, одновременно обслуживая вызов изображения reCAPTCHA только для подозрительных пользователей.
Вы можете подумать, что это поставит в тупик злоумышленников, потому что они не смогут видеть, когда их проверяют. Тем не менее, всего через день после того, как Google представил Invisible reCAPTCHA, 2CAPTCHA написал в блоге сообщение о том, как с ней справиться.
Google знает, что пользователь — человек, если пользователь ранее посещал запрошенную страницу, что Google определяет, проверяя файлы cookie браузера. Если тот же пользователь начал использовать новое устройство или недавно очистил свой кеш, у Google нет этой информации, и он будет вынужден выполнить запрос reCAPTCHA.
Чтобы злоумышленник мог автоматизировать атаку с заполнением учетных данных с использованием 2Captcha, он должен гарантировать вызов CAPTCHA. Таким образом, один из способов обойти Invisible reCAPTCHA — добавить строку кода в сценарий атаки, который очищает браузер при каждом запросе, гарантируя решаемую задачу reCAPTCHA.
Немного хитрость в Invisible reCAPTCHA заключается в том, что проблема CAPTCHA скрыта, но есть обходной путь. CAPTCHA можно «найти» с помощью инструмента браузера «проверить элемент».Таким образом, злоумышленник может отправить POST на 2Captcha, который включает параметр, указывающий, где находится скрытая CAPTCHA. Как только злоумышленник получает решение CAPTCHA от 2Captcha, Invisible reCAPTCHA может быть уничтожена с помощью автоматизации одним из двух способов:
- Действие JavaScript, которое вызывает функцию для предоставления решенного токена с отправкой формы страницы HTML-код
- изменяется непосредственно на веб-странице, чтобы заменить фрагмент обычного кода CAPTCHA на ввод решенного токена.
Тот факт, что Invisible reCAPTCHA можно обойти, не связан с фатальной ошибкой в дизайне новой CAPTCHA.Дело в том, что любой обратный тест Тьюринга по своей природе можно победить, если известны условия прохождения.
Пока есть CAPTCHA, будут такие сервисы, как 2Captcha, потому что экономика играет на руку преступнику. Использование дешевого человеческого труда сводит к минимуму затраты на ведение бизнеса и позволяет киберпреступникам получать прибыль, которая может достигать миллионов долларов в масштабе. И всегда будут регионы мира с дешевой стоимостью рабочей силы, поэтому постоянный спрос обеспечивает постоянное предложение на стороне 2Captcha.
Миру не нужно разрабатывать более совершенную CAPTCHA, поскольку весь этот подход имеет фундаментальные ограничения. Вместо этого мы должны признать эти ограничения и реализовать защиту там, где условия прохождения неизвестны или, по крайней мере, трудно определить злоумышленникам.
Источники
Холмс, Тамара Э. «Статистика предоплаченных и подарочных карт». CreditCards.com . Creditcards.com, 1 декабря 2015 г. Web.
Хант, Троя. «Взлом CAPTCHA с помощью автоматизированных людей.» Сообщение блога. Тройская охота . Трой Хант, 22 января 2012 г. Интернет.
Мотояма, Марти, Кирилл Левченко, Крис Канич и Стефан Сэвидж. Re: CAPTCHA — Понимание услуг по решению CAPTCHA в экономическом контексте . Proc. 19-го симпозиума по безопасности USENIX, Вашингтон, округ Колумбия. Распечатать.
Узнать больше
Посмотрите видео «Узнайте, как киберпреступники уничтожают CAPTCHA».
Как это:
Нравится Загрузка …
5 фактов, которые нужно знать об обходе CAPTCHA при парсинге веб-страниц (обновлено в 2019 г.)
Если вы когда-либо пытались войти на веб-сайт, велика вероятность, что вас попросили ввести некоторые символы, которые нелегко прочитать.Неразборчивые символы называются CAPTCHA. Они немного раздражают пользователей и часто сводят с ума людей, использующих парсеры, так как с ними трудно справиться, сканируя ботов.
Сегодня мы поговорим о 5 вещах, которые вам нужно знать о CAPTCHA, чтобы помочь вам лучше обходить ее при парсинге веб-страниц.
1. Что такое капча?
2. Как работает CAPTCHA
3. Каковы общие типы CAPTCHA
4.Почему веб-сайты применяют CAPTCHA
5. Как работать с CAPTCHA для парсинга веб-страниц
1. Что такое капча?
Согласно Википедии, CAPTCHA (полностью автоматизированный общедоступный тест Тьюринга, позволяющий отличить компьютеры и людей друг от друга) — это тип теста «вызов-ответ», используемый в вычислительной технике для определения того, является ли пользователь человеком.
Он обычно используется в Интернете, особенно при покупке продуктов в Интернете или при входе на веб-сайт.
2. Как работает CAPTCHA
ТехнологияCAPTCHA основана на тесте Тьюринга, который используется для проверки того, может ли машина мыслить как люди. Цель CAPTCHA — задавать вопросы или решать проблемы, с которыми компьютеры не могут справиться. Обычно он показывает искаженную строку случайных символов или чисел. Это работает, потому что человек, смотрящий на искаженное изображение, может без проблем читать слова, в то время как инструмент соскабливания не распознает их легко.Даже самая сложная автоматизированная система, которая была запрограммирована для сканирования изображения страницы печатного текста и чтения слов на картинке, все еще испытывает трудности с чтением слов, когда слова слишком сильно затемнены или искажены.
3. Каковы общие типы CAPTCHA
CAPTCHA бывает нескольких размеров и разных типов. Наиболее распространенными типами CAPTCHA являются CAPTCHA на основе текста, CAPTCHA на основе изображений и CAPTCHA на основе звука.
Текстовый тест CAPTCHA состоит из двух простых частей: случайно сгенерированной последовательности букв и / или цифр, которые появляются в виде искаженного изображения, и текстового поля. Чтобы пройти тест и подтвердить свою личность, просто введите символы, которые вы видите на изображении, в текстовое поле.
Просто показать персонажей для ботов не так уж и сложно. Чтобы увеличить сложность, есть математическая CAPTCHA, которая включает в себя базовую математическую задачу с легко читаемыми числами, и 3D CAPTCHA, которая отображает символы с 3D-эффектом.
CAPTCHA на основе изображений обычно предоставляет пользователям изображения объектов, животных, людей или ландшафтов вместо искаженного текста, чтобы отличить человека от компьютерной программы. Пользователи должны выбрать правильные изображения, которые их просят идентифицировать, или перетащить блок в изображение, чтобы сделать его законченным.
CAPTCHA на основе аудио использует случайные слова или числа, взятые из записей, объединяет их и даже добавляет к ним некоторый шум.Пользователи должны вводить слова или числа в записи. Звуковые CAPTCHA сложнее сравнивать с CAPTCHA для контента и изображений, поскольку нелегко позволить парсеру научиться слушать.
4. Почему веб-сайты применяют CAPTCHA
В настоящее время вычисления стали повсеместными, а компьютеризированные задачи и услуги стали обычным явлением, поэтому повышенный уровень безопасности стал более важным. Разработка CAPTCHA для компьютеров заключается в том, чтобы гарантировать, что они имеют дело с людьми в ситуациях, когда человеческое взаимодействие имеет важное значение для безопасности, например, при входе на веб-сайт или оплате в Интернете.
CAPTCHA также блокирует спамеров и ботов, которые пытаются автоматически собирать онлайн-данные, пытаются автоматически регистрироваться или использовать веб-сайты, блоги или форумы. Он защищает веб-сайты от переполнения спамом, мошеннических регистраций и других незаконных действий.
5. Как работать с CAPTCHA для парсинга веб-страниц
CAPTCHA может легко сломать настроенные вами сканеры, как только она появится в процессе извлечения, поэтому работа с ней очень важна для парсинга веб-страниц.Лучший способ справиться с CAPTCHA — постараться не встретить ее :). Никогда не пытайтесь очистить веб-сайт слишком часто, а действуйте как человек. (У нас есть еще одна статья, в которой рассказывается о том, как избежать блоков во время очистки, и вы можете проверить это здесь .)
Но есть еще много CAPTCHA, которых нельзя избежать, например, CAPTCHA на странице входа в систему. В Octoparse вы можете вручную решить CAPTCHA так же легко, как и обычно при просмотре сайта. (Посмотрите пример здесь .)
Для людей, которые кодируют свои собственные скреперы, существует множество решателей CAPTCHA, которые можно интегрировать в их систему скрепинга. Например, Death by CAPTCHA и Bypass CAPTCHA позволяют пользователям подключать службу через API для автоматического решения CAPTCHA во время процесса парсинга. Эти инструменты решения CAPTCHA могут работать с обычными текстовыми CAPTCHA и даже с reCAPTCHA. При необходимости 2CAPTCHA — прекрасный поставщик услуг, который поможет вам решить эту проблему.
CAPTCHA может быть головной болью при парсинге веб-страниц.Но не волнуйтесь. С каждым поколением CAPTCHA есть каждое поколение ботов. CAPTCHA стала побежденной с появлением инструментов для очистки и решателей CAPTCHA. Вы можете беспрепятственно выполнять парсинг веб-страниц с помощью этих инструментов.
Автор: Иина Хуанг
Корректура: Изабель Ли
Artículo en español: 5 Cosas que Debes Sabre al Evitar CAPTCHA para El Web Scraping
También puede leer artículos de web scraping en El Website Oficial
20 лучших инструментов для быстрого парсинга веб-сайтов
30 лучших инструментов больших данных для анализа данных
25 приемов для развития вашего бизнеса с помощью извлечения данных из Интернета
Шаблоны для парсинга веб-страниц на вынос
Видео: Создайте свой первый скребок с Octoparse 8
Решите Captcha автоматически с помощью службы поиска Captcha Solver
Скажем, вам нужно заполнить сотни или тысячи онлайн-форм, чтобы провести крупномасштабное исследование рынка для вашего следующего крупного проекта.Единственный способ добиться этого — автоматизировать процесс.
Проблема, однако, в том, что онлайн-форма или формы, которые вы пытаетесь заполнить, содержат капчи. Да, те странные тесты на идентификацию текста и изображений, которые нужно пройти, чтобы доказать, что вы человек, что каким-то образом сводит на нет цель автоматизации.
Слово captcha является аббревиатурой от «полностью автоматизированного общедоступного теста Тьюринга для различения компьютеров и людей». Он был разработан специально в качестве меры безопасности, чтобы не дать ботам и другим программам рассылать спам в различных онлайн-сервисах.
Вы можете встретить несколько различных типов капч при заполнении онлайн-форм в Интернете. Это может быть текстовая капча, графическая капча, ReCaptcha, NoCaptcha ReCaptcha, математическая капча, 3D-капча или другие.
Решение капчи все равно может доставлять неудобства людям. И в зависимости от того, как вы хотите работать с капчами, вы можете использовать службу решения капчи, чтобы обойти решение капчи как часть вашего автоматизированного рабочего процесса или упростить его для людей с ослабленным зрением, у которых возникают проблемы с решением капчи.
Как работают решатели капчи
Технически невозможно «обойти» капчу, не разгадав ее. Единственный способ обойти ситуацию — позволить кому-то другому делать работу за вас. И здесь на помощь приходят такие сервисы, как 2Captcha. Эти службы решают капчу двумя способами:
Оптическое распознавание символов
Это включает использование технологии распознавания текста для решения капчи. Технология автоматизирована и работает, пытаясь идентифицировать текст в изображениях капчи.
Услуги по расшифровке капчи с человека
Для всех капч, которые не могут быть идентифицированы автоматически, эта функция работает путем найма людей, которые знают, как решать капчи, чтобы они выполняли это от имени клиентов. Наемные решатели капчи всегда онлайн. Они получают капчу в режиме реального времени, решают ее и отправляют обратно.
Как использовать службу решения капчи
Для автоматического решения капчи
Если вы занимаетесь исследованием рынка и пытаетесь обойти решение капчи и отдать работу на аутсорсинг, большинство служб решения капчи позволяют интегрировать их услуги в ваши автоматизированные программы через API.
Рабочий процесс обычно состоит из следующих этапов:
- Зарегистрируйтесь в службе решения капчи.
- Внедрите API службы в свой код.
- Отправьте им капчи
- Получите ответ на решенный вопрос в виде текста.
Для большинства популярных сервисов по разгадыванию капчи на это требуется менее 15 секунд. ReCaptcha может занять немного больше времени, так как они в основном перехватываются людьми, решающими капчу.
Для пользователей, пытающихся обойти решение капчи
Для людей, которые просто хотят избежать необходимости иметь дело с капчами, или для тех, кто сталкивается с трудностями при вводе капчи из-за плохого зрения, существует ряд надстроек браузера или расширения, доступные для выполнения задачи за них.
Эти надстройки могут автоматически обнаруживать капчи на веб-страницах и автоматически решать их, пока пользователь просматривает страницу. Некоторые из популярных надстроек браузера включают 2Captcha, Anti-captcha, Captcha Be Gone и Rumola.
Использование решателя ReCaptcha и обхода ReCaptcha
Большинство сервисов решения капчи, например, обычно, также работают с Google ReCaptcha, что иногда может сильно раздражать при заполнении определенных онлайн-форм и документов. Решатель ReCaptcha работает так же, как решатели капчи.
One интегрирует онлайн-API и / или устанавливает плагины браузера, которые выполняют решение ReCaptcha от имени пользователя. Можно также решить проблему со звуком, которую, возможно, решить проще по сравнению с изображениями ReCaptcha.
Другие способы обхода ReCaptcha включают использование ботов для обхода VPN и ReCaptcha. Некоторые VPN позволяют пользователям выполнять обход ReCaptcha на законных основаниях, хотя эти VPN не так дешевы или бесплатны, как другие стандартные VPN на рынке. Боты обхода работают так же, как плагины решателя капчи.
Сравнение сервисов по разгадыванию капчи
Сегодня на рынке доступно множество сервисов по разгадыванию капчи. Ниже приведены некоторые из самых популярных сервисов по разгадыванию капчи, а также то, как предложения 2Captcha могут быть лучше, чем у большинства его конкурентов.
2Captcha
2Captcha, возможно, является одним из идеальных решателей капчи на современном рынке. Он имеет API, который обслуживает широкий спектр языков программирования и использует как OCR, так и людей для решения и обхода капчи.Он поддерживает ReCaptcha v2, а также v3, и обработка обычно занимает менее 12 секунд с высокой степенью точности. Специализированная поддержка доступна каждому клиенту. К тому же цены доступные, и есть гарантия возврата денег.
DeathByCaptcha
DeathByCaptcha — еще один сервис для решения капчи с рабочим временем около 11 секунд. Он использует метод OCR и идет рука об руку с Antigate. Он также использует людей для решения некоторых из простых для расшифровки капч.Однако у него низкое соотношение цены и качества, и не все типы капч распознаются API.
DeCaptcher
DeCaptcher использует как людей, так и методы распознавания текста для решения капчи и является динамическим для разных языков программирования. Однако в нем нет решателя токенов ReCaptcha v2 и отсутствует функция быстрой миграции, которая помогает пользователям легко переходить с других сервисов.
Antigate
Antigate — это служба декодирования в реальном времени, которая использует простой API для решения капч от имени пользователя.Время работы около 15 секунд. Однако его ценовой диапазон варьируется и особенно высок во время пиковой нагрузки на программное обеспечение.
Зачем использовать 2Captcha в качестве решателя капчи
2Captcha — это современный сервис для решения капчи, который предлагает одни из самых низких ставок на рынке с высоким соотношением цены и качества, и можно получить возмещение денег за выдающиеся капчи. Их API легко реализовать и поддерживает широкий спектр различных кодов.