Многие сайты сейчас используют рекапчу от гугла и не зря: простое и удобное решение в борьбе со спамом. Но вместе с тем многие умы бьются над расшифровкой алгоритмов работы гуглокапчи, дабы обойти эту защитную меру. Способы достаточно оригинальны и интересны, само забавно, что технологии Google в большинстве случаев помогают взломать Recaptcha. Как это происходит и почему, рассмотрим в нашем материале.
Для начала немного теории. Изначально понятие капчи подразумевало собой ввод символов с картинки: буквы, цифры или букво-циферная комбинация. Со временем появились программы для распознавания текста, и капча стала усложняться: стал появляться фон, буквы и цифры стали располагаться под наклоном, количество символов для ввода стало варьироваться, добавляли шум и помехи для исключения автоматического распознавания. Именно так и выглядела первая версия рекапчи, столь ненавистной многим пользователям.
В итоге всё сошлось к тому, что усложнения картинки для ввода не давало ощутимого эффекта, а только лишь затрудняло ввод обычным юзерам. Я думаю, многие помнят времена, когда откровенно матерились, когда не поймешь какой символ изображен и капчу удавалось вводить далеко не с первого раза. И тогда корпорация Google скакнула далеко вперед, предложив на всеобщее обозрение Recaptcha 2. Нельзя сказать, что идея была настолько инновационной - к тому моменту уже было реализовано множество интересных защит от спама: собрать пазл, ответить на вопрос - все они имели свои преимущества и недостатки.
Вторая версии рекапчи стала более умной и человекоориентированной: хватало обычного нажатия галочки, для того, чтобы пройти проверку. В более сложных ситуациях уклон шёл на выбор подходящих картинок. Google не останавливается на достигнутом и уже следующим поколением планируется ввод в эксплуатацию Invisible Recaptcha , более подробно о ней можно почитать в статье. Но при этом умы хакеров поглощены над задачей, как обойти эту систему: ведь тогда открываются просторы для большого количества сайтов.
Одним из больших недостатков всех рекапч - это ограниченный набор комбинаций. В первой рекапче это был определённый набор слов и фраз, во второй - ограниченное число картинок и тех же слов в варианте аудио капчи (рассмотрим чуть позже). Всё это при правильном подходе позволяет сузить круг в поиске решений.
Из основных методов взлома рекапчи я бы выделил только два: подбор комбинации картинок, на которые надо нажать, чтобы пройти тест, и расшифровка звуковой записи.
Одним из первых успешных методов по подбору номеров домов помог реализовать алгоритм распознавания изображений. Потом появились более сложные варианты распознавания, которые специализировались на Google Recaptcha. Но и гугл не оставался в стороне, картинки стали подвергаться всевозможным обработкам: размытию, растяжению, искажению.
Как оказалось, самым уязвимым методом, который давал самые хорошие результаты, оказалось распознавание капчи из аудиосигнала, который предлагается как альтернативный вариант прослушать, если не получается пройти по каким либо причинам тест. Получить звуковой файл достаточно просто, необходимо нажать на иконку с наушниками внизу рекапчи и будет предложено голосовое сообщение.
Первые попытки атак на гугл капчу сопровождались самописными программами по распознаванию речи, при этом коэффициент распознавания был достаточно высок (отчасти от ограниченного количества звуковых фраз). После публикации во всеобщий доступ программы Google выпустила патч, который изменил набор голосовых сообщений, а также добавил голоса и шумы в речь, тем самым сделав работоспособность обхода Recaptcha близкой к нулю.
Однако и здесь нашлось весьма забавное решение. На помощь специалистам безопасности для взлома Google Recaptcha 2 пришёл... сам гугл! Используя Google API Speech можно было достоверно и точно распознать звуковые уведомления капчи. Уязвимость применили на практике и написали сервис по перенаправлению аудиофайлов в распознавание, а потом подстановка результата в поле формы рекапчи.
И эта дыра была пофикшена и закрыта работниками гугл. Теперь хакерам придеться в очередной раз проявить сноровку и найти новый метод обхода рекапчи. А пока на данный момент это достаточно удобный и стойкий вариант защиты от спама контактных форм . Напрашивается вопрос, а почему несмотря на уловки злоумышленников, на сайтах не последовало волны спама? Ответ достаточно прост: Google разработали достаточно сложную и многоступенчатую защиту, которая может позволить ограничить число обходов. Таким образом массовая атака будет приостановлена на ранней стадии: к примеру тот же вариант с аудио-сообщением прокатывал не всегда, порой пользователям предлагалось ввести символы вместо прослушивания цифр.
А пока будем ждать новых новостей и новых эксплоитов.
Гугл рекапча (reCaptcha v2) перестала быть проблемой для наших пользователей. Мы внедрили интеграцию с популярным сервисов по обходу капчи Death By Captcha и теперь ваши скраперы могут легко обходить самые современные капчи.
Давайте посмотрим, как выглядит reCaptcha v2:
Если вы видите именно такую капчу на сайте. который вам нужно отпарсить, то эта статья вам обязательно поможет. Мы постараемя дать вам исчерпывающее руководство на реальном примере, так, чтобы вы смогли легко внедрить подобное решение для вашего сайта. Мы же будем парсить следующий сайт: http://www.receita.fazenda.gov.br/PessoaJuridica/CNPJ/cnpjreva/Cnpjreva_Solicitacao2.asp .
Для того, чтобы пользовать этим функционалом вам нужно иметь собственный аккаунт в службе Death by Captcha . Их услуги не бесплатны, стоимость решения 100 капч составляет примерно 2.89$ (цена актуальна на 28.02.2018).
Решение капчи происходит автоматически, вам нужно лишь загрузить страницу с капчей в ваш скрапер и вызвать специальную команду captcha_resolve с определенными параметрами:
prodiver
: провайдер решений для капчи, нужно установить значение deathbycaptcha.com
type
: тип капчи, нужно установить значение nocaptchav2
username
: имя пользователя вашего аккаунта в системе death by captcha
password
: пароль вашего аккаунта в системе death by captcha
ВНИМАНИЕ!!! Для того чтобы капча этого типа была успешно решена, люди, которые будут вручную решать вашу капчу должны будут это делать под тем же IP адресом, что использует ваш парсер. Поэтому, единственный вариант этого достичь — использовать ВАШ СОБСТВЕННЫЙ ПРОКСИ СЕРВЕР в конфигурации вашего диггера. Наши штатные прокси сервера не могут быть доступны с IP адресов, вне нашей основной сети, поэтому штатные прокси просто не будут работать в этом случае. В дальнейшем мы внедрим специальный пул прокси серверов для этой задачи, но пока вы должны будете использовать свой прокси.
Базовый код нашего парсера будет таким:
Config: debug: 2 agent: Firefox proxy: ВАШ ПРОКСИ НУЖНО ВСТАВИТЬ СЮДА do: # Мы будем повторять неудавшийся запрос, поэтому пропишем значение переменной, # которую будет использовать опция repeat - variable_set: field: repeat value: "yes" # Загружаем страницу с капчей - walk: to: http://www.receita.fazenda.gov.br/PessoaJuridica/CNPJ/cnpjreva/cnpjreva_solicitacao2.asp repeat: do: # Решаем капчу - captcha_resolve: provider: deathbycaptcha.com type: nocaptchav2 username: ВАШЕ ИМЯ ПОЛЬЗОВАТЕЛЯ В СЛУЖБЕ DBC password: ВАШ ПАРОЛЬ В СЛУЖБЕ DBC
Пока не запускайте ваш парсер, просто изучите код. Если капча решена успешно, токен будет сохранен в переменной captcha . Поэтому, первым делом после решения капчи мы должны проверить наличие токена в переменной. Если токен есть, мы отключим опцию repeat и передадим токен на сервер вместе с другими параметрами нашего запроса. Если токена нет, запрос будет повторен, поскольку опция repeat установлена в «yes».
Config: debug: 2 agent: Firefox proxy: ВАШ ПРОКСИ НУЖНО ВСТАВИТЬ СЮДА do: # Мы будем повторять неудавшийся запрос, поэтому пропишем значение переменной, # которую будет использовать опция repeat - variable_set: field: repeat value: "yes" # Загружаем страницу с капчей - walk: to: http://www.receita.fazenda.gov.br/PessoaJuridica/CNPJ/cnpjreva/cnpjreva_solicitacao2.asp repeat: do: # Решаем капчу - captcha_resolve: provider: deathbycaptcha.com type: nocaptchav2 username: ВАШЕ ИМЯ ПОЛЬЗОВАТЕЛЯ В СЛУЖБЕ DBC password: ВАШ ПАРОЛЬ В СЛУЖБЕ DBC # Переходим в блок body - find: path: body do: # Читаем значение переменной captcha в регистр - variable_get: captcha # Проверяем, не пустой ли у нас регистр - if: match: \w+ do: # Если не пустой, отключаем repeat - variable_set: field: repeat value: "no" # Передаем токен и другие параметры на сайт с которого мы собираем информацию. # В данном случае мы пытаемся получить данные о компании по его ИНН (CNPJ) - walk: to: post: http://www.receita.fazenda.gov.br/PessoaJuridica/CNPJ/cnpjreva/valida_recaptcha.asp data: origem: comprovante cnpj: 05754558000186 g-recaptcha-response: submit1: Consultar search_type: cnpj do: - find: path: "div#principal" do: - object_new: item - find: path: td:haschild(font:contains("NÚMERO DE INSCRIÇÃO")) b slice: 0 do: - parse - space_dedupe - trim - object_field_set: object: item field: registration_number - find: path: td:haschild(font:contains("DATA DE ABERTURA")) b slice: 0 do: - parse - space_dedupe - trim - object_field_set: object: item field: registration_date - find: path: td:haschild(font:contains("NOME EMPRESARIAL")) b slice: 0 do: - parse - space_dedupe - trim - object_field_set: object: item field: company_name - find: path: td:haschild(font:contains("CÓDIGO E DESCRIÇÃO DA ATIVIDADE ECONÔMICA PRINCIPAL")) b slice: 0 do: - parse - space_dedupe - trim - object_field_set: object: item field: primary_code - find: path: td:haschild(font:contains("CÓDIGO E DESCRIÇÃO DAS ATIVIDADES ECONÔMICAS SECUNDÁRIAS")) b do: - parse - space_dedupe - trim - object_field_push: object: item field: secondary_codes - find: path: td:haschild(font:contains("CÓDIGO E DESCRIÇÃO DA NATUREZA JURÍDICA")) b slice: 0 do: - parse - space_dedupe - trim - object_field_set: object: item field: legal_code - find: path: td:haschild(font:contains("LOGRADOURO")) b slice: 0 do: - parse - space_dedupe - trim - object_field_set: object: item field: street - find: path: td:haschild(font:contains("BAIRRO/DISTRITO")) b slice: 0 do: - parse - space_dedupe - trim - object_field_set: object: item field: district - find: path: td:haschild(font:contains("MUNICÍPIO")) b slice: 0 do: - parse - space_dedupe - trim - object_field_set: object: item field: municipal - find: path: td:haschild(font:contains("TELEFONE")) b slice: 0 do: - parse - space_dedupe - trim - object_field_set: object: item field: phone - find: path: td:haschild(font:contains("E-MAIL")) b slice: 0 do: - parse - space_dedupe - trim - object_field_set: object: item field: email - object_save: name: item
Инструкция по правильному распознанию капч на сервисе сайт
ReCaptcha V2 New
Очень популярна в последнее время, представляет из себя 9 мини-картинок, из которых нужно выбрать 2-4 заданных картинки. Какие картинки нужно выбрать указывается либо образцом картинки, либо текстом. В ответ на такую капчу нужно ввести номера картинок, которые нужно выбрать. Номера вводятся без пробелов, без запятых. Если на самих картинках нет номеров, то они считаются слева-направо, сверху вниз. Вот так:
1 2 3
4 5 6
7 8 9
капча | правильный ответ |
описание |
---|---|---|
13 | справа изобраён образец, капуста. На картинках под номерами 1 и 3 мы видим капусту. В ответ на капчу пишем 13 | |
58 | Справа тарелка со спагетти. Этой картинке соответствуют картинки под номерами 5 и 8. На картинке под номер 3 то же макароны, но равиоли, а не спагетти. | |
239 | Образца нет, только текст, на котором написано, какие картинки нужно выбрать. Сами картинки не пронумерованы, так что пользуемся инструкцией выше, что бы понять какой картинке соответсвует правильный номер | |
45 | Можно сначала подумать, что правильный ответ 47. Но на 7 картинке не указатель, а просто вывеска. И остаётся только 4я картинка. Но должно быть минимум 2 подходящих изображения. Присматриваемся внимательнее и видим на 5м изоборажении указатель, сфотографированный с обратной стороны. правильный ответ 45 | |
159 | ||
456 | Инструкция только на английском языке, но слева дана картинка, поясняющая, что выбирать нужно дорожные знаки. | |
18 | На приведённом образце - яйца. Они же на картинках 1 и 8, хоть они уже и очищены и разрезаны. Правильный ответ - 18 | |
25 | На приведённом образце - пирог. На картинках 2 и 5 видим пироги и отвечаем 25. | |
12 | Вебмастер, который прислал капчу, по своему принципу пронумеровал изображения. В данном примере пользуемся его нумерацией и указываем что нужно выбрать 1 и 2 изображение | |
356 | Этот вебмастер в правильном порядке нумерует картинки, но начал нумерацию не с единицы а с нуля. |
ReCaptcha v2 с дорожными знаками и указателями улиц
Особое внимание уделим капчам, на которых изображены дорожные знаки или указатели улиц. Указатель улицы это не дорожный знак.
капча | правильный ответ |
описание |
---|---|---|
1239 | Street name = указатели улиц
Улицы всегда написаны белым на зелёном фоне в одну строчку. На изображении 7 дорожный указатель. |
|
1348 | Тут всё просто | |
78 |
Street signs = дорожные знаки На этой капче всё просто |
|
278 | На изображении #7 укзатель находится не на столбе, как обычные указатели, а на отбойнике. Тем не менее, это дорожный указатель. | |
36 | Знак автобусной остановки это тоже дорожный указатель | |
1248 | Будьте внимательны, на этой капче нас просят указать указатели улиц. | |
2479 | На изображении №1 указатель, а не имя улицы. | |
1236 | На изображении №5 указатель, а не имя улицы. На изображении №2 не видно название улицы, но можно угадать, что оно там есть. |
SolveMedia
В данной капче встречаются стандартные небольшие фразы на английском языке, что помогает быстрее их вводить и учить английский.
капча | правильный ответ |
описание |
---|---|---|
video tape | простая капча, вводится без проблем | |
what if? | Обратите внимание - знаки препинания тоже нужно вводить | |
When, where? | И запятую и знак вопроса нужно указывать в ответе | |
i like people | В слове LIKE первую букву сложно разобрать, но если смотреть на всю фразу целиком - легко понять что там за буква. I like people - я люблю людей |
|
rooftop | Можно подумать что первая буква в этой капче - P и к ней просто приклеились две палочки. Но слова POOFTOP не существует, а ROOFTOP это что-то, что установлено на крыше.. Ведь мало кто знает все эти слова, ошибиться очень легко. | |
first post! | Первая буква скрыта, но смотря на слово целиком, можно догадаться что там написано FIRST | |
Но, иногда попадаются такие, которые совсем не разобрать. В таком случае нужно нажать "не могу разобрать" |
Другие виды капч
капча | правильный ответ |
описание |
---|---|---|
Сегодня многие сайты используют капчу для защиты от спама. Не стоит забывать также про капчи, которые высвечиваются при рассылке сообщений или комментировании постов своих друзей в соцсетях.
Проблема в том, что использование такой защиты является популярным: такой вот любопытный пример плагиата в онлайн-пространстве. Но есть и хорошая новость: существуют способы обойти капчу.
Типичная капча - это ввод искаженных символов. Также существуют и другие виды капч.
К ним относятся:
Чем сложнее капча, тем лучше защищен сайт или другой ресурс. Обойти капчу можно: как именно, мы сейчас рассмотрим.
Избежать появления капчи вряд ли получится, но сделать так, чтобы не пришлось ее вводить - вполне реально.
Для этого необходимо просто скачать программу, которая расшифрует коды за вас, зарегистрироваться там и начать их использовать.
Существуют разные виды программ - для ручного и автоматического распознавания капчи. Самые популярные - Rucaptcha и Antigate. Они не бесплатные, но цена распознавания капчи совсем небольшая - от 18 рублей за 1000 вводов на Rucaptcha и от 0,7$ за 1000 изображений на Antigate. Для обычного пользователя такого пакета хватит надолго.
Программы для автоматического распознавания капчи стоят дороже. Например, стоимость самого дешевого пакета CapMonster 2 составляет 37$. Но такие программы рассчитаны не на обычного пользователя, а на тех, кто ведет активную рассылку по многим адресам, ведь они способны распознавать по нескольку миллионов капч в день.
Когда программа установлена и запущена в работу, от вас больше не будут требовать доказать, что вы не робот - распознавать капчу будет программа.
Нужно отдать должное разработчикам - такие программы значительно упрощают нам жизнь. С другой стороны, очевидно, что от настоящих роботов капча не спасет, зато она вполне может вымотать нервы обычным пользователям Интернета.
Смотрите видео — Как включить распознавание капчи через antigate, rucaptcha, captcha24, captchabot на DelphiXE5
текстовые капчи, графические капчи: ReCaptcha V2, KeyCaptcha, FunCaptcha и др.
Зарегистрироваться>>>
Есть еще один действенный способ избавления от капчи - заказать динамический ай-пи адрес. Обычно эта услуга платная, а ее стоимость зависит от расценок провайдера. После этого выставите в настройках самую быструю автоматическую смену адреса (например, каждую секунду).
Данный способ гарантированно избавит вас от надоедливой капчи - а значит, вам не нужно будет раздражительно вздыхать каждый раз, когда программа решит проверить вас на человечность.
Если капча появляется слишком часто, необходимо выяснить, почему это происходит? Пользователям Гугл Хром есть смысл проверить расширения. Например, если отключить блокирующее рекламу расширение AdBlock или плагин RDS бар, то скорее всего, капча больше не появится.
Если вас нисколько не раздражает ввод капчи, тогда вы можете еще и заработать на этом . Для этого нужно найти сервис, в котором вы захотите работать «наборщиком капч», и пройти процесс регистрации на сайте. Сразу после этого можно приступать к работе. Чем больше вы набираете капч, тем больше получите денег. Трудно придумать более простой способ заработка в Сети. На Rucaptcha ставка составляет от 1 до 10 копеек за распознавание одного изображения.
Заработок 💰 онлайн на вводе капчи Всё, что вам нужно — это правильно ввести текст с картинки (с капчи).Вы получаете деньги 💵 за каждый ввод капчи.
Зарегистрироваться>>>
Если вас интересует тема заработка в Интернете, здесь вы найдете всю самую актуальную информацию 50 лучших способов заработать в Интернете
Сколько лет существует Хабр - столько лет на нём регулярно появляются посты про очередную капчу - будь то скрипт генерации картинки, новая идея капчи с котиками и тому подобное. Самый свежий пример того, что человек не совсем понимает - как же всё таки должна работать капча (см. текст поста и последние комментарии), но при этом делится своими заблуждениями с сообществом. Складывается ощущение, что капча - это такая terra incognita для большинства разработчиков - как для тех, кто просто прикручивает её к очередной форме в надежде на то, что она будет работать «из коробки», так и для тех кто придумывает капчи вроде тех, на которых надо выбрать картинку с котиком из нескольких фото.
Статья содержит полезную информацию для тех, кто использует капчу на своём сервере, вместо того чтобы довериться стороннему сервису вроде reCaptcha.
А для затравки - если вы считаете, что такая проверка капчи будет работать:
if($_POST["captcha"] == $_SESSION["captcha"]) return true; (пример из практики)
то вы глубоко заблуждаетесь.
Устойчивость к распознаванию
- свойство, защищающее капчу от распознавания алгоритмом - например системой распознавания текста. Гарантирует то, что человек сможет прочитать текст на картинке, а компьютер нет.
Антипример: стандартная капча форумов phpBB 2.x таким свойством не обладала - из-за относительной простоты распознавания появились скрипты, которые спамили все подряд форумы вынуждая веб-мастеров менять капчу на более стойкую.
Устойчивость к угадыванию
- свойство капчи, не позволяющее угадать её значение за небольшое число попыток (менее 1000). Если набор возможных значений капчи невелик, программе не составит труда угадать её подбором вместо распознавания.
Антипример: арифметическая капча вроде «1+2» (перебор чисел от 1 до 20 в скором времени даст результат).
Антипример: выбрать из нескольких картинок ту, на которой изображён котик.
Перед проверкой ответа - надо убедиться, что он не пустой.
В противном случае, злоумышленник может не загружая картинку или удалив идентификатор текущей сессии, передать пустое значение и пройти капчу, т.к. произойдёт сравнение двух пустых строк (в PHP несуществующее значение равно пустой строке).
Антипример: уже упомянутый мной код if($_POST["captcha"] == $_SESSION["captcha"]) return true;
Причем этот код был написан опытным программистом.
После проверки, сохраненное значение капчи необходимо удалить.
Если не сделать этого, злоумышленник сможет использовать данное значение снова неограниченное число раз. Да, при обновлении страницы с формой обновляется и капча (либо при генерации формы, либо при генерации картинки), вот только скрипт может не загружать форму снова (надо упомянуть, что это не актуально если на сайте используются одноразовые csrf-токены для форм).
Антипример: гипотетическая форма логина, в которой достаточно один раз ввести капчу правильно, и далее подбирать пароль скриптом, избегая перегенерации капчи на сервере.
Защита от DoS. При генерации капчи на своем сервере, надо понимать что это удобный вектор проведения DoS атак (которую, в отличие от DDoS, может устроить любой школьник). Для защиты можно ограничить число генерации капчи для одного ip, кэшированием капч и т.д.
Защита от распознавания. Если вы выбираете капчу, или вдруг собираетесь написать её сами, желательно понимать какая капча более защищена от распознавания. Существуют готовые универсальные скрипты распознавания капчи, работающие по принципу OCR , а в случае если ваш сайт заинтересует спамеров есть риск, что будут использовать / писать скрипт конкретно под вашу капчу. Последнее правда относится больше к сайтам уровня Яндекс или vk, а вот вариант с защитой от банальных OCR желательно предусмотреть.
Защита от антигейтов.
Если говорить формально, то капча как тест Тьюринга не обязана защищать вас от антигейтов, так как в этом случае её будет распознавать человек. С практической же точки зрения, этот вопрос весьма актуален и защищаться как-то надо.
Тут нет и не может быть «золотого стандарта» (ибо в таком случае антигейты внедрят его поддержку), поэтому вы вольны дополнять капчу любыми ухищрениями, чтобы сделать её распознавание через антигейт невозможным. Например:
- нестандартная капча (сбор паззла, поворот изображения, клик по области на фото и т.п.);
- кириллическая капча - самое простое решение, но имеет ряд минусов: подходит только для проектов с русскоязычной аудиторией, есть антигейты с поддержкой кириллицы;
- использование виртуальной клавиатуры рядом с капчей для ввода нестандартных символов или фигур (может быть неудобно пользователям мобильных);
Для облегчения распознавания человеком: не используйте в капче одновременно буквы и цифры, не используйте одновременно прописные и строчные буквы, исключите похожие символы.
Кому то информация в этом топике покажется очевидной, но если бы я не сталкивался с примерами непонимания этих простых принципов в жизни, в том числе у опытных коллег-разработчиков, я бы не стал тратить время на написание этого текста.