Ненормальное программирование

индекс
287,20

Море волнуется раз ..., или Капча 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. Эта капча не предназначено для использования в качестве капчи (ломает пользователям мозг, и забивает канал трафиком)
+185
1 февраля 2010, 20:31
86

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

НЛО прилетело и опубликовало эту надпись здесь
+35
KAndy #
Спасибо исправил.

ЗЫ. Не надо так волноваться, легко наступить на классические грабли когда пишешь на иностранном в понедельник вечером ;)
НЛО прилетело и опубликовало эту надпись здесь
+2
alexol #
Если Вас задолбали боты, то 600кб не помеха… сейчас 90% народу торентами накачивает в сутки не менее 4гиг
НЛО прилетело и опубликовало эту надпись здесь
+4
silentroach #
уже и не москвичей тоже, прогресс идет по-тихоньку
–39
stas_agarkov #
белгородцев, блядь
+2
silentroach #
м?
+8
oisee #
фамилия.
+6
silentroach #
а, это он представился?
0
Agent_Smith #
Я не москвич, но за день у меня не менее 15Гб только исходящего трафика, торрент всегда включен + реальный ип, все просто.
НЛО прилетело и опубликовало эту надпись здесь
+1
Agent_Smith #
А мне то что, я плачу не маленькие деньги за безлимитный 10/10Мб интернет (это максимум что есть у нас в городе) + отдельно за реальный ип.
–6
alkhankhel #
Не маленькие деньги это ~ 10 т.р(+- 5т.р. в зависимости от удалённости москвы). за мегабит магистрального провайдера. Вы платите 50-100 т.р. и совесть ваша чиста? ;)
+1
eugenius_nsk #
Я плачу 500 р. в месяц за два мегабита (реальная скорость доходит до десяти мегабит) с внешним IP, Новосибирск. Что я делаю не так?
+3
freeAKK #
Хороший у вас пров
0
eugenius_nsk #
Да, неплохой, только что-то чудит последнее время. Но в Новосибирске такие цены — не исключение, а норма. Правда, стало нормой это относительно недавно — год-полтора назад.
+4
alkhankhel #
Это провайдер что-то делал не так, когда шейпер настраивал :D
+3
eugenius_nsk #
Да нет, это у провайдера такая политика. У него тарифы не «до такой-то скорости», а «средняя скорость — такая-то». Соответственно, когда пользователей мало (ночью или ещё когда) — скорости очень сильно возрастают. А когда пользователей много — скорость выдерживается достаточно хорошо.
+3
eugenius_nsk #
Э-э-э, а можно прокомментировать, почему минусуем? А то я как-то даже в недоумении, за что тут можно минусовать. Ну что поделать, если действительно такая политика у провайдера, и она им в явном виде заявлялась. Если кому интересно, то провайдер — HomeNet.
0
Denai #
У моего провайдера (общежитие белорусского ВУЗа, альтернатив нет) 512кбит/с максимум скорости для анлима и стоит анлим с такой скоростью около 50$.
0
Agent_Smith #
19$ (149грн.), не маленькие относительно других тарифов. Дороже только для юр. лиц.
0
crtman #
За последние 3 дня раздал 283 гигабайта Mass Effect 2 на демоноиде. Сегодня увидел, аж страшно стало.
0
kovyrlo #
у меня 420 за тот же срок…
+2
skobkin #
Архангельск. Гигабайт в час канал позволяет.
+1
fanex #
Вы сравниваете несравнимое, типа времени отклика интерфейса и время рендера.

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

Один кадр так зачистить было бы гораздо сложнее…
0
tamerlan311 #
somedream.info/img/uncode.png

Пардон, как картинку вставить почему-то не получилось.
0
Sone #
Смотрю полюбился вам этот познавательный сайт:)
НЛО прилетело и опубликовало эту надпись здесь
+3
nuxdie #
Извините, но Вы не могли бы объяснить, почему именно 4 измерения?
Лично я вижу анимированный объект в 3-х измерениях.
Или Вы подразумевали под 4-ым измерением время?
+31
KAndy #
Да, я подразумевал время… (хотя картинка в 2 измерениях)
+1
freeAKK #
угу. напишите код с картинки на время 4-ой секунды после начала анимации. Это идея новой капчи
+2
serafims #
да, время тут — тоже определяет сосотояние картинки.
+7
Horse #
Я с вами согласен. Время как 4-ое измерение — не совсем корректно.
Когда-то писал программу «4-х мерные алгебраические фракталы на кватернионах», так после этого я видел «100 мерные фракталы», где за пространство считали и цвет и красный оттенок и другой бред.
+19
Colobock #
После написания программы «4-х мерные алгебраические фракталы на кватернионах» можно увидеть все существующие и вымышленные измерения. Даже прочитав только название.
+3
Horse #
Математическое обоснование было на хорошем уровне. Это не фантастика, а реальная математика.
+2
Marsikus #
Или вот более приземленный пример: при трехмерном моделировании газодинамических процессов каждому элементарному объему сопоставлены значения свойств среды, являющиеся координатами в пространствах P-V, T-S и других.
+2
Horse #
Я уверен, что мой пример более приземленный.
+4
arround #
Как говорит наш преподаватель по вышке — «Если Вы видите (можете представить) 4D, то ждите скорую с санитарами...»
+6
j1nn #
а наш, помнится, на доске как-то 16-мерный кубик рисовал:)
+4
Marsikus #
А он главврач тех санитаров, ему можно.
0
Infthi #
это 2^16 вершин

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

Проекция 4-мерного куба на плоскость. Все линии на рисунке равны.
Пояснения: чтобы получить квадрат — надо взять линию растянуть ее в перпендикулярном этой линии направлении.
чтобы получить куб надо квадрат вытянуть в перпендикулярном плоскости квадрата направлении
а чтобы получить гиперкуб(4-мерный куб) надо взять куб и вытянуть его в 4 измерение.
*все «вытягивания» и «растяжения» делаются на одно и то же расстояние (а то будут получаться прямоугольники и параллелепипеды)
0
artzub #
О ностальгия =)
Давненько это было =)
Я уже про 5 мерные пространства материал изучаю различные алгебры n порядков =)
0
eugenius_nsk #
Бесконечномерные пространства круче :-)
+1
Adward #
Вспомнил фильм «Куб»
и меня передёрнуло от Вашего описалова…
0
Isis #
Это круто!
+38
Discover #
Я балдею с таких изобретателей.
Оставляем из анимации только неизменные области, чуть повернуть, и распознать.
+2
KAndy #
А Вы попробуйте, на словах оно легко, а на деле…
Хотя насчет неизменных областей Вы правы
+22
StopDesign #
Можно даже непосредственно не определять неизменные области — достаточно «слить» все кадры анимации. Будет надпись на черном фоне с небольшим шумом.
+1
valCooL #
Обходится закрашиванием букв в черный цвет.
0
flacon #
часть или все можно «топить»
как идея по моему неплохо
+2
Gero #
Еще проще подсунуть ее школьникам для распознавания, впрочем, как и любую другую капчу.
–1
narsereg #
Мой моск уничтожен. Если мне придется вбивать такую капчу, то руки отнимутся сразу вслед за глазами.
–6
azium #
невозможно разобарть что на капче написано!
+2
azium #
сори был не прав — когда писал изображение не двигалось как на первом капче…

так действительно понятнее…
+6
JustLuckyGuy #
Эту вроде еще проще сломать. Выделяем куски, которые не двигаются и все. Дальше — дело техники.
НЛО прилетело и опубликовало эту надпись здесь
0
otaqsun #
Легко обходится, берется кадр если гифка, и все как со статичной версией.
Думаю со флешем тоже можно что-либо придумать, к тому же многие не любят флеш, поэтому флеш-каптчи не получили распространения.
+1
maseal #
Милая, но совершенно бесполезная штучка.
Роботом распарсить проще чем большинство 2D-капч. Разве что так, чисто для души проектик
0
MadJeck #
Легко ломается, двигающиеся куски выделяем, удаляем — потом обратное преобразование и получаем плоскую картинку с читаемыми символами. Оригинал — надежнее.
+27
staleo #
Вы — такой умный — будете четвертым в списке.

Даешь рекорд на количество повторений одного и того же соображения в каментах!
–14
StopDesign #
Читать комментарии — это слишком скучно.
+1
PoCTo #
Читать одинаковые комментарии — тоже.
–1
eugenius_nsk #
Не понимаю, почему до сих пор никто не написал, что эта капча элементарно обходится — оставляем только неподвижные части и всё!
0
staleo #
Ура! Пятый! Кто больше?

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


Как видите, и углы поворота, и углы наклона, и шрифты разные, и буквы гнутые. Только не надо её анимировать! =)
+1
mrjj #
Краем глаза похоже на распластанную в синих дюнах тушку homo sapiens
+20
nooze #
Долго пытался понять с чего вы так решили, потом понял что картинка всё время разная >_<
+1
Setti #
блюр, контраст, повернуть, распознать :)
0
AlexKolupaev #
удачи. как получится — пишите.
–1
AlexKolupaev #
Здорово это вы за меня решили, кому я и что вышлю…
–2
Mercury13 #
Красиво. И, главное, читабельно.
Но, я думаю, и распознать его будет просто — проще, чем 3d.
–9
1vanu4 #
Автор, Вы просто МЕГО!
НЛО прилетело и опубликовало эту надпись здесь
0
Guria #
это известный глюк хабрапарсера. не любит он отдельно стоящие раскрашенные нули.
+1
xtender #
Сама идея волн и статики замечательная, даже «пятничная» какая-то :)
НЛО прилетело и опубликовало эту надпись здесь
0
YuronN #
Еще добавить движение самих символов наподобие судна в океане :)
–2
crx #
занимательно наблюдать, как автора опустили на землю за 2 минуты.
0
xtender #
Ну просто никак не для капчи это…
0
feci #
нло поработит мир!!! =))
+1
SwampRunner #
оу мэн, морская болезнь
–2
AxisPod #
А где тут собственно 4D? Анимация имхо это далеко не 4D. Да и плюс анимация дала возможность сломать капчу мгновенно, определить неподвижные вершины будет несложно и соответственно буковки есть.
–1
Mystex #
Магия!
0
amxm #
Смысл загоняться если капчи сейчас распазнаются людьми, есть целые сервисы.
+3
justabaka #
Идея интересная, но, как уже было сказано выше, боту так будет намного проще отсечь все ненужное.

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

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

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

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

Как упражнение в элементарной графике — забавно. Но как капча — никуда не годится.
0
bungu #
Ваша капча при взломе не сложнее остальных, даже легче
1)Символы каждый раз выдаются под одинаковым углом
2)Берем, скачиваем картинку, прогоняем ее и смотрим какие пиксели меняют положение при смене гиф-кадра
3)«Выдираем» координаты эталонных «Неменяющихся» пикселей
4) Сравниваем полученные с эталонными
5) В итоге — капча декодирована
НЛО прилетело и опубликовало эту надпись здесь
0
michurin #
Не сдал матан — пошёл на метан.
— Народная мудрость (ничего личного :-))
–5
ognevsky #
Охуенно, ящетаю!
+2
homm #
Да вы с ума сошли, капча в 640 Kб! :)
+4
tass #
Вот видите 640кб хватит даже на капчу, один-неизвестный-человек был прав в свое время)
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
+1
johnnythekid #
пока писал ниже свой комент, вы выразили мою мысль на практике.
+2
johnnythekid #
Думаю, будете четыредэшнее, если все это волнистое море будет немного вращаться или еще как-то волноваться. Тогда хакерские коменты «двигающиеся куски выделяем, удаляем» придется тоже апгрейдить.
А еще можно было бы, отображая вот так 3-мерно символы, показывать их по очереди, или «бегущей строкой»
–1
VYBGSS #
Так боты будут смотреть, которые пиксели не двигаются, и все, получаем 2D. Но идея, конечно, очень интересная :).
+1
Qkish #
зато смотрится шикарно :)
НЛО прилетело и опубликовало эту надпись здесь
+1
m0Hze #
А мне понравилось.Люблю инновации.
+1
spelesto #
Код также прилагается:


А не могли бы вы выложить исходник куда-нибудь (например на _dumpz.org). Спасибо
+3
KAndy #
0
spelesto #
+1 Спасибо!
+1
kns #
До тех пор, пока эту капчу не начнут использовать на сайтах, ничего против не имею. Красиво. :)
0
Googlus #
Реально «сильная» штука… по крайней мере для человека.
0
michurin #
вот только для компьютера — слабая
0
Boomburum #
Жму Вашу руку — очень интересно и необычно ) не знаю, правда, насколько практично )
+8
Ryotsuke #
Капча-мечта-DDOS-ера :)
+2
KAndy #
О, Вы явно попробовали запустить…
0
art_tk #
С анимацией, можно сделать энное количество кадров, в одном из которых будет «капча», а остальные для запутывания. :) Только ужасно всё это.
0
iQuaRoll #
пока тут происходит аукцион быстрых ломателей такой капчи, я немного отвлекусь от их прикидок. предположу, что если сделать символы тоже колеблющимися, то можно сохранить хорошую читаемость для людей, но сложность взлома возрастет в разы. быстрые ломатели, наверное, тоже найдутся, но почему то мне кажется что это будут не программисты, а индусы.

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

Чудесная штука.
0
SerJook #
Анимированная каптча в файле с расширением .JPG — это чтобы боты не догадались?
0
bar_boss #
Тоже анимированная каптча, только весит 13 кб
www.superlovers.ru/captcha
0
max7 #
Очевидно же, что буква тоже должны «плавать». Кеп.
0
ruguevara #
Правильно, иначе можно наложить по and все кадры, и останутся только буквы. И какой тогда смысл в этом всем?
–1
valCooL #
Я бы плюсанул, да злое НЛО не дает заряда!
–1
j3d1 #
эту будет боту распознать даже проще чем статичную, за счет того что можно сразу удалить фон
0
Rodman #
Занятная капча. По крайней мере четабельна, в отличии от некоторых индивидуумов этой «породы»!
0
Avanti #
Индусов-вбивальщиков еще никто не отменял=)
НЛО прилетело и опубликовало эту надпись здесь
0
kovyrlo #
не ваших рук дело?
мегафон смс

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