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

Discussion in 'PHP' started by Go0o$E, 23 Feb 2009.

  1. Go0o$E

    Go0o$E Members of Antichat

    Joined:
    27 Jan 2006
    Messages:
    304
    Likes Received:
    228
    Reputations:
    419
    Сайт: 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 строчки мне помог написать Онотоле...
     
    #1 Go0o$E, 23 Feb 2009
    Last edited: 24 Feb 2009
    5 people like this.
  2. _==wolf==_

    _==wolf==_ Elder - Старейшина

    Joined:
    29 May 2008
    Messages:
    127
    Likes Received:
    38
    Reputations:
    6
    спасибо огромное! особенно радует то что слово сайт в множественном числе и присутствует ключевое слово РАЗЛИЧНЫХ = скоро появятся ещё распознавалки!
     
  3. mr.The

    mr.The Elder - Старейшина

    Joined:
    30 Apr 2007
    Messages:
    1,080
    Likes Received:
    456
    Reputations:
    38
    имхо это был тонкий намёк автора, на "переделайте и будет вам щастье."
     
  4. Chaak

    Chaak Elder - Старейшина

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    Бред вообще по способу Nomer1 круче получается
    А вообще это трудная работа выставлять попиксельно картинки. Ну не для php она!
     
    #4 Chaak, 23 Feb 2009
    Last edited: 23 Feb 2009
  5. Go0o$E

    Go0o$E Members of Antichat

    Joined:
    27 Jan 2006
    Messages:
    304
    Likes Received:
    228
    Reputations:
    419
    2 mr.The
    Вообще я собираюсь продолжить эту тему и если есть предложения или идеи, пишите их.
    // Переделать этот скрипт под легкие капчи действительно не составит труда)
     
  6. -Hormold-

    -Hormold- Кто, если не ты?

    Joined:
    29 Sep 2007
    Messages:
    418
    Likes Received:
    290
    Reputations:
    44
    Странно, вообще не работает...
     
  7. mr.The

    mr.The Elder - Старейшина

    Joined:
    30 Apr 2007
    Messages:
    1,080
    Likes Received:
    456
    Reputations:
    38
    я тоже этим занимаюсь потихоньку.. щас застрял на алгоритме скелетизации. всё готово на бумаге, осталось перенести в код и затестить. дальше планирую юзать ИИ.
     
  8. Chaak

    Chaak Elder - Старейшина

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    А ничего если капчу развернуть и немного сделать мутной? Алгортимы будут работать?
    -Если и будут, то уж никак не быстро
     
    3 people like this.
  9. fatalo

    fatalo Elder - Старейшина

    Joined:
    15 May 2008
    Messages:
    45
    Likes Received:
    46
    Reputations:
    5
    Go0o$E,а можно откомментировать код?
     
  10. syava

    syava Member

    Joined:
    4 Feb 2009
    Messages:
    16
    Likes Received:
    7
    Reputations:
    0
    элементарный подсчёт пикселей...
     
  11. fatalo

    fatalo Elder - Старейшина

    Joined:
    15 May 2008
    Messages:
    45
    Likes Received:
    46
    Reputations:
    5
    syava,может быть ты прокомментируешь строки новичку?
     
  12. DDoSька

    DDoSька Elder - Старейшина

    Joined:
    5 May 2008
    Messages:
    317
    Likes Received:
    352
    Reputations:
    18
    ясно , что у php результаты будут не из лучших...
    ЗЫ: По-моему, разбор по пикселям обязателен, без него никак =)
     
  13. mr.The

    mr.The Elder - Старейшина

    Joined:
    30 Apr 2007
    Messages:
    1,080
    Likes Received:
    456
    Reputations:
    38
    можно ИИ приделать)
    хотя фильтровать картинку от мусора, всё равно php должен.
     
  14. DDoSька

    DDoSька Elder - Старейшина

    Joined:
    5 May 2008
    Messages:
    317
    Likes Received:
    352
    Reputations:
    18
    Хз, что такое ИИ , только наталкивает на "Искусственный Интелект"
     
  15. Trieg

    Trieg Elder - Старейшина

    Joined:
    26 Oct 2007
    Messages:
    82
    Likes Received:
    9
    Reputations:
    0
    наверно он имеет ввиду что то типа нейронной сети хемминга
     
  16. syava

    syava Member

    Joined:
    4 Feb 2009
    Messages:
    16
    Likes Received:
    7
    Reputations:
    0
    начиная слева сверху в двух вложенных циклах проходим по картинке, если цвет темный то это кусок буквы, делаем счетчику +1, если прошли вертикальную строку и там темного цвета нет, то буква закончилась, начинаем отсчет для новой, в конце в ассоциативном массиве у нас сколько пикселей в какой букве, по нему получаем код на капче, вот всё.
     
    1 person likes this.
  17. heretic1990

    heretic1990 Elder - Старейшина

    Joined:
    2 Jul 2008
    Messages:
    487
    Likes Received:
    182
    Reputations:
    5
    у меня не хочет распознавать((
     
  18. CePry4oB

    CePry4oB Elder - Старейшина

    Joined:
    24 Nov 2007
    Messages:
    95
    Likes Received:
    61
    Reputations:
    0
    Спасибо.
     
    1 person likes this.
  19. BlackSun

    BlackSun Banned

    Joined:
    1 Apr 2007
    Messages:
    989
    Likes Received:
    1,168
    Reputations:
    446
    Всё пашет, распознает без ошибок) покраней мере у меня ..

    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 для летитбита, кому самому лень писать
    Code:
    var url = 'http://localhost/letitbit.php?url=' + escape(document.location);
    document.write("<a href='" + url + "'>Get link</a>");
    
    Автоматический редирект сделать не получилось, опера начала матюгаться не понятно на что =\
     
    1 person likes this.