ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Работа с Капчей и Антикапчей на примере mts.com.ua [в виде урока]
  #1  
Старый 15.07.2009, 14:53
b3
Постоянный
Регистрация: 05.12.2004
Сообщений: 647
Провел на форуме:
1698585

Репутация: 818


Отправить сообщение для b3 с помощью ICQ
По умолчанию Работа с Капчей и Антикапчей на примере mts.com.ua [в виде урока]

Статья расчитана на новичков, желающих понять как работать с капчей и сервисом Антикапча. И так делать было нечего, решил посмотреть на сервис Антикапчи, заодно подкину Инвайт: fb9ac24a58. Цель выбрал сайт Украинского Мобильного Оператора MTC, скрипт отправки СМС - http://www.mts.com.ua/ukr/sendsms.php
Вообщем дальше исходники и коментарии к ним:

Файл mts.php
PHP код:
<?php
$ua 
'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.4) Gecko/2008102920 AdCentriaIM/1.7 Firefox/3.0.4';
$ch curl_init('http://www.mts.com.ua/ukr/sendsms.php');
    
curl_setopt($chCURLOPT_USERAGENT$ua);
    
curl_setopt($chCURLOPT_HEADER1);
    
curl_setopt($chCURLOPT_NOBODY0);
    
curl_setopt($chCURLOPT_REFERER'http://www.mts.com.ua/ukr/sendsms.php');
    
curl_setopt($chCURLOPT_RETURNTRANSFER1);
    
$res curl_exec($ch);
curl_close($ch);
### Func ###
function get_session($var)
{
preg_match('#PHPSESSID=(.*);#',$var,$matches);
$session $matches[1];
return 
$session;    
}
############
$session get_session($res);

if(
preg_match('#captcha\.php\?PHPSESSID=(.*)&rnd=(.*)" alt="Код"#',$res,$matches))
    {
    
$rnd $matches[2];
    
$ch curl_init("http://www.mts.com.ua/back/modules/golden/captcha.php?PHPSESSID=$session&rnd=$rnd");
    
curl_setopt($chCURLOPT_USERAGENT$ua);
    
curl_setopt($chCURLOPT_COOKIE'PHPSESSID='.$session);
    
curl_setopt($chCURLOPT_REFERER'http://www.mts.com.ua/ukr/sendsms.php');
    
curl_setopt($chCURLOPT_RETURNTRANSFER1);
    
$res curl_exec($ch);
    
curl_close($ch);
    
file_put_contents('cap.jpg',$res);
}

#######################################
function recognize($filename$apikey$is_verbose true$rtimeout 3$mtimeout 200$is_phrase 0$is_regsense 0$is_numeric 0$min_len 0$max_len 0)
{
    if (!
file_exists($filename))
    {
        if (
$is_verbose) echo "file $filename not found\n";
        return 
false;
    }
    
$postdata = array(
        
'method'    => 'post'
        
'key'       => $apikey
        
'file'      => '@'.$filename//полный путь к файлу
        
'phrase'    => $is_phrase,
        
'regsense'    => $is_regsense,
        
'numeric'    => $is_numeric,
        
'min_len'    => $min_len,
        
'max_len'    => $max_len,
        
    );
    
$ch curl_init();
    
curl_setopt($chCURLOPT_URL,             'http://ac-service.info/in.php');
    
curl_setopt($chCURLOPT_RETURNTRANSFER,     1);
    
curl_setopt($chCURLOPT_TIMEOUT,             60);
    
curl_setopt($chCURLOPT_POST,                 1);
    
curl_setopt($chCURLOPT_POSTFIELDS,         $postdata);
    
$result curl_exec($ch);
    if (
curl_errno($ch)) 
    {
        if (
$is_verbose) echo "CURL returned error: ".curl_error($ch)."\n";
        return 
false;
    }
    
curl_close($ch);
    if (
strpos($result"ERROR")!==false)
    {
        if (
$is_verbose) echo "server returned error: $result\n";
        return 
false;
    }
    else
    {
        
$ex explode("|"$result);
        
$captcha_id $ex[1];
        if (
$is_verbose) echo "ID $captcha_id \n";
        
$waittime 0;
        if (
$is_verbose) echo "<br>sleep $rtimeout \n";
        
sleep($rtimeout);
        while(
true)
        {
            
$result file_get_contents('http://ac-service.info/res.php?key='.$apikey.'&action=get&id='.$captcha_id);
            if (
strpos($result'ERROR')!==false)
            {
                if (
$is_verbose) echo "server returned error: $result\n";
                return 
false;
            }
            if (
$result=="CAPCHA_NOT_READY")
            {
                if (
$is_verbose) echo "<br>captcha is not ready yet\n";
                
$waittime += $rtimeout;
                if (
$waittime>$mtimeout
                {
                    if (
$is_verbose) echo "<br>timelimit ($mtimeout) hit\n";
                    break;
                }
                if (
$is_verbose) echo "<br>waiting for $rtimeout seconds\n";
                
sleep($rtimeout);
            }
            else
            {
                
$ex explode('|'$result);
                if (
trim($ex[0])=='OK') return trim($ex[1]);
                echo 
'<br>'.$ex[1];
            }
        }
        
        return 
false;
    }
}
#######################################
$captcha=recognize($_SERVER['DOCUMENT_ROOT'].'cap.jpg','e49c7453ae....ca85ec7661',true);
$nocache rand(1,9999999);
echo 
'<br>
<img src="cap.jpg?'
.$nocache.'"><br>
<form method="post" enctype="application/x-www-form-urlencoded" action="go.php">
<input type="text" name="txt" value="'
.$captcha.'">
<input type="hidden" name="session" value="'
.$session.'">
<input type="hidden" name="captcha" value="'
.$captcha.'">
<input type="submit">
</form>'
;    
exit;    
?>
Файл go.php
PHP код:
<?php
$operator 
'38050';
$mobile '1234567';
$ua 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.4) Gecko/2008102920 AdCentriaIM/1.7 Firefox/3.0.4';
$captcha $_POST['captcha'];
$session $_POST['session'];
$txt $_POST['txt'];
###
$ch curl_init('http://www.mts.com.ua/back/modules/sms/db_sms.php');
    
curl_setopt($chCURLOPT_USERAGENT$ua);
    
curl_setopt($chCURLOPT_REFERER"http://www.mts.com.ua/ukr/sendsms.php?sms_message=1&sms_network1=$operator&sms_network2=&sms_network3=&sms_phone1=$mobile&sms_phone2=&sms_phone3=&sms_mess=$txt&sms_translit=&sms_lang=lat");
    
curl_setopt($chCURLOPT_COOKIE'PHPSESSID='.$session.';');
    
curl_setopt($chCURLOPT_POST1);
    
curl_setopt($chCURLOPT_POSTFIELDS"script=%2Fukr%2Fsendsms.php&sms_tag_id=3&network1=$operator&phone1=$mobile&message=$txt&lang=lat&captcha=$captcha");
    
curl_setopt($chCURLOPT_RETURNTRANSFER0);
        
$res curl_exec($ch);
curl_close($ch);
?>
Коменты к файлу mts.php:
PHP код:
$ua 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.4) Gecko/2008102920 AdCentriaIM/1.7 Firefox/3.0.4';
$ch curl_init('http://www.mts.com.ua/ukr/sendsms.php');
    
curl_setopt($chCURLOPT_USERAGENT$ua);
    
curl_setopt($chCURLOPT_HEADER1);
    
curl_setopt($chCURLOPT_NOBODY0);
    
curl_setopt($chCURLOPT_REFERER'http://www.mts.com.ua/ukr/sendsms.php');
    
curl_setopt($chCURLOPT_RETURNTRANSFER1);
    
$res curl_exec($ch);
curl_close($ch); 
Данную часть кода думаю не стоит коментировать, обыкновенный cURL посредством которого мы заходим на страничку http://www.mts.com.ua/ukr/sendsms.php

PHP код:
### Func ###
function get_session($var)
{
preg_match('#PHPSESSID=(.*);#',$var,$matches);
$session $matches[1];
return 
$session;    
}
############
$session get_session($res); 
Функция получения PHPSESSID при помощи регулярного выражения: '#PHPSESSID=(.*);#' Данная сессия будет использована в процессе всего скрипта, важная чать(!).

Далее как вы видите в свойстве капчи :
Цитата:
http://www.mts.com.ua/back/modules/golden/captcha.php?PHPSESSID=b0fe7e38a0436635ec616b83cd93 cdbe&rnd=1998968323
мы имеем еще помимо PHPSESSID переменную rnd=1998968323, видимо какойто рандомчик, неважно, сейчас мы его отпарсим на всякий случай:
PHP код:
if(preg_match('#captcha\.php\?PHPSESSID=(.*)&rnd=(.*)" alt="Код"#',$res,$matches))
    {
    
$rnd $matches[2];
    
$ch curl_init("http://www.mts.com.ua/back/modules/golden/captcha.php?PHPSESSID=$session&rnd=$rnd");
    
curl_setopt($chCURLOPT_USERAGENT$ua);
    
curl_setopt($chCURLOPT_COOKIE'PHPSESSID='.$session);
    
curl_setopt($chCURLOPT_REFERER'http://www.mts.com.ua/ukr/sendsms.php');
    
curl_setopt($chCURLOPT_RETURNTRANSFER1);
    
$res curl_exec($ch);
    
curl_close($ch);
    
file_put_contents('cap.jpg',$res);

Как видите парсим при помощи регулярного выражения:
Цитата:
#captcha\.php\?PHPSESSID=(.*)&rnd=(.*)" alt="Код"#
И важно парсить страничку уже с нашей сессией которую мы получили при помощи функции get_session($var) :
PHP код:
curl_setopt($chCURLOPT_COOKIE'PHPSESSID='.$session); 
Теперь составляем URL к капче уже с внесенной сессией в ссылку и отпарсеной переменной rnd:
PHP код:
$ch curl_init("http://www.mts.com.ua/back/modules/golden/captcha.php?PHPSESSID=$session&rnd=$rnd"); 
Результат (т.е. капчу) сохраняем в отдельный файл:
PHP код:
$res curl_exec($ch);
    
curl_close($ch);
    
file_put_contents('cap.jpg',$res); 
Теперь может открыть папку и увидеть саму капчу в файле cap.jpg
Дальше идет функция от самого сервиса Антикапчи по получению текста с картинки, тут без коментариев:
PHP код:
function recognize($filename$apikey$is_verbose true$rtimeout 3$mtimeout 200$is_phrase 0$is_regsense 0$is_numeric 0$min_len 0$max_len 0)
{
    if (!
file_exists($filename))
    {
        if (
$is_verbose) echo "file $filename not found\n";
        return 
false;
    }
    
$postdata = array(
        
'method'    => 'post'
        
'key'       => $apikey
        
'file'      => '@'.$filename//полный путь к файлу
        
'phrase'    => $is_phrase,
        
'regsense'    => $is_regsense,
        
'numeric'    => $is_numeric,
        
'min_len'    => $min_len,
        
'max_len'    => $max_len,
        
    );
    
$ch curl_init();
    
curl_setopt($chCURLOPT_URL,             'http://ac-service.info/in.php');
    
curl_setopt($chCURLOPT_RETURNTRANSFER,     1);
    
curl_setopt($chCURLOPT_TIMEOUT,             60);
    
curl_setopt($chCURLOPT_POST,                 1);
    
curl_setopt($chCURLOPT_POSTFIELDS,         $postdata);
    
$result curl_exec($ch);
    if (
curl_errno($ch)) 
    {
        if (
$is_verbose) echo "CURL returned error: ".curl_error($ch)."\n";
        return 
false;
    }
    
curl_close($ch);
    if (
strpos($result"ERROR")!==false)
    {
        if (
$is_verbose) echo "server returned error: $result\n";
        return 
false;
    }
    else
    {
        
$ex explode("|"$result);
        
$captcha_id $ex[1];
        if (
$is_verbose) echo "ID $captcha_id \n";
        
$waittime 0;
        if (
$is_verbose) echo "<br>sleep $rtimeout \n";
        
sleep($rtimeout);
        while(
true)
        {
            
$result file_get_contents('http://ac-service.info/res.php?key='.$apikey.'&action=get&id='.$captcha_id);
            if (
strpos($result'ERROR')!==false)
            {
                if (
$is_verbose) echo "server returned error: $result\n";
                return 
false;
            }
            if (
$result=="CAPCHA_NOT_READY")
            {
                if (
$is_verbose) echo "<br>captcha is not ready yet\n";
                
$waittime += $rtimeout;
                if (
$waittime>$mtimeout
                {
                    if (
$is_verbose) echo "<br>timelimit ($mtimeout) hit\n";
                    break;
                }
                if (
$is_verbose) echo "<br>waiting for $rtimeout seconds\n";
                
sleep($rtimeout);
            }
            else
            {
                
$ex explode('|'$result);
                if (
trim($ex[0])=='OK') return trim($ex[1]);
                echo 
'<br>'.$ex[1];
            }
        }
        
        return 
false;
    }

Функция на офф сайте: http://ac-service.info/curl.txt
Теперь вызываем саму функцию:
PHP код:
$captcha=recognize($_SERVER['DOCUMENT_ROOT'].'cap.jpg','e49c74........661',true); 
У нас она принимает параметры - Полный путь к картинке, ключь пользователя Антикапчи, Коментарии(включить/выключить)
Полное описание параметров принимаемых функцией читайте тут - http://ac-service.info/curl.txt или же ниже =)
Цитата:
/*
$filename - полный путь к файлу
$apikey - ключ для работы
$rtimeout - задержка между опросами статуса капчи
$mtimeout - время ожидания ввода капчи

включить/выключить verbose mode (комментирование происходящего):
$is_verbose - false(выключить), true(включить)

дополнительно (дефолтные параметры править не нужно без необходимости):
$is_phrase - 0 либо 1 - флаг "в капче 2 и более слов"
$is_regsense - 0 либо 1 - флаг "регистр букв в капче имеет значение"
$is_numeric - 0 либо 1 - флаг "капча состоит только из цифр"
$min_len - 0 (без ограничений), любая другая цифра указывает минимальную длину текста капчи
$max_len - 0 (без ограничений), любая другая цифра указывает максимальную длину текста капчи

пример:
$text=recognize("/path/to/file/captcha.jpg","ваш_ключ_из_админки" ,true);

$text=recognize("/path/to/file/captcha.jpg","ваш_ключ_из_админки" ,false); //отключено комментирование

$text=recognize("/path/to/file/captcha.jpg","ваш_ключ_из_админки" ,false,1,0,0,5); //отключено комментирование, капча состоит из двух слов, общая минимальная длина равна 5 символам

*/
Дальше выводим саму капчу:
PHP код:
$nocache rand(1,9999999);
echo 
'<br>
<img src="cap.jpg?'
.$nocache.'"><br> 
Переменная $nocache генерирует случайное число в дипозоне, для того чтоб мы добавили его в путь картинки, ето предотвратит кэширование изображения выводимого в браузер. Теперь при просмотре капчи в браузере ссылка будет примерно такого вида:
Цитата:
_http://localhost/cap.jpg?5957336
Финальная часть етого файла - это вывод формы отправки СМС:
PHP код:
<form method="post" enctype="application/x-www-form-urlencoded" action="go.php">
<
input type="text" name="txt" value="'.$captcha.'">
<
input type="hidden" name="session" value="'.$session.'">
<
input type="hidden" name="captcha" value="'.$captcha.'">
<
input type="submit">
</
form>';    
exit;    
?> 
В поле ввода сообщения будет введет код капчи, тоесть скрипт будет слать на указаный номер код капчи которую он сам распознает при помощи сервиса Антикапча.
Коменты к файлу go.php:
PHP код:
$operator '38050';
$mobile '1234567';
$ua 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.4) Gecko/2008102920 AdCentriaIM/1.7 Firefox/3.0.4';
$captcha $_POST['captcha'];
$session $_POST['session'];
$txt $_POST['txt']; 
Коментарии излишни, единственное ето две перменные:
Цитата:
$operator - код оператора 38050, 38066, 38095, 38099
$mobile - номер мобильного телефона без кода оператора.
Забыл добавить что данный файл ето обработчик формы предыдущего файла.
Следующая часть кода ето отправка Пост пакета с заполненой формой - оператор, мобильный номер, текст, капча:
PHP код:
$ch curl_init('http://www.mts.com.ua/back/modules/sms/db_sms.php');
    
curl_setopt($chCURLOPT_USERAGENT$ua);
    
curl_setopt($chCURLOPT_REFERER"http://www.mts.com.ua/ukr/sendsms.php?sms_message=1&sms_network1=$operator&sms_network2=&sms_network3=&sms_phone1=$mobile&sms_phone2=&sms_phone3=&sms_mess=$txt&sms_translit=&sms_lang=lat");
    
curl_setopt($chCURLOPT_COOKIE'PHPSESSID='.$session.';');
    
curl_setopt($chCURLOPT_POST1);
    
curl_setopt($chCURLOPT_POSTFIELDS"script=%2Fukr%2Fsendsms.php&sms_tag_id=3&network1=$operator&phone1=$mobile&message=$txt&lang=lat&captcha=$captcha");
    
curl_setopt($chCURLOPT_RETURNTRANSFER0);
        
$res curl_exec($ch);
curl_close($ch); 
Скрипт принимающий заполненую форму:
PHP код:
$ch curl_init('http://www.mts.com.ua/back/modules/sms/db_sms.php'); 
Как видите специфический Реферер, с параметрами:
PHP код:
curl_setopt($chCURLOPT_REFERER"http://www.mts.com.ua/ukr/sendsms.php?sms_message=1&sms_network1=$operator&sms_network2=&sms_network3=&sms_phone1=$mobile&sms_phone2=&sms_phone3=&sms_mess=$txt&sms_translit=&sms_lang=lat"); 
Сессия, полученая с предыдущего файла в HIDDEN поле:
PHP код:
curl_setopt($chCURLOPT_COOKIE'PHPSESSID='.$session.';'); 
А вот и скрытые поля из формы:
PHP код:
<input type="hidden" name="session" value="'.$session.'">
<
input type="hidden" name="captcha" value="'.$captcha.'"
В них как видите передается распознаный текст капчи и сессия.
Далее сам POST пакет:
PHP код:
curl_setopt($chCURLOPT_POST1);
    
curl_setopt($chCURLOPT_POSTFIELDS"script=%2Fukr%2Fsendsms.php&sms_tag_id=3&network1=$operator&phone1=$mobile&message=$txt&lang=lat&captcha=$captcha"); 
Вот и все. Надеюсь кому-то поможет в начинаниях при работе с капчей.

Последний раз редактировалось b3; 15.07.2009 в 15:00..
 
Ответить с цитированием

  #2  
Старый 15.07.2009, 15:06
.antibiotic.
[bald man]
Регистрация: 13.07.2009
Сообщений: 623
Провел на форуме:
4490909

Репутация: 1167


По умолчанию

клево расписано , надо будет попробовать)
там разве ограничений по айпи нету?
 
Ответить с цитированием

  #3  
Старый 15.07.2009, 15:16
b3
Постоянный
Регистрация: 05.12.2004
Сообщений: 647
Провел на форуме:
1698585

Репутация: 818


Отправить сообщение для b3 с помощью ICQ
По умолчанию

Помоему нет, я себе штук 15 СМСок точно отправил.
 
Ответить с цитированием

  #4  
Старый 15.07.2009, 15:20
mailbrush
Познавший АНТИЧАТ
Регистрация: 24.06.2008
Сообщений: 1,996
Провел на форуме:
6075534

Репутация: 2731


Отправить сообщение для mailbrush с помощью ICQ
По умолчанию

Вообще то есть класс для работы с антикапчей.
http://pastebin.com/m77e9cf7
 
Ответить с цитированием

  #5  
Старый 15.07.2009, 15:25
eLWAux
Members of Antichat - Level 5
Регистрация: 15.06.2008
Сообщений: 941
Провел на форуме:
5111568

Репутация: 2399


Отправить сообщение для eLWAux с помощью ICQ
По умолчанию

регулярку
Код:
'#captcha\.php\?PHPSESSID=(.*)&rnd=(.*)" alt="Код"#'
можна немного оптимизировать
Код:
'#PHPSESSID=([a-f0-9]+)&rnd=(\d+)#'
з.ы.:
АК на перле от Каими: http://kaimi.ru/2009/05/anticaptcha-perl/
 
Ответить с цитированием

  #6  
Старый 15.07.2009, 15:53
b3
Постоянный
Регистрация: 05.12.2004
Сообщений: 647
Провел на форуме:
1698585

Репутация: 818


Отправить сообщение для b3 с помощью ICQ
По умолчанию

Можно было много чего оптимизировать, но т.к. с расчетом на новичка нестал заморачиваться, а так можно было все сделать на функциях, классе.
 
Ответить с цитированием

  #7  
Старый 17.07.2009, 14:44
Gaus
Участник форума
Регистрация: 08.02.2009
Сообщений: 196
Провел на форуме:
1420275

Репутация: 127
По умолчанию

Писал спаммер\флудер давно, тоже через mts.com.ua ток на перле
З.Ы. Там ограничений вроде нет, пару сотен смс отправил с одного ИП, вроде норм все

Последний раз редактировалось Gaus; 17.07.2009 в 14:46..
 
Ответить с цитированием

  #8  
Старый 17.07.2009, 17:18
Chrome~
Постоянный
Регистрация: 13.12.2008
Сообщений: 354
Провел на форуме:
1747641

Репутация: 175
Отправить сообщение для Chrome~ с помощью ICQ
По умолчанию

Спасибо, мне будет очень полезно прочитать.
 
Ответить с цитированием

  #9  
Старый 18.07.2009, 17:57
Chrome~
Постоянный
Регистрация: 13.12.2008
Сообщений: 354
Провел на форуме:
1747641

Репутация: 175
Отправить сообщение для Chrome~ с помощью ICQ
По умолчанию

Цитата:
Сообщение от b3  
А вот и скрытые поля из формы:
PHP код:
<input type="hidden" name="session" value="'.$session.'">
<
input type="hidden" name="captcha" value="'.$captcha.'"
В них как видите передается распознаный текст капчи и сессия.
Далее сам POST пакет:
PHP код:
curl_setopt($chCURLOPT_POST1);
    
curl_setopt($chCURLOPT_POSTFIELDS"script=%2Fukr%2Fsendsms.php&sms_tag_id=3&network1=$operator&phone1=$mobile&message=$txt&lang=lat&captcha=$captcha"); 
Ты забыл дописать параметр session в POST запросе. Или нет?
 
Ответить с цитированием

  #10  
Старый 18.07.2009, 19:23
b3
Постоянный
Регистрация: 05.12.2004
Сообщений: 647
Провел на форуме:
1698585

Репутация: 818


Отправить сообщение для b3 с помощью ICQ
По умолчанию

Нет =) Он передается в куках, смотри полностью листинг файла go.php
PHP код:
curl_setopt($chCURLOPT_COOKIE'PHPSESSID='.$session.';'); 
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Набор флешек в виде героев «Звездных Войн» Aikaram Новости мира "железа" 0 08.07.2009 14:41



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ