PDA

Просмотр полной версии : Распознавание captcha на различных сайтах


Go0o$E
23.02.2009, 04:41
Сайт: letitbit.net

Распознавание:

$img = imagecreatefromjpeg("code.jpg"); // Загружаем изображение
$x = imagesx($img); // Ширина изображения
$y = imagesy($img); // Высота изображения
$black = imagecolorallocate ($img, 0, 0, 0); // Индификатор черного цвета
$color = imagecolorallocate ($img, 150, 150, 150); // Индификатор цвета немного темнее чем шум
for ($i=0;$i<$x;$i++){
for ($j=0;$j<$y;$j++){
if (imagecolorat($img,$i, $j) <= $color){ // Если цвет пикселя темнее чем шум, значит это символ
imagesetpixel($img,$i, $j, $black); // Тогда заменяем его черным цветом
}
}}

$sdn=4; $sdk=13; // Границы 1 символа
$res = array();
for ($i=1;$i<=6;$i++){
$count=0;
for ($x=$sdn;$x<$sdk;$x++){
for ($y=4;$y<=15;$y++){
if (imagecolorat($img,$x,$y) == $black) { // Если пиксель черный
$count++; // Суммируем его
}
}}
$sdn=$sdk; $sdk+=9; // Меняем координаты для поиска следующего символа
switch ($count){
case 36:{$res[$i] = "0";break;} // Если количество черных пикселей 36, то это 0
case 27:{$res[$i] = "1";break;} // ...
case 32:{$res[$i] = "2";break;}
case 31:{
if (imagecolorat($img,($x-1),7) == $black) { // Дополнительная проверка
$res[$i] = "3"; } else {
$res[$i] = "e";
} break; }
case 35:{$res[$i] = "4";break;}
case 37:{$res[$i] = "5";break;}
case 39:{
if (imagecolorat($img,($x-1),7) == $black) {
$res[$i] = "9"; } else {
$res[$i] = "6";
} break; }
case 26:{$res[$i] = "7";break;}
case 40:{$res[$i] = "8";break;}
case 33:{$res[$i] = "a";break;}
case 38:{
if (imagecolorat($img,($x-1),5) == $black) {
$res[$i] = "d"; } else {
$res[$i] = "b";
} break; }
case 24:{$res[$i] = "c";break;}
case 30:{$res[$i] = "f";break;}
}}
$code=$res[1].$res[2].$res[3].$res[4].$res[5].$res[6];


Ссылка на скрипт:
letitbit.php.txt (http://pwnt.ru/letitbit.php.txt)
Последние 3 строчки мне помог написать Онотоле...

_==wolf==_
23.02.2009, 11:54
спасибо огромное! особенно радует то что слово сайт в множественном числе и присутствует ключевое слово РАЗЛИЧНЫХ = скоро появятся ещё распознавалки!

mr.The
23.02.2009, 17:51
особенно радует то что слово сайт в множественном числе и присутствует ключевое слово РАЗЛИЧНЫХ = скоро появятся ещё распознавалки!
имхо это был тонкий намёк автора, на "переделайте и будет вам щастье."

Chaak
23.02.2009, 17:58
Бред вообще по способу Nomer1 круче получается
https://forum.antichat.ru/thread60049.html

А вообще это трудная работа выставлять попиксельно картинки. Ну не для php она!

Go0o$E
23.02.2009, 17:59
2 mr.The
Вообще я собираюсь продолжить эту тему и если есть предложения или идеи, пишите их.
// Переделать этот скрипт под легкие капчи действительно не составит труда)

-Hormold-
23.02.2009, 18:00
Странно, вообще не работает...

mr.The
23.02.2009, 18:07
Вообще я собираюсь продолжить эту тему и если есть предложения или идеи, пишите их.
я тоже этим занимаюсь потихоньку.. щас застрял на алгоритме скелетизации. всё готово на бумаге, осталось перенести в код и затестить. дальше планирую юзать ИИ.

Chaak
23.02.2009, 18:14
А ничего если капчу развернуть и немного сделать мутной? Алгортимы будут работать?
-Если и будут, то уж никак не быстро

fatalo
24.02.2009, 00:30
Go0o$E,а можно откомментировать код?

syava
24.02.2009, 00:39
элементарный подсчёт пикселей...

fatalo
24.02.2009, 18:12
syava,может быть ты прокомментируешь строки новичку?

DDoSька
24.02.2009, 18:23
Бред вообще по способу Nomer1 круче получается


А вообще это трудная работа выставлять попиксельно картинки. Ну не для php она!
ясно , что у php результаты будут не из лучших...
ЗЫ: По-моему, разбор по пикселям обязателен, без него никак =)

mr.The
24.02.2009, 19:24
ЗЫ: По-моему, разбор по пикселям обязателен, без него никак =)
можно ИИ приделать)
хотя фильтровать картинку от мусора, всё равно php должен.

DDoSька
24.02.2009, 19:26
Хз, что такое ИИ , только наталкивает на "Искусственный Интелект"

Trieg
25.02.2009, 21:09
наверно он имеет ввиду что то типа нейронной сети хемминга

syava
25.02.2009, 23:22
syava,может быть ты прокомментируешь строки новичку?
начиная слева сверху в двух вложенных циклах проходим по картинке, если цвет темный то это кусок буквы, делаем счетчику +1, если прошли вертикальную строку и там темного цвета нет, то буква закончилась, начинаем отсчет для новой, в конце в ассоциативном массиве у нас сколько пикселей в какой букве, по нему получаем код на капче, вот всё.

heretic1990
26.02.2009, 00:04
у меня не хочет распознавать((

CePry4oB
26.02.2009, 00:23
Спасибо.

BlackSun
26.02.2009, 06:50
Всё пашет, распознает без ошибок) покраней мере у меня ..

PS: привел скрипт к чуть более читаемому виду

<?php
$path = explode("letitbit.net", $_GET['url']);
$thread = '';
if($fsock = fsockopen("letitbit.net", 80, $errno, $errstr, 30))
{
@fputs($fsock, "GET ".$path[1]." HTTP/1.1\r\n");
@fputs($fsock, "Host: letitbit.net\r\n");
@fputs($fsock, "Connection: close\r\n\r\n");
while (!@feof($fsock))
{
$thread .= @fread($fsock, 128);
}
@fclose($fsock);
}
$premium = explode("download3", $thread);
$uidfind = strpos($premium[1], "uid");
$uid2find = strpos($premium[1], "uid2");
$uid = substr($premium[1], ($uidfind + 12), 32);
$uid2 = substr($premium[1], ($uid2find + 13), 12);

$thread = '';
if($fsock = fsockopen("letitbit.net", 80, $errno, $errstr, 30))
{
@fputs($fsock, "GET /cap.php?jpg=".$uid2.".jpg HTTP/1.1\r\n");
@fputs($fsock, "Host: letitbit.net\r\n");
@fputs($fsock, "Connection: close\r\n\r\n");
while (!@feof($fsock))
{
$thread .= @fread($fsock, 128);
}
@fclose($fsock);
}
$html = explode("\r\n\r\n", $thread);
$f = fopen("code.jpg", "w");
fputs($f, substr($html[1], 5));
fclose($f);

////////////////////////////////////////////////////
$img = imagecreatefromjpeg("code.jpg");
$x = imagesx($img);
$y = imagesy($img);
$black = imagecolorallocate ($img, 0, 0, 0);
$color = imagecolorallocate ($img, 150, 150, 150);
for ($i = 0; $i < $x; $i++)
{
for ($j = 0; $j < $y; $j++)
{
if (imagecolorat($img, $i, $j) <= $color)
{
imagesetpixel($img, $i, $j, $black);
}
}
}

$sdn = 4;
$sdk = 13;
$res = array();
for ($i = 1; $i <= 6; $i++)
{
$count = 0;
for ($x = $sdn; $x < $sdk; $x++)
{
for ($y = 4; $y <= 15; $y++)
{
if (imagecolorat($img, $x, $y) == $black)
{
$count++;
}
}
}

$sdn = $sdk;
$sdk += 9;
switch ($count)
{
case 36: { $res[$i] = "0"; break; }
case 27: { $res[$i] = "1"; break; }
case 32: { $res[$i] = "2"; break; }
case 31: {
if (imagecolorat($img, ($x - 1), 7) == $black)
{
$res[$i] = "3";
} else
{
$res[$i] = "e";
}
break;
}
case 35: { $res[$i] = "4"; break; }
case 37: { $res[$i] = "5"; break; }
case 39: {
if (imagecolorat($img, ($x - 1), 7) == $black)
{
$res[$i] = "9";
} else
{
$res[$i] = "6";
}
break;
}
case 26: { $res[$i] = "7"; break; }
case 40: { $res[$i] = "8"; break; }
case 33: { $res[$i] = "a"; break; }
case 38: {
if (imagecolorat($img, ($x - 1), 5) == $black)
{
$res[$i] = "d";
} else
{
$res[$i] = "b";
}
break;
}
case 24: { $res[$i] = "c"; break; }
case 30: { $res[$i] = "f"; break; }
}
}

$code = $res[1].$res[2].$res[3].$res[4].$res[5].$res[6];

////////////////////////////////////////

$thread = "";
$data = "uid=".$uid."&cap=".$code."&frameset=%D1%EA%E0%F7%E0%F2%FC+%F4%E0%E9%EB&uid2=".$uid2."&fix=1";

if($fsock = fsockopen("letitbit.net", 80, $errno, $errstr, 30))
{
@fputs($fsock, "POST /download3.php HTTP/1.1\r\n");
@fputs($fsock, "Host: letitbit.net\r\n");
@fputs($fsock, "Referer: ".$url."\r\n");
@fputs($fsock, "Connection: close\r\n");
@fputs($fsock, "Content-Type: application/x-www-form-urlencoded\r\n");
@fputs($fsock, "Content-Length: ".strlen($data)."\r\n\r\n");
@fputs($fsock, $data);
while (!@feof($fsock))
{
$thread .= @fgetc($fsock);
}
@fclose($fsock);
}

preg_match("/http:\/\/letitbit\.net\/tmpl\/tmpl_frame_top\.php\?link=([^\"]*)\"/", $thread, $m);
echo "<hrml><head><title>letitbit</title></head><body<<center><a href=\"{$m[1]}\">Прямая ссылка</a></center></body></html>";
?>

+ UserJS для летитбита, кому самому лень писать

var url = 'http://localhost/letitbit.php?url=' + escape(document.location);
document.write("<a href='" + url + "'>Get link</a>");

Автоматический редирект сделать не получилось, опера начала матюгаться не понятно на что =\