Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Распознавание captcha на различных сайтах (https://forum.antichat.xyz/showthread.php?t=107565)

Go0o$E 23.02.2009 04:41

Распознавание captcha на различных сайтах
 
Сайт: letitbit.net

Распознавание:
PHP код:

$img imagecreatefromjpeg("code.jpg"); // Загружаем изображение
$x imagesx($img); // Ширина изображения
$y imagesy($img); // Высота изображения
$black imagecolorallocate ($img000); // Индификатор черного цвета
$color imagecolorallocate ($img150150150); // Индификатор цвета немного темнее чем шум 
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
Последние 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

Цитата:

Сообщение от ChaaK
Бред вообще по способу 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

Цитата:

Сообщение от fatalo
syava,может быть ты прокомментируешь строки новичку?

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

heretic1990 26.02.2009 00:04

у меня не хочет распознавать((

CePry4oB 26.02.2009 00:23

Спасибо.

BlackSun 26.02.2009 06:50

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

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

<?php
    $path 
explode("letitbit.net"$_GET['url']);
    
$thread '';
    if(
$fsock fsockopen("letitbit.net"80$errno$errstr30))
    {
        @
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($fsock128);
        }
        @
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$errstr30))
    {
        @
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($fsock128);
        }
        @
fclose($fsock);
    }
    
$html explode("\r\n\r\n"$thread);
    
$f fopen("code.jpg""w");
    
fputs($fsubstr($html[1], 5));
    
fclose($f);

    
////////////////////////////////////////////////////
    
$img imagecreatefromjpeg("code.jpg");
    
$x imagesx($img);
    
$y imagesy($img);
    
$black imagecolorallocate ($img000);
    
$color imagecolorallocate ($img150150150);
    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$errstr30))
    {
        @
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>");

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


Время: 21:40