1. В силу того, что сама защита — задача по распознаванию образов, расположена на сайте, она оформлена в соответствии с правилами оформления на языке разметки html. Поэтому первым действием необходимо считать содержимое сайта, выделить часть кода, ответственную за защиту, и проанализировать его, на предмет решения поставленной задачи, т. е. речь идет о применении классического парсинга[42] и создании для этого парсера[43].
Любой парсер состоит из трех частей, которые отвечают за три отдельных процесса парсинга:
• получение контента в исходном виде. Под получением контента чаще всего подразумевается скачивание кода веб-страницы, из которой необходимо извлечь данные или контент. Одним из самых развитых решений для получения кода требуемой страницы является библиотека cURL для языка PHP;
• извлечение и преобразование данных. В этой фазе происходит извлечение требуемых данных из полученного на первом этапе кода страницы. Чаще всего для извлечения используют регулярные выражения. Также на этом этапе происходит преобразование извлеченных данных к нужному формату, если это требуется. В случае преодоления капча-фильтра, после того как данные получены, осуществляется решение задачи распознавания образа;
• генерация результата. Завершающий этап парсинга. На нем происходит вывод или запись полученных на втором этапе данных в требуемый формат и передача результата.
2. В случае удачного решения, т. е. выявления скрытого изображения и нахождения ответа, необходимо выделить часть текста, ответственного за передачу результата на сервер, и полученный результат передать через форму непосредственно на сервер, где расположена база данных с ответами. В случае правильного ответа сервер сменит страницу сайта и пропустит программу-посетителя дальше.
Распознавание каждого образа — это создание специального алгоритма распознавания, который базируется на выявленных слабостях конкретной капчи. Ниже приведем пример построения подобного рода алгоритма.
Например, (www.captcha.ru/breakings/phpbb/):
Довольно слабая CAPTHA: фиксированный шрифт, символы легко отделяются от фона из-за хорошего контраста. Для гарантированного получения только тех пикселей, которые принадлежат надписи, достаточно выбирать пиксели темнее некоторого порога.
увеличиваем контраст и определяем границы массивов черных точек — это и есть знакоместа.
Также слабой стороной является то, что высота расположения символа задана в шрифте, т. е. одинаковые символы будут на одной высоте (правда, при написании алгоритма распознавания это не учитывалось).
Видно, что одинаковые символы всегда на одной высоте.
Распознавание сделать довольно легко путем прямого попиксельного сравнения каждого из символов со шрифтом.
Понятно, что единого универсального алгоритма здесь нет, каждый раз при появлении принципиально нового капча-фильтра первоначально задачу придется решать человеку в виде создания алгоритма распознавания. Однако, несмотря на невозможность создания при сегодняшних технологиях универсального алгоритма, возможно создание универсальных технологий, в которых на определенном этапе используются человеческие возможности.
Делается подобное следующим образом.
Исходные данные:
• сайт № 1, защищенный капча-фильтром, на который надо проникнуть виртуальному специалисту-[ро]боту;
• достаточно раскрученный сайт № 2, который принадлежит владельцу данного виртуального специалиста-[ро]бота.
Решение задачи:
1. Виртуальный специалист-[ро]бот обращается к сайту № 1 и парсит главную страницу, на которой находится капча-фильтр.
2. Виртуальный специалист-[ро]бот выделяет из страницы капча-фильтр и размещает его на подконтрольном сайте № 2.
3. Посетители сайта № 2 благополучно проходят капча-фильтр.
4. Виртуальный специалист-[ро]бот получает результат и передает этот результат главной странице сайта № 1.
Интересный пример сражения роботов с роботами приведен на сайте htmclass="underline" //www.omsk777.ru. Видно, что автора публикации война с роботами захлестнула не на шутку, и он описывает достаточно подробно, на уровне языка программирования, все известные ему способы идентификации роботов роботами.
Остановимся на одном достаточно элегантном примере распознавания робота.
Вот таким тегом языка html задается ссылка на страничках сайтов, по которой посетители лихо щелкают «мышкой»:
43
Парсер — программа, занимающаяся сбором содержимого страниц сайта, анализом, выделением данных и преобразованием данных к требуемому виду.