Расшифровка капчи: распознавание капчи / автоматический ввод капчи / кода защиты

Пример взлома простой капчи за 15 минут с помощью машинного обучения | by NeuroHive Ru

Пример простой CAPTCHA

А именно самого используемого в мире плагина для WordPress Really Simple Captcha.

Капча (CAPTCHA) — надоедливая картинка с текстом, который надо ввести, чтобы попасть на сайт. Капчу придумали чтобы роботы не могли автоматически заполнять формы, и чтобы владельцы сайта были уверены, что пользователь — человек. С развитием машинного обучения и машинного зрения, ее зачастую стало довольно просто взломать.

Я прочел отличную книгу: Deep Learning for Computer Vision with Python, которую написал Adrian Rosebrock. В этой книге Адриан описывает способ, которым он взломал капчу на сайте E-ZPass New York используя машинное обучение:

У Адриана не было доступа к исходному коду, генерирующему капчу. Чтобы обучить модель, ему пришлось скачать тысячи картинок и вручную разметить все надписи.

Но предположим, что мы хотим взламывать капчу, к исходному коду которой у нас есть доступ.

Я зашел на WordPress.org Plugin Registry и ввел в поиске “captcha”. Первый результат назывался “Really Simple CAPTCHA” и установлен более миллиона раз.

И самое крутое — он с открытыми исходниками! Раз у нас есть алгоритм, генерирующий картинку, его, должно быть, не сложно взломать. Чтобы было сложнее, ограничим себе время. Можно ли уложиться в 15 минут? Давайте попробуем!

Важное замечание: Это ни в коем случае не критика плагина “Really Simple CAPTCHA” или его автора. Сам автор указал, что плагин более не является надежным и рекомендует использовать что-нибудь другое. Это просто небольшой интересный челлендж. Если вы один из того миллиона пользователей, установивших его, то возможно вам стоит сменить данный плагин на что-нибудь другое 🙂

Для начала посмотрим на изображения, создаваемые Really Simple CAPTCHA. На демке видим это:

Итак, капча состоит из четырех букв. Убедимся в этом, посмотрев исходники:

Да, действительно капча создается случайным образом из четырех букв или цифр с разными шрифтами. Символы “O”, “0”, “I”, “1” не используются, чтобы пользователь не путался. Остается 32 символа, которые нужно распознать. Не проблема!

Прошло: 2 минуты

Перед тем, как решать задачу, перечислим инструменты, которыми мы будем пользоваться:

Python — простой и мощный язык программирования с отличными библиотеками для машинного обучения и машинного зрения.

Популярная библиотека для обработки изображений с поддержкой алгоритмов машинного зрения. Мы будем использовать ее для предварительной обработки капчи. OpenCV написана на C++, но все ее функции вызываются из питона, чем мы и будем пользоваться.

Фреймворк для машинного обучения, написанный на питоне. С его помощью легко строить, обучать и использовать нейронные сети. Требует минимального количества кода.

Гугловская библиотека для машинного обучения. Мы будем пользоваться только Keras, но сам Keras в качестве бэкенда использует TensorFlow, поэтому его тоже придется установить.

Итак, обратно к задаче!

Чтобы собрать любую модель машинного обучения, требуются обучающие данные. Нам понадобятся данные, выглядящие следующим образом:

Так как у нас есть исходный код плагина, создающего капчу, мы можем его использовать, чтобы нагенерировать 10,000 изображений, и для каждого будет известна расшифровка.

Пару минут повозившись с кодом и добавив в него простой цикл ‘for’, я получил папку с обучающими данными — 10,000 PNG файлов, в названии которых указан правильный ответ:

В этом и только в этом месте я не дам вам рабочий пример кода. Мы делаем это в образовательных целях, и мне не хочется, чтобы вы заспамили реальные сайты, работающие на WordPress. Вместо этого, я дам ссылку на 10,000 изображений, сделанных мной, чтобы вы могли повторить мой результат.

Прошло: 5 минут

Теперь, когда есть обучающие данные, мы могли бы их использовать напрямую, обучив по ним нейросеть:

С достаточным количеством данных, этот подход мог бы даже сработать. Но можно сделать задачу гораздо проще. Чем проще задача, тем меньше нам понадобится обучающих данных и вычислительных ресурсов, чтобы ее решить. У нас ведь всего лишь 15 минут!

К счастью, капча состоит всего из четырех символов. Если как-нибудь разделить ее так, чтобы каждая буква была отдельным изображением, то можно будет обучить нейросеть распознавать по одному символу за раз:

У меня нет времени разрезать каждую из 10,000 картинок в фотошопе. Это бы заняло несколько дней, а у меня осталось всего 10 минут. И нельзя просто автоматически разделить все картинки на 4 одинаковых куска. Потому что алгоритм задает символам случайное горизонтальное положение:

Символы сдвинуты случайным образом, чтобы изображение было сложнее разделить.

К счастью, это всё же можно автоматизировать. При обработке изображений часто приходится находить связные области из пикселей одного цвета. Границы таких областей называют контурами. В OpenCV есть встроенная функция findContours(), которую мы используем, чтобы найти связные области.

Итак, начнем с изображения капчи:

Преобразуем изображение в бинарное (это называется thresholding), чтобы было легче найти связные области:

Далее, используем функцию findContours(), чтобы выделить связные группы пикселей, состоящие из одного цвета:

Теперь, нужно просто сохранить каждый прямоугольник как отдельное изображение. И, так как мы знаем последовательность символов в каждом изображении, можно подписать каждый прямоугольник своим символом при сохранении.

Погодите-ка! Тут есть проблемка! Буквы в капче иногда накладываются друг на друга:

И наш алгоритм отмечает их как одну:

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

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

Мы разделим пополам все прямоугольники, ширина которых сильно превышает высоту, и будем считать их за две буквы. Способ слегка “химический”, но с этими капчами работает.

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

Вот так выглядит моя папка с буквой “W” после того, как я запустил свой алгоритм:

Некоторые буквы “W”, вытащенные из наших 10,000 изображений. У меня всего получилось 1,147 разных “W”.

Прошло: 10 минут…

Так как нам нужно всего лишь распознавать одну букву или цифру, нейросеть со сложной архитектурой не потребуется. Распознавание символов — это гораздо более простая задача, чем распознавание сложных изображений, к примеру, кошек и собак.

Будем использовать простую сверточную нейросеть с двумя сверточными (convolutional) слоями и двумя полносвязными (dense):

Задать архитектуру нейросети используя Keras можно всего в несколько строк:

Теперь можно обучать нейросеть!

После 10 прогонов по всему обучающему набору, мы достигаем точности почти в 100%. В начале мы ставили задачу автоматически распознавать любую капчу. И мы это сделали!

Прошло: 15 минут (фух!)

Теперь, когда нейросеть обучена, ее можно использовать для взлома капчи:

  1. Взять изображение капчи с сайта, который использует этот плагин.
  2. Разбить картинку на четыре части, на каждой из которых по одному символу.
  3. Прогнать каждую часть через нейросеть.
  4. Использовать выданные нейросетью буквы, чтобы решить капчу.
  5. PROFIT!

Вот так выглядит расшифровка реальной капчи:

А в командной строке вот так:

Если хотите попробовать сами, то возьмите код здесь. Он включает 10,000 картинок и код для каждого шага в этой статье. Инструкция к запуску в файле README.md.

Но если хочется вникнуть и понять, что делает каждая строчка кода, советую купить книгу Deep Learning for Computer Vision with Python. Она содержит более детальное объяснение и кучу разобранных примеров. Это единственная книга из тех что я видел, в которой объясняется и как это работает, и как это использовать, чтобы решать реальные и сложные задачи. Рекомендую!

Пример взлома капчи за 15 минут с помощью машинного обучения

Перевел Руслан Байназаров, оригинал — Adam Geitgey

Новая нейросеть взломала капчу

Разработчики американской компании Vicarious создали алгоритм, эффективно расшифровывающий капчу — самый распространенный на сегодняшний день способ отличить человека от робота. Такой алгоритм работает на основе компьютерного зрения и рекурсивной кортикальной нейросети, и может расшифровать капчу на многих популярных интернет-платформ, в том числе PayPal и Yahoo. Работа опубликована в журнале Science.

Капча (CAPTCHA, расшифровывается как Completely Automated Public Turing test to tell Computers and Humans Apart — полностью автоматизированный публичный тест Тьюринга для различения компьютера и человека) используется для того, чтобы выяснить, кто пытается воспользоваться каким-либо сервисом: человек или какая-нибудь программа для автоматизации действий в интернете. В основе капчи обычно лежит задание, например, различить «плавающие» буквы, выделить слово на фоне или отметить фотографии, которые содержат определенный объект. Для его решения человеку достаточно имеющихся у него знаний об окружающем мире и базовых навыков (например, чтения). Компьютеру, однако, для выполнения подобного теста требуется огромное количество данных. Он может распознать любые стандартные символы, но, например, «плывущие» буквы, которые встречаются ему впервые, — с трудом. С другой стороны, для человека подобная задача не представляет большой проблемы; искусственный интеллект, соответственно, должен быть максимально развит (по сравнению с настоящим, человеческим интеллектом) для ее решения.

Авторы новой работы, ученые из американской компании Vicarious, занимающейся исследованиями в области искусственного интеллекта, представили новую нейросеть для расшифровки капчи. Такая нейросеть получила название «рекурсивная кортикальная нейросеть» (англ. recursive cortical network, сокращенно RCN). Для ее создания использовались знания об обработке визуальной информации человеком, а именно — об эффективном разделении объекта и фона, даже в том случае, когда они имеют очень похожую структуру. Нейросеть, таким образом, выделяет на общем фоне контур объекта (например, буквы), и может делать это даже в том случае, если часть объекта скрыта за другим.

Нейросеть была обучена на достаточно небольшом количестве изображений — около 26 тысяч. Для сравнения, алгоритму распознавания капч на основе сверточной нейросети требуется несколько миллионов изображений. 

Для проверки работы нейросети использовались данные из открытого генератора капч Google — reCAPTCHA, которые, по словам разработчиков, имеют множество достоинств, основное из которых — сравнительная легкость распознавания для людей и сложность для компьютеров. Кроме того, для проверки также были использованы капчи Yahoo, PayPal и Botdetect.

Капча считается решенной, если компьютеру удалось распознать ее в одном проценте случаев — такой показатель, однако, не обозначает большую эффективность. Новая нейросеть смогла расшифровать примеры из reCAPTCHA с точностью до 66,6 процентов. Для сравнения, человек может распознать те же самые комбинации с точностью в 87 процентов.

Алгоритм также показал лучшую (по сравнению с другими алгоритмами, работа которых основана на сверточных нейросетях) эффективность в распознавании отдельных символов: до 94,3 процентов. Для сравнения, эффективность работы сверточной нейросети существенно падает с увеличением визуальных различий между обучающей и тренировочной выборками.

О том, что новая нейросеть способна побить капчу с невероятной для компьютера эффективностью, представители компании сообщали еще в 2013, чем вызвали немало скептицизма — в особенности, от разработчиков reCAPTCHA. Эффективная работа их алгоритма, однако, поднимает вопрос об улучшении кибербезопасности и разработки новых средств для защиты данных пользователей от искусственного интеллекта. 

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

Елизавета Ивтушок

Нашли опечатку? Выделите фрагмент и нажмите Ctrl+Enter.

Как декодировать и обойти CAPTCHA .. CAPTCHA — это тип… | Бур Абдельхади | secjuice™

Just Use Google reCAPTCHA

Опубликовано в

·

Чтение: 4 мин.

·

1 декабря 2017 г.

является ли пользователь человек. В этой статье я попытаюсь обойти CAPTCHA и создать бота, который сделает все остальное, поэтому, если вы считаете, что не защищены, попробуйте использовать сложный алгоритм или reCAPTCHA.

  • Предварительно обработайте изображение с помощью (ImageMagick): мы будем использовать обработку командной строки (преобразование).
  • Использование Tesseract — механизма распознавания текста — для извлечения текста из изображения.
  • Заключение.

Convert — это программа для редактирования изображений, таких как преобразование между форматами изображений или изменение размера изображения, размытие, обрезка, удаление пятен, дизеринг, рисование, отражение, объединение, повторная выборка и многое другое. Синтаксис прост:

  $  convert  [...]  

Как видите, мы даем программе входное изображение, применяем некоторые команды и записываем результат в файл.

Пример:

У нас есть это изображение: btc.jpg

Мы можем преобразовать его в png с помощью одной командной строки:

  $  convert btc.jpg btc.png 
900 04 Например, мы можем изменить размер .0025 Обзор опций .

С помощью Tesseract вы можете предоставить изображение, содержащее текст, и он выведет текст.

Использование командной строки:

 tesseract imagename outputbase [-l lang] [--oem ocrenginemode] [--psm pagesegmode] [configfiles. ..] 

Пример:

У нас есть эта картинка

9 0004 Давайте использовать Tesseract для извлечения текста из этого изображения:

  $  tesseract medium.png - 

Результат:

дополнительные параметры:

  $  tesseract -psm 7 medium.png - (рассматривать изображение как одну текстовую строку)  $  tesseract -psm 8 medium.png - (обрабатывать изображение как одно слово ) 

Отлично 😍 , теперь у вас есть идея что мы будем делать для обхода CAPTCHA . но прежде чем я начну, я хотел бы сказать, что это всего лишь пример, и он не будет работать для всех CAPTCHA.

Давайте возьмем веб-сайт и попробуем расшифровать CAPTCHA 👊

Изменить описание

minerjet.com

Веб-сайт облачного майнинга, я думаю, что большинство из них просто используют схему Понци, ха-ха. в любом случае, давайте сосредоточимся на нашей теме.

CAPTCHA image :

Итак, идея проста, мы конвертируем ее в черно-белую (бинарную):

  $  convert captcha. png -colorspace grey -threshold 50% captcha1.pn 

Теперь, у нас есть черный текст с белым фоном, мы можем использовать tesseract для извлечения текста из картинки

  $  tesseract captcha1.png - 

Результат: L4Ks

Я хотел создать скрипт Python для автоматического выполнения этих действий:

 from bs4 import BeautifulSoup 
import request
import urllib
данные = запросы.получить("http: //minerjet.com/forget.php").text
суп = BeautifulSoup(data, "lxml")
для ссылки в супе.find_all('img' , {'alt': 'Код CAPTCHA'}):
капча = link.get('src')
best = ("https://minerjet.com"+captcha)
f = open('captcha.jpg','wb')
f.write(urllib.urlopen(best).read())
f.close()
..
..
...
...

Я не дочитал 😊 ..

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

МИР .

Проверьте мои концерты на Fiverr:

https://www. fiverr.com/bohrhadi

Подпишитесь на меня в LinkedIn:

https://www.linkedin. ком / в / бор /

Расшифровка CAPTCHA

Матье Лароз Проекты

Август 2017 г.

Существует два типа CAPTCHA. Те, которые решены ботами и те, которые в конечном итоге будут решены ботами.

Трудно сказать, защищена CAPTCHA или нет. Но, если текстовую CAPTCHA на вашем сайте можно расшифровать двумя строками код (как показано в этой статье), пришло время обновить его.

Подъезд

Двухлинейный подход:

  1. Предварительно обработайте изображение с помощью преобразовать (ImageMagick).

  2. Использовать Тессеракт — OCR engine — для извлечения текста из изображения.

Краткое руководство по

convert

convert — программа для редактирования изображений. Он принимает входное изображение, применяет к нему преобразования (список команд) и записывает результат в файл.

Его синтаксис:

 $ convert 
[...]

Пример:

 $ convert rose.jpg -negate rose-1.jpg
 
  1. Входное изображение rose.jpg :

  2. -negate инвертирует свои пиксели

  3. Выходное изображение rose-1.jpg :

Мы также можем применить несколько преобразований.

Пример:

 $ convert rose.jpg -negate -resize 150% rose-2.jpg
 

Отменяет пиксели, затем размер изображения изменяется до 150% от его оригинальный размер.

rose-2.jpg :

Команды ( -negate , -resize 150% ) применяются в следующем порядке: преобразовать . В этом случае порядок не имеет значения, так как будет выводиться то же самое изображение, если мы поменяем местами две команды. Но имейте это в виду когда вы делаете сложные преобразования.

Краткое руководство по

tesseract

tesseract прост в использовании.

Вы предоставляете изображение, и оно выводит текст на изображении.

Его синтаксис:

 $ tesseract [...]  
 

Пример:

 $ tesseract hello-world.png -
привет слово
 

Выводит текст из изображения hello-world.png в stdout .

Одна полезная опция tesseract -psm . Он сообщает tesseract , что вид изображения ожидать. В случае CAPTCHA это обычно один текстовая строка или отдельное слово. Таким образом, вы можете установить -psm 7 (обработать образ как одна текстовая строка) или -psm 8 (рассматривать изображение как одно слово).

Пример:

 $ tesseract -psm 7 hello-world.png -
привет слово
 

Хватит теории, давайте теперь расшифруем CAPTCHA.

CAPTCHA 1

Недостаток этой CAPTCHA в том, что текст черный, а шум (линии и точки) не черный. Так что нам нужно только сохранить черный пикселей и измените все остальные пиксели на белые.

Сначала преобразуем изображение в серый цвет:

 $ convert 300026.png -colorspace gray 300026-1.png
 

Затем конвертируем в черно-белый (двоичный):

 $ convert 300026.png -colorspace grey -threshold 50% 300026-2.png
 

-порог 50% означает любые пиксели, цвет которых равен или превышает 50% белые (средне-серые) меняются на белые. Остальные пиксели изменены в черный. Другими словами, светло-серые пиксели меняются на белые и темно-серые пиксели меняются на черные.

Поскольку пиксели шума светло-серые, они становятся белыми. Так они «исчезают» из изображения.

По умолчанию -threshold <значение>

будет отображать изображение в градациях серого перед пороговое значение. Таким образом, приведенную выше команду можно переписать как convert 300026.png -threshold 50% 300026-2.png .

Наконец, расшифровываем:

 $ tesseract 300026-1.png -
300026
 

CAPTCHA 2

Источник: https://www. imagemagick.org/discourse-server/viewtopic.php?f=22&p=147516

Стратегия этой CAPTCHA заключается в удалении границ. мы удалим их с заливка вариант.

Преобразовываем изображение в черно-белое:

$ convert augu.jpg -threshold 50% augu-1.jpg
 

Затем убираем границы:

 $ convert augu.jpg -порог 50% -заливка черным -draw "цвет 0,0 заливка" augu-2.jpg
 

Но этого недостаточно для tesseract :

 $ tesseract augu-2.jpg -
Аусу
 

Мы поможем tesseract , указав, что возможные символы только буквы верхнего регистра:

 $ tesseract -c tessedit_char_whitelist=ABCDEFGHIJKLMOPQRSTUVWXYZ augu-2.jpg -
АВГУ
 

CAPTCHA 3

Размываем изображение, чтобы уменьшить шум:

 $ convert wdgvze.png -gaussian-blur 0 wdgvze-1.png
 

Затем конвертируем в черно-белое:

 $ convert wdgvze.png -gaussian-blur 0 -threshold 25% wdgvze-2.png
 

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *