Итак, лучший способ понять, как оценить надежность капчи — разо¬брать пример взлома. Выбор пал на капчу сайта xakep.ru, которая используется при регистрации новых пользователей и добавлении комментариев. Код состоит из четырех цифр, что дает нам 10000 вариантов — не так уж и много, но от прямого перебора защитит.
Для вывода цифр используется один шрифт, надпись слегка поворачивается в пространстве, но поворот настолько незначитель¬ный, что мы не будем принимать его во внимание. «Пиксельный» шум по всему изображению снимается простейшим фильтром по яркости: все пиксели, яркость которых выше некоторого значения, закрашиваются белым цветом, остальные — черным.
Такая опе¬рация очищает практически весь шум, за исключением отдельных точек, не мешающих дальнейшей обработке. Остается лишь одна проблема — случайно разбросанные линии, которые значительно затрудняют, во-первых, определение позиции надписи, во-вторых, распознавание отдельных-цифр'. Поставим задачу довести точность распознавания хотя бы до 5% при приемлемых затратах процессор¬ного времени. Такая постановка задачи позволит нам выбрать уяз¬вимость, которая должна встречаться хотя бы в каждой 20-й капче и с большой вероятностью гарантировать нам распознавание.
И такая уязвимость есть — на некоторых изображениях линии практически не пересекают цифры и такие изображения встречаются достаточно часто. От этой особенности и будем отталкиваться. Для работы нам в первую очередь потребуется набор распознанных образцов. Скажем, 100 штук для начала будет достаточно.
Для этого придется немного поработать «китайцем», но для упрощения задачи можно написать небольшой скрипт, загружающий изображения с капчами с сервера и формирующий форму, которую нам придется заполнить вручную. Так как мы решили опираться на наименее зашумленные изображения, то в качестве образцов стоит использо¬вать именно их. Итак, через несколько минут скучной работы у нас есть директория, в которой аккуратно сложены файлы с капчами, имена которых соответствуют кодам на изображении (например, 2716.jpgj.
Для подобных экспериментов лучше всего подходят скрип-товые языки, такие как РНР или Python, также может быть полезен Matlab, в котором есть удобные библиотеки для анализа и обработки изображений. Мы будем использовать РНР, в котором все функции для работы с изображениями имеют префикс image, для низкоуров¬невой работы с пикселями достаточно imagecolorat. Вот, например, фрагмент кода, который формирует маску изображения с темными участками:
Маска, во-первых, выполняет роль упомянутого выше фильтра по яркости, а, во-вторых, увеличивает скорость работы с изображением — нет необходимости каждый раз выполнять преобразования при сравнении цветов пикселей.
1|2|3|4|5|6|7|8
Популярные сообщения
-
Книгу Джоела Московица шестнадцати процентное решение, можно приобрести здесь. Книга про бизнес, на налоговых сертификатах. Подпис...
-
Сегодня речь в этой заметке пойдет о антивирусной обороне. Конечно, Существует большое количество антивирусных программ. Впрочем, Сказат...
-
Исправлены серьзные уязвимости безопасности, мелкие ошибки (но не все - согласно словам авторов, часть багов, обозначенных в bug tracke...
-
Очень интересный вопрос. И будет очень интересный ответ. Так как на этот вопрос никто не смог мне ответить, я решил сам испробовать все в...