Распознавание captcha ipb

Скрипты Прокомментировать

Сегодня перед сном просматривал чужие блоги, наткнулся на интересное сообщение о распознавании captcha phpBB. Капча эта примитивная, я сам в своё время делал для неё распознавалку. Подход был примерно такой же, как у автора той заметки, но некоторые различия в реализации всё-таки были.
В этой заметке я поделюсь своим опытом по распознаванию другой простой каптчи форума ipb version 2.0-2.1.
Почему выбрана эта картинка? Не знаю, просто так. Я в прошлом году больше десятка разных картинок пробил, в конце на разгадывание простых уходило не больше часа. Вся реализация была на php, как Вы можете догадаться из заголовка блога.
Вот как выглядит эта картинка:
Пример ipb captcha

Распознавание картинки можно разбить на несколько этапов:

  1. Получение картинки. Этот этап выходит за рамки данной статьи. Задача тривиальна и неинтересна. При разработке распознавалки этой каптчи я даже не смотрел в исходники кода ipb, просто спросил у гугла «powered by Invision Power Board v2.0″, зашел на первый попавшийся форум и накачал картинок из формы регистрации. В дальнейшем, для других более сложных картинок я сделал скриптик, который много раз заходит на нужную страницу, скачивает и сохраняет интересующую картинку – но это уже «совсем другая история»(с).
  2. Анализ картинки. Этот этап конечно лучше всего производить, если видишь исходники генератора картинок. Для скриптов с открытым кодом у нас всегда есть возможность по исходникам точно определить все используемые цвета, шрифты, шумы и прочее. В сложных каптчах я часто пользовался этой возможностью, но в этой было всё так очевидно и примитивно, что даже лень было искать и качать исходники ipb. Анализ нескольких десятков картинок показал следующее:
    • на всех картинках изображено 6 символов;
    • символы – цифры от 0 до 9;
    • цвет символов – черный;
    • фон один и тот же, но разноцветные яркие пятна и мелкие шумы меняются;
    • размер шрифта и положение символов не меняется.

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

  3. Создание «маски». Исходя из анализа картинки я сделал так называемую «маску» – картинку, которая нужна моему скрипту для выбора знакомест.
    Маску делал в обычном графическом редакторе, позиции пикселов указывал сверяясь с оригинальными картинками. На выходе получил картинку с таким же размером как и у исходной (210*65), состоящую из 6 одинаковых прямоугольников:
    Маска для captcha
    Для удобства дальнейшей работы я перевёл с помощью подскрипта эту картинку в текстовый файл, состоящий из 210 строчек и 65 столбиков единиц и нулей. Единицы соответствовали черным пикселам, нули – белым.
  4. Выделение из исходной картинки всех нужных символов. Эта процедура проходила по такому алгоритму: php открывал jpg-файл каптчи и txt-файл маски, затем «пробегал» каждый пиксель картинки. Если цвет пиксела был довольно черным и в текстовом файле его координате соответствовала единица, то в другой массив запоминалась единица, иначе – нуль. Для контроля хода процесса я превращал полученный массив в картинку. В результате я получил вот такую картинку:
    Каптча после применения маски и фильтра цвета
    Как видим, картинка существенно упростилась.
  5. Разделение полученной картинки на символы. В данном случае всё было просто – на этой картинке символы находятся на большом расстоянии друг от друга и разделены широкими вертикальными белыми промежутками. Этим я и воспользовался. На выходе я получил 6 маленьких прямоугольников с черными и белыми писелами, которые по аналогии с маской перегнал в текстовые файлы из единичек и ноликов.
  6. Создание эталонных цифр. Для создания эталонных цифр я использовал полученные на прошлой стадии текстовые файлы с ноликами и единичками. Прогнав через скрипт несколько картинок я получил все 10 возможных цифр, затем в блокноте убрал «шумы» и получил 10 красивых файликов из нулей и единиц. Это была наверное самая трудоёмкая стадия всего процесса, т.к. муторно было удалять все эти шумы, она заняла у меня около часа (весь скрипт создавался, тестировался и отлаживался примерно часа три). В идеале для генерации библиотеки эталонов лучше всего использовать те же шрифты, что используются на сервере для генерации каптчи. Но я тогда поленился глянуть в её исходники и все файлы правил ручками. В более сложных случаях я использовал в этих целях уже специальные генераторы эталонов.
  7. Собственно распознавание. Теперь у меня была маска и библиотека эталонов, а скрипт умел разделять входящую картинку на символы и превращать их в прямоугольную матрицу из единичек и нулей. Следующим шагом было сравнение полученной матрицы с эталонными символами. Если в одинаковых ячейках этих матриц были одинаковые цифры – то «переменная совпадений» увеличивалась на единичку. Разделив итоговую «переменную совпадений» на общее количество ячеек данной матрицы я получал коэффициент похожести данного символа и эталона. Потом скрипт сравнивал символ со следующими эталонами и для каждого находил коэффициент похожести. Для какого эталона коэффициент похожести был максимален – тот и соответствовал данному символу. Найдя соответствия для всех символов скрипт выдавал итоговый вариант.

Теперь пару слов про быстродействие скрипта. Как видим, самой затратной операцией является сравнение каждого символа с каждым из эталоном. В данном примере у нас 6 символов, 10 эталонов, примерно 420 пикселей в каждом эталоне, что в произведении даёт около 30 тысяч операций сравнения. Для выделения из каптчи искомых символов и разделения их между собою нужно гораздо меньше операций, этот процесс занимает сотые доли секунды. А в целом, мой скрипт тратит на распознание картинки 0,145 секунды. Точность распознавания – очень хорошая, из сотни картинок-примеров ни одной ошибки.
Вот на Каптча.Ру у меня ломалка на первой же картинке сбой дала, можете проверить:
Картинка, на которой captcha.ru делает ошибку
Сам скрипт я не буду выкладывать. Зачем лишний раз палить уже тысячу раз спаленную тему. Уверен, что где-то в паблике есть красивая реализация того, что я описывал выше, правда я сам эту реализацию не встречал. Но всё должно быть очень просто – у меня это заняло примерно 70 строк кода + 10 созданных эталонов + 1 маска. Интересующимся могу сказать, что была использована библиотека GD и её функции imagecreatefromjpeg, imagecolorallocate, imagesx, imagesy, imagecolorat.
Для более сложных картинок общая схема подбора картинки примерно та же, но на разных стадиях есть изменения и вариации. Первые 2 стадии – те же самые, картинку ведь в любом случае надо где-то получать и анализировать перед написанием скрипта. Маски для сложных картинок обычно не нужны, т.к. там обычно символы могут находиться где угодно в пределах каптчи. Иногда маска нужна для того, чтобы убирать у картинки статический фон. Частенько для улучшения качества картинки или вытирания каких-то цветов приходится применять различные эффекты, вроде блюра и других.
Очень часто бывают проблемы на стадии разделения картинки на отдельные символы, т.к. они касаются друг друга и могут быть похожего цвета. Также часто на картинках есть мешающие линии или кривые, которые трудно отличить от символов.
Стадия создания эталонов обычно полегче, чем предыдущая, но и на ней могут возникнуть проблемы в тех случаях, когда используется много разных шрифтов и их размеров. Например, если эталонных шрифтов 10, размеров 15, а в качестве символов используются как буквы, так и цифры, то мы будем иметь уже более 5 000 эталонов. Сильно увеличивают количество вариантов и повороты символов на картинке. А искажения, изгибы символов делают задачу сложнее на порядок.
Я уверен, что любую каптчу можно распознать автоматически, так же, как для любого замка можно найти ключ. Вопрос только во времени и количестве ресурсов, необходимых на решение этой задачи.

  • Простая защита от спама на сайте
  • Комментарии (27) к “Распознавание captcha ipb”

    1. alex:

      Занимательная статья , было бы интересно увидеть скрипт …
      будет минутка – стукните мне пожалуйста – Осику 320307

    2. Автораспознавание капчи:

      Предлагаю модули распознавания капчи. В наличии много движков, в частности google, yahoo, mail.ru. Возможно написание распознавалки под ваш проект. Также пишем софт на си++ для win, nix

      icq: 5-786-656
      email: captcher@gmail.com

    3. e64f:

      Добрый день коллега!
      Я на пару с товарищем занимаюсь тоже каптчами
      Вот тут наши работы
      http://www.e64f.ru/?p=46

      Каптча у вас в статье конечно примитивная, а палить тему распознавания каптч некрасиво.

    4. zweroboy:

      Добрый день!
      Так тема уже сто раз палёная, так что не жалко :)
      У Вас, кстати, я тоже ни одной сложной не видел.
      Вот гугловская, майспейсовская, реКаптча – это круто.
      Или хотя бы яндексовская или captcha.ru.

    5. e64f:

      Прошу прощения, но указанная мной выше ссылка изменилась,
      картинки побежденных каптч http://www.e64f.ru/?p=45
      это все изза переезда блога.

      А вообще, там всего лишь те капчи, которые нам заказали.

      Уважаемый зверобой, приведите пожалуйста полные линки на указанные вами каптчи(мне нужна страничка, где генерится каптча, чтобы посмотреть варианты), и сразу вопрос их кто нибудь купит? и по какой цене?

    6. zweroboy:

      http://www.google.com/addurl/?continue=/addurl
      http://signups.myspace.com/index.cfm?fuseaction=signup
      http://recaptcha.net/learnmore.html
      http://captcha.ru/kcaptcha/
      http://webmaster.yandex.ru/

      По ценам и спросу я не знаю… Я этой темой год назад интересовался. Честно говоря – сам бы не взялся ни за одну из них.

    7. порядок:

      не на порядок а на 10 порядков,
      и ресурсов не хватит, слишком много уверенности,
      возьми листок бумаги и посчитай, математик епт

    8. zweroboy:

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

    9. Sergey:

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

    10. zlo:

      купил бы капчу- 4 картинки, впринцепе неплохо отображаемые, надо чтоб распозновала, и вводила в поле

    11. Sidhan:

      Куплю каптч, 4796(два)344(три)

    12. MireePelf:

      С новым годом. Читать чужие смс сообщения.

    13. Александр:

      Люди!! ПОМОГИТЕ!
      Очень нужна прога по чтению писем с почты от почтовика wmmail с автоматическим распознаванием каптчи. Чтоб прога умела читать с нескольких ящиков. Магу заплатить за полностью рабочую прогу. Пишите мне на почту persidski_87@mail.ru или в аську 589652817

    14. Алексей:

      Тоже готов заплатить за рабочую прогу. Пишите 4238413 или на почту smoket34@yandex.ru

    15. андрей:

      люди прорыв у меня друг програмист и он создал мне програму для автоматичиского распознавания капчей работает на 100% но бесплатно я не собираюсь распростронять по етому кому надо даная програма отправляйте на кошелек Z******* 0.5 долара и в поле примечание впишыте програма и свой имейл,

    16. zweroboy:

      андрей, реклама на блоге платная :)
      А кидалам вообще места нет.

    17. jervers:

      Предлагаю рассылки рекламы в сетях «в контакте» ,»однокласники» ,»мамба» ,»лов планет»
      5$ на каждые 2000 в онлайне
      от 10000 4$ на каждые 2000 в онлайне
      E-mail: terv734@mail.ru

    18. Dim:

      Ни чего так статья, есть от чего оттолкнуться. Кстати через нейросети ни кто не пробовал распознавать?

    19. Ден:

      http://www.xakep.ru/magazine/xa/135/044/1.asp – антикапча на основе нейросети

    20. Boism:

      bb.txt open error

    21. Ваня:

      надо скрипт на пхп для распознования, ася 29 шесть 250

    22. SOISPKEPKNITS:

      Не умеете торговать на Форекс, но давно хотели попробовать? Есть выход. Воспользуйтесь сервисом копирования сделок успешных трейдеров – http://tinyurl.com/zts8ru9

    23. fruigughese:

      Не умеете торговать на Форекс, но давно хотели попробовать? Есть выход. Воспользуйтесь сервисом АВТОМАТИЧЕСКОГО копирования сделок успешных трейдеров – http://tinyurl.com/zts8ru9

    24. discount furniture:

      I was wondering if you ever considered changing the page layout of your website?
      Its very well written; I love what youve got to say. But maybe you could a little more in the way of content so people could connect with it better.
      Youve got an awful lot of text for only having one or 2 pictures.
      Maybe you could space it out better?

    25. thymnlesthemi:

      Предоставляю услуги масажа:
      1) раслабляющий массаж;
      2) тантрический массаж;
      3) тайский массаж;
      4) секс массаж (а так же возможен секс)

      Методы массажа:
      Руками (мануальный)
      Аппаратами (аппаратный)
      Грудью, спиной, ягодицами

      Контакты:
      Svetlana Griskevic (Светлана Гришкевич)
      Lithuania, Klaipeda LT-94209, street Naujakiemio 1-72

      тел. +370 675 81968
      sv-balt@yandex.com

    26. автобус Одесса - Бердянск цена:

      This design is steller! You certainly know how to keep a reader amused.
      Between your wit and your videos, I was almost moved to start
      my own blog (well, almost…HaHa!) Great job.
      I really enjoyed what you had to say, and more than that, how you presented it.
      Too cool!

    27. https://affgambler.com:

      Hello to every one, since I am truly keen of reading this web
      site’s post to be updated regularly. It includes pleasant stuff.

    Прокомментировать

    Сообщения в RSS Комментарии в RSS Войти