войти зарегистрироваться

Море волнуется раз ..., или Капча 4D

Как то я уже писал топик про каптчу 3D
Дай карму! :)
А вчера решил слегка переделать, добавить рюшечек и еще одно измерение.
Долго сказка пишется, да быстро дело делается, рушил сделал и вот наваял гиперкуб Капчу 4D.

Пара примеров:
image
image
Код также прилагается:
  1. <pre>
  2. <?php
  3. /**
  4. * @author Andrii Kasian
  5. */
  6. $captcha = new Captcha4d();
  7. $captcha->render();
  8. class Captcha4d{
  9. const CHARS = 'WEafRTYIPAGHJKXBNM3479j';
  10. protected $hypot = 5;
  11. protected $image = null;
  12. protected $_sin = array();
  13. protected $text = '';
  14. public function __construct()
  15. {
  16. $this->time = microtime(true);
  17. $this->generateCode();
  18. }
  19. protected function generateCode()
  20. {
  21. $chars = self::CHARS;
  22. for($i =; $i<3; $i++){
  23. $this->text .= $chars{ mt_rand(,22)};
  24. }
  25. }
  26. public function getText()
  27. {
  28. return $this->text;
  29. }
  30. protected function getProection($x, $y, $z)
  31. {
  32. $xx = 0.70710;
  33. $xz = ;
  34. $xy = 0.70710;
  35. $yx = 0.40824;
  36. $yz = 0.81649;
  37. $yy = -0.40824;
  38. $cx = $xx*$x + $xy*$y + $xz*$z - 5;
  39. $cy = $yx*$x + $yy*$y + $yz*$z + 20;
  40. return array(
  41. 'x' => $cx * $this->hypot,
  42. 'y' => $cy * $this->hypot
  43. );
  44. }
  45. function zFunction($x,$y){
  46. $z = imagecolorat($this->image,$y/2,$x/2)>?3:;
  47. if( $z != ){
  48. $z += -2+ 2*
  49. $this->_sin[($x+$this->startX)%30]
  50. *
  51. $this->_sin[($y+$this->startY)%30];
  52. }
  53. $z += mt_rand(,30)/50;
  54. return $z;
  55. }
  56. public function render()
  57. {
  58. $xx = 30;
  59. $yy = 60;
  60. $animation = new Imagick();
  61. $animation->setFormat( "gif" );
  62. $cw = new ImagickPixel("white");
  63. $cb = new ImagickPixel("#000000");
  64. $this->image = imageCreateTrueColor(100, 20);
  65. $whiteColor = imageColorAllocate($this->image,255,255,255);
  66. imageFilledRectangle($this->image,,,$yy * $this->hypot , $xx * $this->hypot, $whiteColor);
  67. $textColor = imageColorAllocate($this->image,,,);
  68. imageString($this->image, 5, 3, , $this->text, $textColor);
  69. $cof = 2*3.141592654/$xx;
  70. for($x = ; $x < $xx + 1; $x++){
  71. $this->_sin[$x] = sin($x*$cof);
  72. }
  73. $this->startX = mt_rand(,$xx);
  74. $this->startY = mt_rand(,$yy);
  75. $draw = new ImagickDraw();
  76. $countFrame = 25;
  77. for ( $i = ; $i < $countFrame; $i++ ) {
  78. $this->startX += $xx / $countFrame;
  79. $coordinates = array();
  80. for($x = ; $x < $xx + 1; $x++){
  81. for($y = ; $y < $yy + 1; $y++){
  82. $coordinates[$x][$y] = $this->getProection($x,$y,$this->zFunction($x,$y));
  83. }
  84. }
  85. $animation->newImage( $yy * $this->hypot , $xx * $this->hypot, $cw);
  86. $im = new ImagickDraw();
  87. $im->setFillColor($cw);
  88. $im->setStrokeColor($cb);
  89. $im->setStrokeAntialias(true);
  90. for($x = ; $x < $xx; $x++){
  91. for($y = ; $y < $yy; $y++){
  92. $coord = array();
  93. $coord[] = $coordinates[$x][$y];
  94. $coord[] = $coordinates[$x+1][$y];
  95. $coord[] = $coordinates[$x+1][$y+1];
  96. $coord[] = $coordinates[$x][$y+1];
  97. $im->polygon($coord);
  98. }
  99. }
  100. $animation->drawImage($im);
  101. $animation->setImageDelay( 100/$countFrame );
  102. }
  103. header( "Content-Type: image/gif" );
  104. echo $animation->getImagesBlob();die();
  105. }
  106. }


Приятного понедельника, хабра товарищи!

PS. Эта капча не предназначено для использования в качестве капчи (ломает пользователям мозг, и забивает канал трафиком)

комментарии (138)

  • раскрыть комментарий
    • Спасибо исправил.

      ЗЫ. Не надо так волноваться, легко наступить на классические грабли когда пишешь на иностранном в понедельник вечером ;)
      • НЛО прилетело и опубликовало эту надпись здесь.
        • Если Вас задолбали боты, то 600кб не помеха… сейчас 90% народу торентами накачивает в сутки не менее 4гиг
          • НЛО прилетело и опубликовало эту надпись здесь.
            • уже и не москвичей тоже, прогресс идет по-тихоньку
            • Я не москвич, но за день у меня не менее 15Гб только исходящего трафика, торрент всегда включен + реальный ип, все просто.
              • НЛО прилетело и опубликовало эту надпись здесь.
                • А мне то что, я плачу не маленькие деньги за безлимитный 10/10Мб интернет (это максимум что есть у нас в городе) + отдельно за реальный ип.
                  • раскрыть комментарий
                    • Я плачу 500 р. в месяц за два мегабита (реальная скорость доходит до десяти мегабит) с внешним IP, Новосибирск. Что я делаю не так?
                      • Хороший у вас пров
                        • Да, неплохой, только что-то чудит последнее время. Но в Новосибирске такие цены — не исключение, а норма. Правда, стало нормой это относительно недавно — год-полтора назад.
                      • Это провайдер что-то делал не так, когда шейпер настраивал :D
                        • Да нет, это у провайдера такая политика. У него тарифы не «до такой-то скорости», а «средняя скорость — такая-то». Соответственно, когда пользователей мало (ночью или ещё когда) — скорости очень сильно возрастают. А когда пользователей много — скорость выдерживается достаточно хорошо.
                          • Э-э-э, а можно прокомментировать, почему минусуем? А то я как-то даже в недоумении, за что тут можно минусовать. Ну что поделать, если действительно такая политика у провайдера, и она им в явном виде заявлялась. Если кому интересно, то провайдер — HomeNet.
                      • У моего провайдера (общежитие белорусского ВУЗа, альтернатив нет) 512кбит/с максимум скорости для анлима и стоит анлим с такой скоростью около 50$.
                    • 19$ (149грн.), не маленькие относительно других тарифов. Дороже только для юр. лиц.
              • За последние 3 дня раздал 283 гигабайта Mass Effect 2 на демоноиде. Сегодня увидел, аж страшно стало.
                • у меня 420 за тот же срок…
            • Архангельск. Гигабайт в час канал позволяет.
          • Вы сравниваете несравнимое, типа времени отклика интерфейса и время рендера.

            Дело не в пожранном трафике, а с тем, что ждать подгружения 600 кб некомфортно даже на шустром канале.
          • а кто и не менее 40-ка ;)
          • Если боты будут массово запрашивать капчу, то мало серверу не покажется, т.к. её генерация + отдача такого большого файла в массовом режиме создаст приличную нагрузку. Вспомните атаку на хабр, когда DDoSили запрашивая капчу.
            • Можно нагенерить 5k наборов букв и картинок, отдавать их уже как статику, а каждые скажем 3 часа производить повторную генерацию всего пула.
      • Капча интересная, но для роботов легкая.
        Робот будет отслеживать «вечно параллельные линии», отсечет все лишнее, преобразует в 2D и легким движением руки распознает текст.
        • надо датчик влажности на клавиатуру, если будет буээээ, значит человек )
        • Ради интереса объединил в фотошопе все слои с наложением друг на друга в режиме Lighten, скриптом это тоже сделать не сложно.

          Один кадр так зачистить было бы гораздо сложнее…
    • Смотрю полюбился вам этот познавательный сайт:)
  • Извините, но Вы не могли бы объяснить, почему именно 4 измерения?
    Лично я вижу анимированный объект в 3-х измерениях.
    Или Вы подразумевали под 4-ым измерением время?
    • Да, я подразумевал время… (хотя картинка в 2 измерениях)
      • угу. напишите код с картинки на время 4-ой секунды после начала анимации. Это идея новой капчи
    • да, время тут — тоже определяет сосотояние картинки.
    • Я с вами согласен. Время как 4-ое измерение — не совсем корректно.
      Когда-то писал программу «4-х мерные алгебраические фракталы на кватернионах», так после этого я видел «100 мерные фракталы», где за пространство считали и цвет и красный оттенок и другой бред.
      • После написания программы «4-х мерные алгебраические фракталы на кватернионах» можно увидеть все существующие и вымышленные измерения. Даже прочитав только название.
        • Математическое обоснование было на хорошем уровне. Это не фантастика, а реальная математика.
      • Или вот более приземленный пример: при трехмерном моделировании газодинамических процессов каждому элементарному объему сопоставлены значения свойств среды, являющиеся координатами в пространствах P-V, T-S и других.
        • Я уверен, что мой пример более приземленный.
    • Как говорит наш преподаватель по вышке — «Если Вы видите (можете представить) 4D, то ждите скорую с санитарами...»
      • а наш, помнится, на доске как-то 16-мерный кубик рисовал:)
        • А он главврач тех санитаров, ему можно.
        • это 2^16 вершин

          сколько он его рисовал?)
          • минут 40. потом урок кончился)
            • я так думаю, можно было нарисовать логотип хабра: )
      • А у нас когда начался курс Алгебры и Геометрии в ВУЗе препод сказал кто мне нарисует 4мерный куб тому автомат за семестр.

        • Проекция 4-мерного куба на плоскость. Все линии на рисунке равны.
          Пояснения: чтобы получить квадрат — надо взять линию растянуть ее в перпендикулярном этой линии направлении.
          чтобы получить куб надо квадрат вытянуть в перпендикулярном плоскости квадрата направлении
          а чтобы получить гиперкуб(4-мерный куб) надо взять куб и вытянуть его в 4 измерение.
          *все «вытягивания» и «растяжения» делаются на одно и то же расстояние (а то будут получаться прямоугольники и параллелепипеды)
          • О ностальгия =)
            Давненько это было =)
            Я уже про 5 мерные пространства материал изучаю различные алгебры n порядков =)
            • Бесконечномерные пространства круче :-)
          • Вспомнил фильм «Куб»
            и меня передёрнуло от Вашего описалова…
  • Это круто!
  • Я балдею с таких изобретателей.
    Оставляем из анимации только неизменные области, чуть повернуть, и распознать.
    • А Вы попробуйте, на словах оно легко, а на деле…
      Хотя насчет неизменных областей Вы правы
      • Можно даже непосредственно не определять неизменные области — достаточно «слить» все кадры анимации. Будет надпись на черном фоне с небольшим шумом.
        • Обходится закрашиванием букв в черный цвет.
    • часть или все можно «топить»
      как идея по моему неплохо
    • Еще проще подсунуть ее школьникам для распознавания, впрочем, как и любую другую капчу.
  • Мой моск уничтожен. Если мне придется вбивать такую капчу, то руки отнимутся сразу вслед за глазами.
  • раскрыть комментарий
    • сори был не прав — когда писал изображение не двигалось как на первом капче…

      так действительно понятнее…
  • Эту вроде еще проще сломать. Выделяем куски, которые не двигаются и все. Дальше — дело техники.
  • НЛО прилетело и опубликовало эту надпись здесь.
  • Легко обходится, берется кадр если гифка, и все как со статичной версией.
    Думаю со флешем тоже можно что-либо придумать, к тому же многие не любят флеш, поэтому флеш-каптчи не получили распространения.
  • Милая, но совершенно бесполезная штучка.
    Роботом распарсить проще чем большинство 2D-капч. Разве что так, чисто для души проектик
  • Легко ломается, двигающиеся куски выделяем, удаляем — потом обратное преобразование и получаем плоскую картинку с читаемыми символами. Оригинал — надежнее.
    • Вы — такой умный — будете четвертым в списке.

      Даешь рекорд на количество повторений одного и того же соображения в каментах!
      • раскрыть комментарий
        • Читать одинаковые комментарии — тоже.
      • Не понимаю, почему до сих пор никто не написал, что эта капча элементарно обходится — оставляем только неподвижные части и всё!
        • Ура! Пятый! Кто больше?

          а вообще, посмеялся и плюсанул. :)
          • оставляем неподвижные области, а остальное удаляем.
            фдисятке!
    • НЛО прилетело и опубликовало эту надпись здесь.
  • antigate.com — лучшее средтсво от изобретателей :)
  • Есть ocr-research.org.ua, который всем желающим вышлет исходники своей капчи. Пример капчи:


    Как видите, и углы поворота, и углы наклона, и шрифты разные, и буквы гнутые. Только не надо её анимировать! =)
    • Краем глаза похоже на распластанную в синих дюнах тушку homo sapiens
      • Долго пытался понять с чего вы так решили, потом понял что картинка всё время разная >_<
    • блюр, контраст, повернуть, распознать :)
      • удачи. как получится — пишите.
    • Здорово это вы за меня решили, кому я и что вышлю…
  • Красиво. И, главное, читабельно.
    Но, я думаю, и распознать его будет просто — проще, чем 3d.
  • раскрыть комментарий
  • НЛО прилетело и опубликовало эту надпись здесь.
    • это известный глюк хабрапарсера. не любит он отдельно стоящие раскрашенные нули.
  • Сама идея волн и статики замечательная, даже «пятничная» какая-то :)
  • НЛО прилетело и опубликовало эту надпись здесь.
  • Еще добавить движение самих символов наподобие судна в океане :)
  • занимательно наблюдать, как автора опустили на землю за 2 минуты.
    • Ну просто никак не для капчи это…
  • нло поработит мир!!! =))
  • оу мэн, морская болезнь
  • А где тут собственно 4D? Анимация имхо это далеко не 4D. Да и плюс анимация дала возможность сломать капчу мгновенно, определить неподвижные вершины будет несложно и соответственно буковки есть.
  • Магия!
  • Смысл загоняться если капчи сейчас распазнаются людьми, есть целые сервисы.
  • Идея интересная, но, как уже было сказано выше, боту так будет намного проще отсечь все ненужное.

    По-моему, будущее капчей за WebGL — покрутил объект до нужного угла, распознал, вбил.
  • У второй картинки порадовал title.
  • Ох. Сколько капч нынче на хабре развелося.

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

    1) Капча не для того, чтобы её не мог разглядеть человек, а для того, чтобы её было трудно распознать программой.

    2) Надо хоть чуть-чуть (ну хоть самую малость!) почитать про методы выделения сигнала из шума. Тогда сразу станет ясно, что трудно сломать компом, а что — нет; и — соответственно — где плохая капча, а где хорошая.

    Как упражнение в элементарной графике — забавно. Но как капча — никуда не годится.
  • Ваша капча при взломе не сложнее остальных, даже легче
    1)Символы каждый раз выдаются под одинаковым углом
    2)Берем, скачиваем картинку, прогоняем ее и смотрим какие пиксели меняют положение при смене гиф-кадра
    3)«Выдираем» координаты эталонных «Неменяющихся» пикселей
    4) Сравниваем полученные с эталонными
    5) В итоге — капча декодирована
    • НЛО прилетело и опубликовало эту надпись здесь.
      • Не сдал матан — пошёл на метан.
        — Народная мудрость (ничего личного :-))
  • раскрыть комментарий
  • Да вы с ума сошли, капча в 640 Kб! :)
    • Вот видите 640кб хватит даже на капчу, один-неизвестный-человек был прав в свое время)
  • Сделай анимированную таким образом карту высот для рандом дот стереограммы. Будет весело.
  • НЛО прилетело и опубликовало эту надпись здесь.
    • пока писал ниже свой комент, вы выразили мою мысль на практике.
  • Думаю, будете четыредэшнее, если все это волнистое море будет немного вращаться или еще как-то волноваться. Тогда хакерские коменты «двигающиеся куски выделяем, удаляем» придется тоже апгрейдить.
    А еще можно было бы, отображая вот так 3-мерно символы, показывать их по очереди, или «бегущей строкой»
  • Так боты будут смотреть, которые пиксели не двигаются, и все, получаем 2D. Но идея, конечно, очень интересная :).
  • зато смотрится шикарно :)
  • А по-моему, отлично читается… У меня проблем не возникло с этим совсем
  • НЛО прилетело и опубликовало эту надпись здесь.
  • Код также прилагается:


    А не могли бы вы выложить исходник куда-нибудь (например на _dumpz.org). Спасибо
  • До тех пор, пока эту капчу не начнут использовать на сайтах, ничего против не имею. Красиво. :)
  • Реально «сильная» штука… по крайней мере для человека.
    • вот только для компьютера — слабая
  • Жму Вашу руку — очень интересно и необычно ) не знаю, правда, насколько практично )
  • Капча-мечта-DDOS-ера :)
    • О, Вы явно попробовали запустить…
  • С анимацией, можно сделать энное количество кадров, в одном из которых будет «капча», а остальные для запутывания. :) Только ужасно всё это.
  • пока тут происходит аукцион быстрых ломателей такой капчи, я немного отвлекусь от их прикидок. предположу, что если сделать символы тоже колеблющимися, то можно сохранить хорошую читаемость для людей, но сложность взлома возрастет в разы. быстрые ломатели, наверное, тоже найдутся, но почему то мне кажется что это будут не программисты, а индусы.

    кэп?
    • НЛО прилетело и опубликовало эту надпись здесь.
      • А еще лучше если они в противофазе будут колебаться.
  • А можно мне на память квадратный вариант с буковками fm? В личку).

    Чудесная штука.
  • Анимированная каптча в файле с расширением .JPG — это чтобы боты не догадались?
  • Тоже анимированная каптча, только весит 13 кб
    www.superlovers.ru/captcha
  • Очевидно же, что буква тоже должны «плавать». Кеп.
    • Правильно, иначе можно наложить по and все кадры, и останутся только буквы. И какой тогда смысл в этом всем?
    • Я бы плюсанул, да злое НЛО не дает заряда!
  • эту будет боту распознать даже проще чем статичную, за счет того что можно сразу удалить фон
  • Занятная капча. По крайней мере четабельна, в отличии от некоторых индивидуумов этой «породы»!
  • Индусов-вбивальщиков еще никто не отменял=)
  • Если уменьшить к-во цветов до 4-х, визуально картинка не изменится, но размер файла станет «всего лишь» ~150 Кб. Вполне вменяемый размер, я бы сказал так.
Только авторизованные пользователи могут оставлять комментарии. Авторизуйтесь, пожалуйста.