Автоматическое распознавание KeyCaptcha

64 комментария

Вот мое видео демонстрирующее процесс автоматического распознавания капчи KeyCaptcha

Как видите у меня получилось взломать KeyCAPTCHA. Как же это реализовано?

Чесно говоря я плохо шарю в JavaScript, но пока разбирался в этой капче, смог немножко поднять свой уровень. Так что в чем то я немного благодарен разработчикам.

В этой статье я не буду рассматривать и анализировать возможные уязвимости подписей и самой реализации. Здесь я хочу показать и описать алгоритм программного распознания интерактивной капчи. Вообщем начнем.

Анализ алгоритма

Здесь как я уже писал выше не будет анализа подписей запросов, только лишь описание алгоритма генерации, загрузки и отображения капчи. Разбирать будем JS версию капчи.

Общее представление

Библиотеки JS подгружаются динамически, по очереди. Загрузку первой библиотеки (cap.js) инициализирует сама страница и далее каждая библиотека подгружает следующую в таком порядке:
алгоритм генерации keycaptcha
Каждая библиотека отвечает за приблизительно такие функции:

  • cap.js — инициализация основных функций, загрузка caps.js
  • caps.js — инициализация основных функций, периодическая загрузка новых gjs.js (по истечению таймаутов), проверка правильности решения
  • gjs.js — загрузка изображений, расшифровка и их отображение, основное взаимодействие с пользователем

Начнем разбор приложения с gjs.js, так как это все таки основная библиотека.

Разбираем gjs.js

Часть кода обфусцированна с помощью JJencode, но я не зря писал деобфускатор JJEncode. Так же у кода отсутствуют отступы и вообще какое нибудь форматирование, но это решается автоформатированием кода в NetBeans (ALT+SHIFT+f).

Получили нормальный код. Анализируем. Обращаем внимание на строку:

(немножко сократил, вырезав часть из hex-данных)

Загружаем картинку по урлу:

(изображение ужато по ширине, по клику — оригинальное изображение)

Как видно оригинальная картинка покромсана на много маленьких частей. Даже теоретически невозможно составить из этого оригинал не зная алгоритм. Но, если обратить внимание на какие то hex-данные, то первое что приходит в голову — это и есть ключ для склеивания картинки. Поизучав скрипт я пришел к выводу что так и есть. Проблема только в том что этот ключ зашифрован, а код для расшифровки обфусцирован JJEncode. Именно этот факт меня вынудил написать деобфускатор JJEncode. Деобфусцируем код и портируем его на PHP. В итоге получаем скрипт который склеил наше изображение, вот так:

Как видите это фон нашей капчи. А вот наши кусочки пазла:

Собираем по уже известному алгоритму и получаем четыре картинки:

Ну и также в этом скрипте содержится функция которая при нажатии кнопки «отправить» отсылает координаты пазлов на сервер а ответ записывается в скрытое поле этой формы после чего происходит отправка данных формы.

Разбираем caps.js

Этот скрипт нам интересен только функцией подгрузки библиотеки gjs.js.

Забегая вперед, открою вам секрет. Мой UserJS будет работать перехватывая эту функцию и переадресовывая запрос на мой вебсервер. Но ладно об этом потом… =)

Склеиваем изображение

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

Находим грани

Сначала очищаем картинку от шума. Все пиксели с цветом ниже 0F0F0F, т.е с очень высокой яркостью заменяются на белый цвет.

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

Для начала мы проходим слева направо и каждый столбец пикслей сверяем со следующим. Если в этих столбцах есть участки фоновых пикселей и цветных пикслей (в следующем столбце), то запоминаем координаты этого участка. Назовем эту группу первой. Вот эти участки (выделены красной линией):

Далее проходим справа налево по тому же алгоритму и запоминаем участки:

Теперь сверху вниз:

И снизу вверх:

Таким образом мы получили все возможные грани на изображении:

Собираем пазл

Теперь чтобы определить где какой кусочек должен находится берем по очереди и сравниваем его грани с каждой из найденных граней в фоне.

Вот пример того как сравниваются грани:

Ну и еще один пример:

То есть для каждой грани в каждой группе находится максимальное соответствие. Затем для всех граней в одной группе находится грань у которой найдено максимальное соответствие. И для четырех групп находится группа в которой есть грань с максимальным соответствием. И именно эта грань определяет позицию проверяемого куска от всего пазла.

Алгоритм повторяется для каждого кусочка. В итоге получаем позиции всех пазлов. И соответственно мы можем собрать целую картинку!

Иногда конечно картинки собираются с погрешностью в пару пикселей, но это нормально, так как KeyKaptcha допускает небольшую погрешность при сброке картинки (причем явно большей чем пара пикселей). Иногда картинки собираются неправильно (об этом в отступлении), если вычесть этот процент, то, в итоге, с вероятностью в 80-90% мы получаем правильную картинку.

Отступление

Единственный минус у моего алгоритма на данный момент — это то что он не сможет собрать картинку в случае если у пазла нет соседний граней с фоном. Т.е:

  • Серые квадраты — участки фона
  • Зеленые квадраты — кусочки пазла которые имеют общие грани с фоном (они будут успешно собраны)
  • Оранжевый квадрат — кусочек пазла НЕ имеющий общей грани с фоном (для него будет определенна НЕ правильная позиция)

Чисто теоретически это вылечить очень легко. Достаточно еще анализировать грани у самих пазлов. Но на практике мне лень это реализовывать, все таки мне не нужны промышленные масштабы распознавания KeyCaptcha, здесь всего лишь спортивный интерес, т.е. доказать что это возможно =)

Реализация распознавания

Ну и теперь к самому интересному. К тому как это все работает!

Теория

Вот общая схема:
Алгоритм програмного взлома keycaptcha
Теперь по порядку.

  • При загрузке страницы мой скрипт UserJS переопределяет функцию загрузки библиотеки «gjs.js» таким образом чтобы вместо нее загрузился мой скрипт gjs.php с моего вебсервера
  • Скрипт gjs.php в свою очередь создает запрос к оригинальной библиотеке. Вырезает из оригинальной библиотеки участки с зашифрованными картинками, расшифровывает их и передает в скрипт распознавания. А в браузер тем временем возвращается модифицированная библиотека, которая в свою после загрузки сразу же подгрузит еще одну мою библиотеку hack.js
  • Библиотека hack.js также генерируется динамически php скриптом. Он запрашивает результат из скрипта распознавания (результат — координаты пазлов) и устанавливает положения пазлов в капче в соответствии с этим результатом

Этот алгоритм выглядит прозрачно для пользователя (Хоп… И капча сама собралась! 0_o) и дает возможность параллельно во время загрузки остальных библиотек и картинок распознавать само изображение (т.е. выйгрыш в скорости).

Практика

Для практической реализации этой схемы вам понадобится:

  • Веб сервер с поддержкой php
  • FireFox
  • Установленный и активированный в FireFox-е плагин GreaseMonkey

Итак, начнем.

Настраиваем вебсервер

Для начала вам нужно загрузить скрипты из этого архива KeyCaptchaBreaker_Web в какую нибудь директорию видимую из веба. Пусть полный путь к этой директории будет равным
http://site.ru/path/
Затем открываем файл «config.php» и вписываем этот путь в конфиг, т.е. как то так:

Все. Вебсервер настроен.

Настраиваем UserJS

Для этого вам необходимо скачать этот скрипт KeyCaptchaBreaker_UserJS. Распаковать его. Открыть с помощью текстового редактора, найти следующую строку:

И заменить ее на вашу, к примеру, вот такую:

Сохранить этот файл. И! Внимание! Открыть этот файл с помощью FireFox. Тогда у вас откроется вот такое вот окно:
Установка плагина KeyCaptcha Breaker на Firefox
Нажимаем «Начать установку». Наш скрипт устанавливается. И Все наш скрипт готов к работе!

Как пользоваться

Теперь если вы зайдете на какой нибудь сайт с установленной на нем KeyCaptcha то она автоматически будет распознана. От вас никаких действий не требуется.
PS: иногда необходимо выждать небольшой таймаут (около 5сек) перед нажатием на отправить, иначе капча засчитана не будет.
PPS: я думаю если авторы наткнутся на эту статью, то они изменять свой алгоритм так чтобы мой «плагин» перестал работать, так что не удивляйтесь если это так и случится.

Заключение

Ну что ж. Как вы видите, данную капчу не стоит использовать на своих ресурсах в качестве защиты от спама, так как ее возможно обойти. Справедливости ради замечу, что на это мне пришлось потратить около трех суток, но это скорее из за моего незнания JavaScript на должном уровне.

Но так или иначе заверение авторов о том что «Невозможно автоматическое распознавание» — всего лишь пустые слова.

  1. Николай

    Все замечательно :)

    Но во-первых Ваши скрипты уже не работают, во-вторых кейкапча позиционирует себя не как какой-то конкретный вид капчи, а как платформа для создания любого интерактива. И именно такой подход дает 100% защиту от спам-ботов. Я думаю Вы понимаете, что можно придумать 10001 вид интерактива и 10001 алгоритм запутования спам-ботов. В результате любой массовый спам-бот созданный для «пробития» кейкапчи неминуемо окажется неработоспособным на слудующий же день после его массового использования.

    Именно такой подход гарантирует защиту для пользователей выбравших наш сервис.

    С уважением,
    разработчик кейкапчи :)

    1. Дмитрий Амиров Автор

      Здравствуйте! Очень приятно что вы оставили тут свой ответ =)

      Ну то что мои скрипты уже не работают, это вполне ожидаемо. Но вот то что вы позиционируете свой сервис как стопроцентную защиту от спама — это бред, и именно это я хотел опровергнуть. Дада, вы можете сказать что мол наша защита заключается в том что вы можете постоянно изменять ваши виды «интерактива» но это уже НЕ 100%-ая защита.

      Да и то что вы пишите на главной «Невозможно автоматическое распознавание» — это ведь по сути вызов. И пока вы так пишите, многие люди будут пытаться распознать вашу защиту. Автоматически разпознать можно все. Вопрос лишь в затраченном времени.

      Но вообще спасибо вам, было очень интересно. И я не жалею о потраченном времени =)

      1. Николай

        Денис,

        Наш сервис действительно на 100% защищает от спам-ботов, так как сейчас нет
        ни одного промышленного спам-бота, который бы проходил нашу
        защиту. Мало того, учитывая легкость с которой мы можем менять алгоритмы
        и виды интерактива, делать такого бота пустая трата времени. В мире еще
        очень много сайтов с другими капчами и пока мы не займем хотя-бы 30%
        рынка связываться с нами реально дурная и бесперспективная задача…

        А 30% рынка это около 80 000 000 правильных капч в сутки, до этого еще далеко, ну а когда у нас будет такой траффик, то и методы защиты станут более изощренными и динамическими…

        И уж если Вы приверженец букво-цифровых капч, то я думаю Вы понимаете, что на базе нашей платформы мы можем сделать и букво-цифровую капчу. Просто мы считаем что это устаревший и не удобный для пользователей вид защиты.

        С уважением,
        разработчик кейкапчи.

        1. Дмитрий Амиров Автор

          Я не приверженец букво-цифровых капч. Я приверженец отсутсвия капчи как таковой =)

          И ваш сервис не защищает на 100% от спама как бы то не было. Вы слишком категорично об этом заявляете. Я повторюсь. ЛЮБАЯ защита обходится, вопрос лишь в затраченных ресурсах.

          Может быть если бы вы говорили не 100% а 99% я бы с вами согласился. А про абсолютную защиту вы привираете. Конечно хотелось бы посмотреть что у вас там за уже разработанные интерактивы, но, уверен, и они не дадут 100% защиту.

          PS: и поменьше рекламы пожалуйста =)

  2. FAQer


    Мне тоже заливали про 100% защиту и, что уже ранее брались безуспешно ломать KeyCAPTCHA за деньги. Когда же я предложил в рекламных целях объявить вознаграждение за взлом, то быстро оказалось, что это не так.
    В принципе, этот вопрос прохождения ботом обсуждался на форумах. Стоит 100-200 долларов, но никому это не было интересно из-за малой распространённости KeyCAPTCHA

    Геннадий

    1. Дмитрий Амиров Автор

      Геннадий, пожалуйста в следующий раз воздержитесь от экспрессивности в ваших комментариях.

      Я не хочу чтобы вы на моем блоге обсуждали ваши отношения.

  3. Николай

    ЛЮБАЯ защита обходится, вопрос лишь в затраченных ресурсах.

    Мы не в коем случае никогда не утверждали что какую-то защиту невозможно обойти «по определению», все пишется, все ломается :) Но вопрос именно в ресурсах и в скорости устранения последствий взлома. В случае с нашим сервисом, как я уже МНОГО раз говорил ресурсы достаточно ощутимы, а работа на которую потрачено несколько дней за несколько часов превращается в бесполезный набор скриптов.

    И понятно что при развития сервиса свои алгоритмы защиты мы будем только усиливать…

    Может быть если бы вы говорили не 100% а 99% я бы с вами согласился.

    99% это МНОГО :)) и в приближении их можно считать 100 :)

    Я не приверженец букво-цифровых капч. Я приверженец отсутсвия капчи как таковой =)

    Ну это тема отдельного холивара и честно говоря, если подумать, то Вы неизбежно придете к выводу, что наш сервис может интегрировать любые «безкапчевые» методы защиты… Мы можем банить по списку публичных прокси, можем анализировать активность на разных сайтах, можем много что сделать и накрутить, сам принцип нашей интеграции позволяет применять любые способы защиты и почти любой вид интерактива…

    И кстатти, Ваше выражение:

    данную капчу бесполезно использовать на ресурсах в качестве защиты от спама

    Еще более категорично чем наши 100% :)

    1. Дмитрий Амиров Автор

      >Мы не в коем случае никогда не утверждали что какую-то защиту невозможно обойти «по определению», все пишется, все ломается :) Но вопрос именно в ресурсах и в скорости устранения последствий взлома.
      Отлично, вы это признали =)

      Как вижу эту проблему я:
      Можно все таки потратить несколько дней на разработку алгоритма взлома этой капчи, собрать базу всех сайтов использующих вашу капчу, и начать спамить до тех пор пока вы не среагируете. За несколько часов ресурсы можно будет заспамить так что мало не покажется. Это принесет достаточную прибыль спамерам, такую что они смогут окупить разработку нового обхода (может не на данный момент — у вас слишком низка популярность, но в будущем — вполне). И так далее… И такая «гонка вооружений» в конце концов приведет… Вообщем ни к чему хорошему это приведет…

      >>Может быть если бы вы говорили не 100% а 99% я бы с вами согласился.
      > 99% это МНОГО :)) и в приближении их можно считать 100 :)
      Но и все таки это и не 100%, согласитесь ;)

      >И кстатти, Ваше выражение:
      >»данную капчу бесполезно использовать на ресурсах в качестве защиты от спама»
      >Еще более категорично чем наши 100% :)
      Пожалуй вы правы. Извините. Исправил =)

      1. Николай

        >Это принесет достаточную прибыль спамерам, такую что они смогут окупить
        >разработку нового обхода

        В этом-то и дело что не принесет, основная масса спамеров пользуется готовыми инструментариями и очень мало пишут что-то свое, в основном для каких-то специфичных задач… Вы зря думаете что спам это золотое дно :))

        Эту операцию может кто-то совершить из «спортивного интереса», но профессиональным спамерам так испражняться просто банально не выгодно…

        Спамерам не выгодны единичные атаки им нужна стабильно работающая система постоянного дохода.

        И опять-же для такой операции надо иметь ОЧЕНЬ много IP адресов, ведь никто нам не мешает делать анализ и фильтровать сильно «активных» личностей :)

        Вобщем мое предложение пользоваться нашим сервисом и наслаждаться отсутствием спама, в конце концов никто не запрещает его отключить или поставить какую-то дополнительную защиту если спам действительно начнет массово появляться :)

        На данный момент мы действительно очень надежно предотвращаем спам, ну а что будет завтра, посмотрим :)

        PS: у нас кстати скоро будет новая версия сайта, и мы наверное сгладим формулировки, чтобы они Вам не казались настолько категоричными ;)

      2. Николай

        Кстати! Вы можете поставить нашу капчу к себе на блог (в безрекламном режиме, если реклама Вам так не нравится) и оценить её эффективность по сравнению с Akismet’ом который Вы судя по всему используете :)

        Правда Ваш блог еще новый и о нем спамеры не знают, проблемы такой Вы пока не имеете, но поверьте, придет время, когда без капчи Вы будите каждый день чистить по 100 спамных комментов ;) Именно так и происходит, когда блог достаточно хорошо вываливается в СЕРП :)

        1. Дмитрий Амиров Автор

          Спасибо конечно за предложение (поставить капчу всмысле) =)

          Но чесно сказать меня лично раздражает собирать эти картинки. А насчет борьбы со спамом, я, наверное, придумаю какое нибудь средство попроще. И нет, Akismet-ом я не пользуюсь, пока хватает элементарной проверки с помощью JS. Конечно же моя проверка обходится на порядки легче чем ваша капча, но она зато и не требует никакх действий со стороны пользователя (для меня на данный момент это главнее).

          >В этом-то и дело что не принесет, основная масса спамеров пользуется готовыми инструментариями и очень мало пишут что-то свое, в основном для каких-то специфичных задач… Вы зря думаете что спам это золотое дно :))
          >Эту операцию может кто-то совершить из «спортивного интереса», но профессиональным спамерам так испражняться просто банально не выгодно…
          Это пока ваша капча не достаточно популярна. А когда дело дойдет до 30% как вы писали, то на мой взгляд это уже у вас не будет хватать ресурсов для защиты. Хотя все это относительно.

  4. Николай

    >у вас не будет хватать ресурсов для защиты

    Представьте себе доходы от такого вида рекламы при 80 000 000 успешных решениях в день :) Не думаю что у каких-либо спамеров ресурсов в этом случае будет больше чем у нас… Все как Вы и написали относительно :)

    Одни люди делают, другие ломают, процесс естественный и бесконечный :)

    Главное чтобы пользователи были довольны…

    1. Дмитрий Амиров Автор

      Пользователи то может и быть, но врятли. Ваша борьба со спамерами будет постепенно увеличивать сложность капчи, а это будет вызывать недовольство с их стороны. Да и боюсь владельцы сайтов будут не очень довольны от того что на их сайтах переодически появляется такая куча рекламы. Вообщем спорно это =)

      Да вы поймите, я нигде не говорил что ваш сервис плохой, меня всего лишь зацепило ваше утверждение об абсолютной защите. Но вроде как по этому вопросу мы уже пришли к общему мнению, а сейчас спорим о какой то ерунде =)

  5. Николай

    Денис,

    Конечно дискуссия упорно скатилась в холивар на тему капч :) поскольку Вы пишите:

    «данную капчу не стоит использовать на своих ресурсах в качестве защиты от спама, так как ее возможно обойти.»

    А потом:
    «Конечно же моя проверка обходится на порядки легче чем ваша капча»

    А какую тогда защиту от спама Вы предлагаете использовать? Не видите-ли Вы противоречий в данных утверждениях? :)

    В этом-то и дело что любые ловушки на уровне JS обходятся очень ТУПО управляемым браузером. Один раз пишешь управляемый браузер и ВСЕ, дальше любые ханипоты уже бесполезны… Дальше только фильтрация по IP, содержимому сообщений и прочее, но вот есть такой сервис как Akismet и есть такой факт, что он пропускает кучу спама, тупиковая ветвь здесь имхо налицо…

    Только какой-то интерактив с пользователем может гарантировать его «человечность»…

    Именно это я пытаюсь до Вас донести, а будет это пазл или задача «убей летящих с лева на право гусей зеленого цвета» это уже второй вопрос…

    Я всего-лишь утверждаю, что из всех сервисов защиты от спама на настоящий момент наш самый устойчивый вплане массового взлома, так как надо много что сделать и нет никакой гарантии что через пару часов это «много что» еще будет работать…

    1. Дмитрий Амиров Автор

      Знаете, реализация промышленного спам бота, с как вы говорите «управляемым браузером» это, на мой взгляд, что то из раздела мистики. Даже чисто теоретически прикинуть возможность этого, то в промышленном маштабе это будет хавать слишком много ресурсов. На данный момент не рентабельно это точно. Эту теорию вы можете задвигать своим клиентам, но не мне, это точно.

      Да, эту хрень возможно написать под какой то конкретный сайт, с его, какой нибудь, логикой. Но написать, что-то похожее, что могло бы пробивать любые «ловушки» — сродни созданию искуственного интеллекта.

      >А какую тогда защиту от спама Вы предлагаете использовать? Не видите-ли Вы противоречий в данных утверждениях? :)
      Нет, я не вижу противоречий в данных утверждениях. Потому что этот путь я выбрал для себя, а про вашу капчу написал вообщем что ее «можно обойти». Не выдергивайте слова из контекста пожалуйста :)

      А для этого блога на данный момент я считаю достаточным установки ловушек + ручная модерация. Даже если моя защита взламывается, то она взламывается целенаправленно человеком (т.е. спамеру необходимо зайти на сайт и целенаправленно изучить алгоритм работы), но тут его ожидает облом — у меня ручная модерация, а значит смысла пробивать эту защиту нет.

  6. Николай

    >Знаете, реализация промышленного спам бота, с как вы говорите «управляемым
    >браузером» это, на мой взгляд, что то из раздела мистики.

    Вам прислать exe файл с управляемым браузером ;D ? Это как раз пишется в случае с IE задней ногой за полвечера ;) и работает против ЛЮБЫХ JS ловушек, так как это полностью настоящий браузер, который просто управляется «со стороны» :))) До промышленности дело не дошло только потому как это было не надо…

    Вместе с клиент-серверной библитекой у меня ушло 2 дня на написание такого дела, конечно в 200 потоков он работать не может, но 20 «на ура» ;))) Он умеет нажимать на кнопки, выбирать селекты из списков «как человек» и много чего еще…

    Вам не кажется что Вы опять сильно категоричны в своих заявлениях? ;))

    1. Дмитрий Амиров Автор

      Я говорю Вам о реализации промышленного спам бота, с управляемым браузером. Пришлите такой (желательно исходники).

      Именно такой который будет ходить по сайтам (по разным сайтам), и спамить. А в умении нажимать кнопки ничего сложного нет, я с вами согласен. Но, мне кажется промышленного спам бота с такой реализацией не существует.

      И заметьте, я не категоричен в своих заявлениях. Я пишу что «я считаю» и «по моему мнению», а не заявляю об этом со 100% увернностью.

      1. Николай

        Я не утверждал про промышленных спам-ботов на данной основе, я говорил лишь о том, что JS ловушки Вас никак не защитят от управляемых браузеров. А управляемый браузер может сделать любой студент 1’го курса умеющий кидать ActiveX на форму в Delphi :)

        То, что управляемые браузеры сть и они ходят по инету, это факт :) Вопрос в их «массовости» и «промышленности», но это скорее второй вопрос. СЕО’шники используют такого зверя в своих целях :) И есть готовые реализации с управлением через PHP. На память стоило это «чудо техники» около 150$ года три назад.

        1. Дмитрий Амиров Автор

          Знаете, даже я могу заставить браузер выполнять то что мне надо. В реализации этого я проблемы не вижу. Но я повторюсь. Реализовать такой комплекс которой бы спамил бы в промышленном масштабе — анриал. Хотя анриал ровно на столько насколько анриал написать такого бота который бы взламывал любой ваш интерактив в вашей капче, ибо это сравни ИИ.

          И я кажется понял о каком комплексе вы говорите. Но оный создан отнюдь не для спама и преодаления каких либо JS ловушек. А создан лишь для имитации действий человека. Жаль забыл название…

          1. Николай

            >И я кажется понял о каком комплексе вы говорите. Но оный создан отнюдь не для спама и преодаления каких либо JS ловушек.

            А имитация действий человека нужна не для «спама» в широком смысле этого слова? ;)

            А зачем тогда еще эмулировать «действия человека» ?

          2. Николай

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

            Просто за спам можно «присесть» ;) вот и все «позиционирование» ;)

  7. Николай

    >спамеру необходимо зайти на сайт и целенаправленно изучить алгоритм работы

    Да блин в этом-то и дело что НЕ НАДО… :) Вы НИКАК не отличите спам-бота от браузера, поскольку он и будет браузером… Он подвигает мышкой, нажмет на кнопки, все сделает «как надо» :))) И спамеру будет глубоко пофиг на любые Ваши JS ухищрения… В этом-то и дело :))

    То, что Вам сейчас этого хватает для своего блога, это не значит что Вам этого будет хватать когда блог станет популярным. Факты говорят об обратном, достаточно популярные блоги СИЛЬНО страдают от спама.

    И в результате Вы все равно поставите капчу или вопрос :))) В этом-то и дело…

    И не забывайте простую вещь, что если Вы программист, то Вы можете сделать что-то уникальное, но если Вы обычный блогер, то Вы обязаны будете воспользоваться каким-то массовым продуктом :)

    А любой массовый продукт, как мы уже договорились, подвергается опасности взлома.

    Дальше я уже все говорил, про интерактив, оперативность итд… Повторять в 10 раз наверное смысла нет :)))

    1. Дмитрий Амиров Автор

      Да блин в этом-то и дело что НЕ НАДО… :) Вы НИКАК не отличите спам-бота от браузера, поскольку он и будет браузером… Он подвигает мышкой, нажмет на кнопки, все сделает «как надо» :))) И спамеру будет глубоко пофиг на любые Ваши JS ухищрения… В этом-то и дело :))

      Вы издеваетесь? Вашу мысль я уже давно понял. Но на мой взгляд все это теория и не более.

      То, что Вам сейчас этого хватает для своего блога, это не значит что Вам этого будет хватать когда блог станет популярным. Факты говорят об обратном, достаточно популярные блоги СИЛЬНО страдают от спама.

      Ручной модерации будет хватать всегда, чтобы вы не говорили. Но ручная модерация — гемор. А любая другая защита будет взломана. Тогда где грань?

      И не забывайте простую вещь, что если Вы программист, то Вы можете сделать что-то уникальное, но если Вы обычный блогер, то Вы обязаны будете воспользоваться каким-то массовым продуктом :)

      Да, и именно поэтому я пока пользуюсь своими разработками. Я не запрещаю никому пользоватся массовым продуктом.

      Я не пойму что вы мне хотите доказать? Что ваша защита — лучшая? Может быть, а может и нет, не знаю. Я же вам доказываю что и она обходится. Вот и все.

      1. Николай

        >Я же вам доказываю что и она обходится. Вот и все.

        Дык мы ведь уже утвердились в том, что обходится ВСЕ :) вопрос в ресурсах и продолжительности эффекта…

      2. Николай

        Дык все-таки «ручная модерация — гемор» или «Ручной модерации будет хватать всегда» ?

        Я хочу Вам доказать что если наступит тот день и Ваш блог вылезет в серп и как следствие станет популярным у спам-ботов, то поставите Вы Akismet, вопрос-ответ или каку-нибудь капчу :)

        Именно это я Вам пытаюсь доказать, прописную истину о которой говорят все вебмастера популярных ресурсов :)

        Удалять руками по 100 спам-сообщений не захватив нормальных Вам просто НАДОЕСТ :)

      3. Дмитрий Амиров Автор

        Дык все-таки «ручная модерация — гемор» или «Ручной модерации будет хватать всегда» ?

        Ручная модерация — гемор, но вплане защиты от спама ее будет хватать всегда. Я вас последний раз прошу, не играйте моими словами.

        Я хочу Вам доказать что если наступит тот день и Ваш блог вылезет в серп и как следствие станет популярным у спам-ботов, то поставите Вы Akismet, вопрос-ответ или каку-нибудь капчу :)

        Именно это я Вам пытаюсь доказать, прописную истину о которой говорят все вебмастера популярных ресурсов :)

        Откуда вы знаете что будет в будущем на моем блоге? Да может быть я поставлю какую нибудь защиту по мимо ручной модерации и JS, я этого не отрицаю и не отрицал. Но это будут крайние меры.

      1. Николай

        Ясно что моя, я ведь сказал более-менее объективна :) Ссылку кинул просто для того, чтобы не повторяться и не объяснять про + и — разных методов защиты от спама…

        Она хоть и моя, но вобщем-то народ на хабре признал, что объективна :)

      2. Дмитрий Амиров Автор

        Я вращался в разных кругах и поверьте, я знаю плюсы и минусы разных методов защиты от спама и без этой статьи.

        А при чтении вашей статьи создается впечатление, что написанна она лишь с одной целью доказать, что нет другого выхода кроме как ставить вашу капчу. И, мне кажется, именно с этой целью вы настолько много уделяете внимание проблеме «умных браузеров», раздувая из мухи слона =)

        1. Николай

          >написанна она лишь с одной целью доказать, что нет другого выхода кроме как ставить вашу капчу.

          Я просто описал факты. И не более того, как их воспринимать уже дело читателя.

          >И, мне кажется, именно с этой целью вы настолько много уделяете внимание проблеме «умных браузеров», раздувая из мухи слона =)

          Исторически все наоборот, занимаясь «умными браузерами» я пришел к идеи кейкапчи, так как понял что все, кроме вопрос-ответа и интерактива обходится таким браузером универсальным способом без какого-либо анализа особых методов защиты :)

  8. Николай

    Ого, 28 комментов настрочили…

    Вобщем думаю можно закончить этот холивар, я думаю что мы друг друга поняли :)

    PS: кстати холивар получился знатным «в лучших традициях холиварения» ;D

    1. Дмитрий Амиров Автор

      Уже 32 =)

      Спасибо вам на этом, а то я уже порядком устал.

  9. ХейХоп

    Овчинка выделки не стоит. Затрата времени на взлом не окупит себя при той оперативности, с которой это пофиксят. А пофиксят это быстро.

    1. Дмитрий Амиров Автор

      Какая разница пофиксят ли это или нет? И стоит ли это того или нет? =)
      Я пытался доказать что автоматическое распознавание возможно, но никак не рентабельность взлома.

  10. ХейХоп

    Взлом ради академического интереса — это конечно хорошо, лишний раз не даёт разработчику расслабиться.
    С другой стороны приятно, что разработчик не забил на проблему,а тут же её решил.
    Особенно приятно, что мне, как вебмастеру, не пришлось ничего у себя менять и перенастраивать.

    Да и вообще — нет ничего нераспознаваемого, весь вопрос только в средствах и времени, из которых и складывается выгода.
    Нет невзламываемых замков, всё упирается только в количество динамита.

  11. WebMA$Oist

    Ну, от академического интереса до практического применения перерывчик небольшой щас. Если б не опубликовали, то и не профиксили бы

    Пофиксили. И… вебмастерам (сисадминам) неделю пришлось переустанавливать сайты из бэкапов, т.к. KeyCAPTCHA заблокировала им доступ к своим собсвенным сайтам

    Т.е., несколько раз опубликовать скрипты для авто-распознования-прохождения и станут фиксить по большим праздникам и с большой подготовительной работой, несопоставимой с усилиями по взлому

    1. Николай

      Геннадий, Вы же здесь были под ником FAQer, зачем ник сменили?

      К системе подключенно более 20 000 сайтов, о чем Вы говорите? Если бы в проблемах данного человека была виновата кейкапча, то весь интернет был бы завален такими сообщениями, а Вы везде где только можно постите эту больную ссылку на французском языке, в которой человек говорит что новичок, наустанавливал кучу плагинов и у него все перестало работать…

      Геннадий, у Вас кризис жанра…

  12. Роберт

    «От любви до ненависти один шаг» — такой заголовок я бы дал своему комментарию если бы тут можно было писать заголовки.
    Но обовсём по порядку:

    Лет 15 назад, когда интернета было ещё мало, были сайты которые реально платили деньги за то что ты сидишь на них и играешь в игры. Среди них была Spedia. И я зарабатывал на том что делал програмки которые сами без меня играли в их игрушки (наверно 6-7 игрушек автоматизировал: MineSweeper, Tanks, SokoBan, уже не помню ещё какие) и был среди них Puzzle. Просто задача один в один как тут: есть миникартинка и надо составить такую большую. Но я пошёл другим путём. Я разбивал маленькую картинку на тоже количество блоков что и большая картинка, и уже пытался сравнить миниблок с теми большими блоками, которы можно было двигать. Всё управлялось из Delphi3 без задействования браузера. Вначале делал скриншот экрана, определял координаты картинок, делил её на блоки, считал в каждом маленьком блоке количество цветов (скажем какой процент белого) и смотрел какому блоку больше подходит такой процент среди больших блоков. После нахождения, из Delphi эмулировал движение мышкой (она нажимала на картинку на экране и перетаскивала в нужную позицию). Решаемость была сто процентная. Каждый месяц каждая игра приносила долларов по 30 (пришёл на работу, запустил на соседнем компе, и вечером выключаешь).
    Мне кажется что и здесь было бы проще сравнивать либо с маленькой картинкой, либо цвета на границах стыков. И делать это со скриншота. И никакие ухищрения авторов капчи не помогут. Клиентские программы могут находиться где угодно, делают скриншот, пересылают серверу, тот за долю секунды даёт ответ какой блок куда перенести и клиентские программы за секунду делают это мышкой через WinAPI (ну или медленней, чтобы уж совсем по честному эмулировать человека).

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

    По началу скалил зубы на каждый пост создателя капчи.
    Больше всего задело — Как можно называть 100% надёжной защитой ту, которую средний студентик может сломать за 2-3 часа??? И никак они потом не смогут отреагировать на моего даже «промышленного бота»! Потому что он пазлы мышкой в любом браузере собирает. А как он распознаёт — они не узнают (ведь это делает не клиент). Не говоря уж о ситуации когда я просто напишу программу для раскрутки своего сайта… (они будут менять протоколы шифрования, обфускаторы, методы передачи картинок, а я и не замечу этого — ведь мышкой вожу и в код не вникаю).

    Но дальше я начал менять своё мнение об авторе статьи в худшую сторону. Особенно когда в комментариях поднялась тема об управляемых браузерах.

    Раньше, когда мне надо было допустим собрать информацию с сайта — я делал это из Delphi прямыми Get/Post заросами (грубо говоря используя telnet), и дальше регулярными выражениями вытаскивал данные из содержимого загруженной страницы. Но время идёт вперёд, технологии развиваются, на сайтах информация подгружается через Ajax, да и всякие крупные сайты начали защиту делать (пару раз какая-то функция не сработала, и они мне через несколько запросов заявляют что я похож на бота и не дают работать), по этому через тот же Delphi подсоединяюсь через к браузеру IE как к COM-серверу и говорю ему — на какие сайты заходить и какие действия выполнять, а там уже беру содержимое браузера (не просто загруженная страница, а то что браузер сейчас держит в памяти со всеми отработанными функциями и подгруженными Ajax’ами) и делаю всё что мне надо.
    Ещё ни разу не видел что бы какой-то сайт меня не пропустил…

    И решил я написать об этом автору, здесь в комментарии, и тут…
    А вот с этого места я уже пишу с откровенной злосью к автору!
    Потому что я не смог написать ему ответ через свой iPad на котором читал его сай пока ездил по району. Я могу ввести поля имя, почту и web-сайт, но как только нажимаю на поле ввода комментария — выполняется какая-то авторская защита и клавиатура на моём iPad’е моментально пропадает (думаю тоже самое будет и на iPhone и на любом андроидном смартфоне). Автор статьи столько здесь доказывал что ему не нужна никакая капча, и что он способен защитить от ботов свой сайт с помощью JS, а на самом деле сделал свой сайт недоступным для обычных пользователей!
    Я понимаю когда малолетние ламеры не умеющие писать странички — допускают ошибки, но когда человек с умным видом заявляет что он спец и при этом делает свой сайт недоступным для миллионов устройств — ПОЗОР, больше нечего сказать…

    Да, я ещё в какой-то момент думал, может это не авторская защита, может он создавая свой сайт просто взял какой-то левый редактор, но в комментариях статьи про хеширование паролей увидел как кто-то «на правах рекламмы» оставил ссылку на свой сайт и якобы там описан точно такой же анализ. Сам анализ я не прочёл, я только заметил что сайт там был точная копия этого (тот же чёрно белый дизайн, и такая же форма для ответов), но только там через iPad я нормально смог писать в поле комментария.

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

    1. Дмитрий Амиров Автор

      Ну и написали вы конечно тут)

      Ладно, а теперь насчет камней в мой огород. Может быть не стоило бы так яро обвинять меня в некомпетентности? Я понимаю, что то что вы не смогли написать комментарий — неприятно, но все же и не вам судить о моем уровне.

      Теперь по поводу моей защиты, она выглядит вот так:

      И все. Больше никаких других защит нет. И эта защита никак не может препятствовать вводу коментариев. А проблема, скорее всего, находится в плагине, который выводит кнопки форматирования, который написан не мной.

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

      Может все-таки стоило сообщить об ошибке в менее агрессивных тонах? Но впрочем спасибо, что не поленились, и сообщили хотябы так..)

      1. Роберт

        Сегодня уже не такой злой как вчера (даже думаю — может погорячился вчера?)
        Что у вас не так с сервером, не скажу, но думаю что виноват не плагин форматирования.
        Ему ведь не нужно перехватывать событие входа на textadre (лиш нажимая на кнопку этот плагин будет обращаться к textarea, смотреть начало и конец выделения и ставить в этих координатах теги).
        У вас какая-то другая проблема с сайтом.
        в IE всё работает нормально.
        в Opera если нажать на ЛЮБОМ месте вашей страницы, на четверт секунды выскакивают песочные часики, а в правой верхней части адресной строки появляется слово «Документ», что возможно свидетельсвует о том что идёт какая-то подгрузка. Если нажать второй раз не меняя положения мышки — ничего не произойдёт. А если мышку сдвинуть хотя бы на точку и нажать — опять промелькнут часики и слово Документ. На аналогичном сайте вашего комментатора (с темы про хеширование паролей), такого не происходит!
        На iPad’e если нажимать на произвольном месте станицы, тоже ничего не проиходит, но если нажимать на любом редактируемом поле (имя, емайл, веб-сайт, textarea и даже Поиск) — то более чем на секунду начинает кружиться значок около оператора 3G-связи символизирующий о том что идёт какая-то подкачка/передача данных.
        Так что у вас какая-то проблема с сайтом в целом…
        (хотя проблему это создаёт только для textarea)

        1. Дмитрий Амиров Автор

          может погорячился вчера?

          Пожалуй погорячились)

          Сейчас вроде нашел проблему — это были выходки яндекс.Метрики, так у них осущствелялся сбор статистики по кликам для составления карты кликов. Если вам не сложно, то проверьте пожалуйста еще раз — осталась ли проблема?

          1. Роберт

            В опере часики больше не появляются…
            На iPad’e подкачка тоже прекратилась, но написать в textarea по прежнему не могу (как и прежде — клавиатура для набора моментально закрывается).

            Кстати заметил у вас ещё несколько глюков сайта с кнопками для форматирования текста:
            1) в Опере кнопка с буквой «d» НЕ перечёркнута (в IE и iPad всё нормально)
            2) если я выделил текст и хочу сделать его курсивом (нажимаю на кнопку «i») то плагин обрамляет текст тегами EM. Но эти теги не дают наклона ни в IE, ни в Opera, ни на iPad. Почему не используете теги «i»?
            Может я застрял в прошлом, но у меня не пришло бы в голову делать bold или italic иначе чем через теги B и I.

            1. Дмитрий Амиров Автор

              Ох уж эти айпэды( Вот теперь я точно не знаю почему закрывается клавиатура для набора ((

              Проблема с курсивом — это косяк этого шаблона. Я верю в то что однажды у меня дойдут руки его исправить.

              А насчет того что «bold или italic иначе чем через теги B и I» — это особенность движка WordPress-а, чесно говоря, мне тоже эта особенность не нравится, но переделывать мне не охото, не такая уж и принципиальная вещь.

              1. Роберт

                Так ведь в результате ни в одном браузере в комментариях курсив не работает…
                В то же время в самих статьях у вас есть курсив и он реализован через теги «i».
                Я ещё верю что фразу — «Кто сазал, что нет чудес?! Вспомни нашу RSS!» вы курсивом выводите. Но фразу — «(Изменено: 25.02.2012 15:51)» курсивом явно WordPress выводит, и следовательно он дружит с тегом «i».

                Но а косяк iPad’a я думаю будет и на любом другом смартфоне/планшете, ведь по сути клавиатура теряется из-за того что попадая в textarea выполняется какое-то действие которое кратковременно теряет фокус с поля ввода комментария…
                Я бы поочерёдно отключил бы разные скрипты (из того дополнительного что довешано и чего скажем нету у вашего коллеги с аналогичным сайтом) и выяснил бы где проблемка…
                Впрочем владельцев смпартфонов всего немногим более миллиарда, может вам и не интересны их комментарии :)

                1. Дмитрий Амиров Автор

                  Все-таки вы меня убедили. На днях я посмотрю где косяк в стилях и попробую вернуть крусив)

                  А вот насчет потери фокуса, я бы попробовал бы исправить, как вы говорите, отключая поочередно. Но у меня нет айпэда. На моем коммуникаторе все ок, как и на двух других смартфонах у моих друзей.

  13. Александр

    Здравствуйте! Почему нельзя было сделать скриншот уже обработанного и склеенного скриптом изображения и исходить из него, вместо того чтобы использовать деобфускатор?

    1. Дмитрий Амиров Автор

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

  14. Имя

    Не совсем в тему, но случайно наткнулся на эту дискуссию и не удержался. Дело в том, что капча, конечно, многим нужна и мне в том числе. И в принципе широкому кругу пользователей не так важно 100% у нее защита или 99 или 80 или даже 70! Но с недавних пор разработчики keycaptcha видимо от жадности стали предлагать бесплатный вариант только с дурацким фоном — не хочешь фон — плати. Результат — я удаляю keycaptcha со всех своих сайтов (и с тех, на которых еще нет фона). Зарабатывать хочется всем, но можно это делать на ДОПОЛНИТЕЛЬНЫХ примочках, а не забирать то, что уже ранее было предложено бесплатно! Надеюсь, что вскоре появится альтернатива, а пока не буду использовать расширения ПЕРЕОБУВШИХСЯ разработчиков из принципа. Лучше reCaptcha установлю!!!

    1. Дмитрий Амиров Автор

      Да, пожалуй, совсем не в тему =))

      Но вообще мой совет, пожалуйста, не вздумайте ставить reCaptcha если вам важны ваши пользователи. Об нее можно глаза сломать пока разгадаешь. Лучше подумайте над другим вариантом.

  15. forexam

    Всем доброго!

    В общем изучая тему автораспознования капч наткнулся в том числе и на этот блок и не прошел мимо данной конкретной статьи. Почитав холивар полуторогодичной давности не могу не добавить своего мнения относительно темы.

    1. По мере чтения комментариев разработчика систему кейкапчи проглядывали слишком большие амбиции. Маленький сервис позиционировал себя как самый лучший среди всех… Как можно сравнивать (цифры абстрактные) сервис с 1000 пользователей и сервис где 100 000 или 1 000 000 пользователей? Как минимум Ваш сервис вызывает раз в 10 меньше интереса спамеров. Когда интерес проявится, Вы станете пропускать ровно столько же, сколько и остальные. Правильно было подмечено что нет ничего не взламываемого. Так же как и нет вечного двигателя. Все что сделал один человек, рано или поздно может повторить другой, а в данном ключе группа лиц. С увеличением популярности увеличиться и группа изучающая Ваш сервис. Правильно было сказано, это игра в кошки-мышки.

    2. Отзыв о сервисе спустя год после холивара как раз доказывает первый пункт. У разработчика были слишком высокие амбиции. Много ресурсов? Не проблема их нарастить? Судя по отзыву, наращивание ресурсов происходит за счет пользователей и негативно на них сказывается. Автор блога Вам об этом говорил, Вы в него тухлым помидором кинули выпятив свои амбиции снова.

    История классическая и конец будет классический. Либо сервис загнется, либо станет таким же как и все остальные. Вся уникальность подобных идей свежа лишь по началу, пока кто-нибудь поумней не обратит внимания.

  16. Александр

    Да, статья действительно интересная.
    Но сам факт наличия капчи как таковой уже напрягает, поэтому сам использую незаметные для посетителей способы защиты от спама.

    1. Дмитрий Амиров Автор

      Вот и правильно. Я тоже придерживаюсь такого же метода и рекомендую его остальным.

  17. foobar

    Привет из 2015. У нас тут такое ощущение, что keycaptcha направлена на борьбу не с ботами, а с юзверями. Это касательно последней версии — расположи картинки адско низкого качества, размера по смыслу и без него.

  18. Архис

    Да проблема с капчей решена уже давно, и подход к нему совсем иной зачем пытаться собрать мазайку с помощью железа надо использовать мозги, а именно интеллект. Челеовек же разбирает капчу за несколько секунда достаточно подгрузить в железо часть анализаторских способностей человека с некаторой памятью об числах цифрах и буквах и вуаля получаем 100% распознование капч )))) Только есть одна проблема, прогресс еще не дошел до того уровня чтоб можно было только часть информации головного мозга переводить в цифровой формат и хранить на носителях, да какую часть даже полностью еще не могут но к этому все идет ) скоро электронные версии самих себя будут в цифровом виде решать такие задачи как автоматизация процессов распознование капчей да и вообще смерть уже будет не так страшна ибо копия себя останется ))) Так че то меня слишком в сторону унесло))

  19. Андрей

    Привет из 2016-го :-)
    Как я понял из обсуждения, разработчики кейкапчи изменили алгоритмы и использовать наработки автора блога уже бессмысленно?

  20. xmoonlight

    Отличная статья, но лучшим решением будет, всё-таки, обработка готового DOM’a.
    Когда можно взять скрин капчи, порезать на блоки и выполнить перемещение — т.е. сделать именно так, как это делают люди.

    Вот еще пример довольно необычной капчи (работает после нажатия на кнопку «Поиск»):
    http://dbc.su/demo/28-fuzzy-search-demo.html
    Что скажете?

  21. Влад

    Данная капча взломана, да. Но это была эксплуатация ее уязвимости, а не фундаментальное опровержение идеи капчи. Капча это простейший тест Тьюринга, и пока не появилось полноценного AI как минимум рано говрить о том, что капча потеряла свой смысл. Сейчас развиваются алгоритмы на основе нейросетей, они могут приблизить смерть капчи, но не станут ее причиной. Потому что, если задать нестандартную задачу для капчи, то и нейросеть с ней не справится (да и некоторые люди тоже). Полностью обесценят капчи только появление искусственного интеллекта равноценного человеческому. Но капча это будет лишь капля в море от того, что он обесценит своим появлением.

  22. Олег

    Здравствуйте! Мне нужна ваша помощь по обходу капчи…я сам не разбираюсь в этих плагинах,но судя по видео и по комментам,именно Ваш алгоритм позволяет обойти капчу. Жду обратной связи,заранее спасибо!

Добавить комментарий

Прочли запись? Понравилась? Не стесняйтесь, оставьте, пожалуйста, свой комментарий. Мне очень интересно, что вы думаете об этом. Кстати в комментарии вы можете задать мне любой вопрос. Я обязательно отвечу.

Вы можете оставить коментарий анонимно, для этого можно не указывать Имя и email. Все комментарии проходят модерацию, поэтому ваш комментарий появится не сразу.