Интеллектуальное распознавание капчей Сегодня мне в голову пришла замечательная и в тоже время простая идея, как можно сделать систему которая сможет самообучатся и распознавать капчи со стопроцентным результатом. Но для начала картинка в тему: Так что имейте ввиду, я не врал когда говорил что любую капчу можно обойти Итак, вернемся к делу. Предлагаемый мной метод к сожалению подходит не для любой реализации капчи, так как не все их реализации уязвимы к моей атаке, но на уязвимых капчах мой метод гарантирует практически 100%-ое распознавание, плюс дает возможность самообучать систему распознавания. Какие реализации уязвимы? Расмотрим абстрактный код генерации среднестатистической капчи: Code: if(empty($_SESSION['captcha_key'])){ $captcha_key=GenerateNewKey(); $_SESSION['captcha_key']=$captcha_key; }else{ $captcha_key=$_SESSION['captcha_key']; } $captcha=new CaptchaObject(); $captcha->SetKey($captcha_key); $captcha->Output(); Если объяснить словами, то текст который впоследствии пишется на картинке, заносится в сессию. При повторном запросе скрипта будет использован тот же самый текст из сессии, хотя при этом картинка генерируется немного по другому. То есть если подытожить, то уязвимы реализации, которые позволяют получить несколько вариантов капчи с одним и тем же текстом на ней. Как провести атаку? Как вы догадались для этого нам необходимо скачать несколько вариантов одной капчи. Обычно для этого достаточно обратится к скрипту генерации капчей с одним и тем же индетификатором сессии (зависит от ее реализации). Затем каждую из полученных картинок нам необходимо распознать (подробнее см Оперируем капчу на примере или Анализ алгоритмов генерации CAPTCHA). Так как все таки символы разных размеров, имеют наклоны, плюс не всегда получается успешно их разрезать, то естественно среди распознанных картинок будут ошибки. Поэтому мы получим приблизительно такие значения: Как видно практически ни одного правильного ответа. Подсчитываем количество каждой цифры и строим вот такую вот таблицу: А вот таблица наглядно демонстрирует то что правильные цифры будут доминировать среди остальных, и из этих цифр составляем итоговый ответ - 8118 А как же обучать систему? Выше мы вроде разобрались как научится распознавать капчу с большой точностью, но точность можно повысить с помощью обучения системы новым маскам символов. Для этого берем маски тех символов которые неверно распознались и добавляем их в общий пул масок. Ну к примеру возьмем нераспознанные маски первых символов (эти маски были распознанны как цифры пять и шесть вместо восьми): Заметно что некоторые маски похожи между собой, это прийдется анализировать и похожие удалить, так как чем больше масок в пуле тем дольше будет идти распознание. В итоге останется всего две новых маски: Такую же операцию проводим и для остальных символов и также добавляем их в пул. И рано или поздно мы будем иметь маски всех вариантов каждой цифры, что повысит общий верный процент распознания. В идеале, конечно, система должна иметь обратную связь, то есть добавлять маски в пул только после того как мы убедились что капча была распознанна верно, т.е. после отправки формы на целевой сервер. Так как если вдруг в пул масок попадет маска не того символа, то вся система может дать сбой. Итог Этот алгоритм помимо своих плюсов , имеет существенные минусы: Загрузка канала (необходимо скачивать несколько капчей вместо одной) Загрузка процессора (необходимо распознавать несколько капчей вместо одной) Хотя эти недостатки на мой взгляд легко компенсируются плюсами: Почти стопроцентная точность распознавания Возможность самообучения системы В общем использовать ли этот алгоритм или нет - решать вам Дата: 13.04.2012 Автор: Intellect http://intsystem.org/615/intellect-recognition-captcha/ http://intsystem.org/
Видоизменение капчи не много где используется. Обычно новая генерируется. Не так давно идея ходила в неких кругах - создать единую базу достоверно расшифрованных капч, после использовать как образцы для софта.