авторизация в контактах.

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by akimov_aleks, 22 Jun 2010.

  1. akimov_aleks

    akimov_aleks New Member

    Joined:
    3 May 2009
    Messages:
    39
    Likes Received:
    1
    Reputations:
    0
    Сменили же авторизацию...
    если кто не жадный поделитесь.
    переменную S не могу сперового запроса дернуть
    Code:
    http://vkontakte.ru/
    0e9e99d3aec4b53ae2a6fc7d&op
    
     
    #1 akimov_aleks, 22 Jun 2010
    Last edited: 22 Jun 2010
  2. Meecript_

    Meecript_ Banned

    Joined:
    29 Oct 2008
    Messages:
    194
    Likes Received:
    62
    Reputations:
    32
    PHP:
    //---------------------------------------------------------------------------
    int VK::Auth(String sLoginString sPass)
    {
        
    ClearCookie();
        
        
    sUrl "http://vkontakte.ru/login.php";
        
    sRequest "op=a_login_attempt";
        if( !
    Post() )
            return -
    1;

        while( (
    sCaptchaSid TextMid("\"captcha_sid\":\"""\"")).Length() )
        {
            if( !
    GetCaptcha() )
                return -
    8;
            
            
    sCaptcha AntigateCheckCaptcha();
            
    setopt(curlCURLOPT_PROXY sProxy);
            
    setopt(curlCURLOPT_PROXYTYPE prProxyType);        
            
            if(
    sCaptcha.Pos("ERROR") )
                return -
    9;

            
    sUrl "http://vkontakte.ru/login.php";
            
    sRequest =     "op=a_login_attempt&captcha_sid=" +
                        
    sCaptchaSid +
                        
    "&captcha_key=" +
                        
    sCaptcha;
            if( !
    Post() )
                return -
    10;
        }
            
        if(    !
    sPage.Pos("vklogin") )
            return -
    2;

        
    sUrl =    "http://login.vk.com/?act=login";
        
    sRequest "email=" 
                    
    sLogin 
                    
    "&pass=" +
                    
    sPass +
                    
    "&expire=&vk=";
        if( !
    Post() )
            return -
    3;

        
    String s ValueByName("s"'\'');
        if(
    s.IsEmpty())
        {
            if(
    sPage.Pos("Location: http://vkontakte.ru/login.php?m="))
            {
                
    sPage TextMid("Location: http://vkontakte.ru/login.php?m="'&');
                return 
    IsNum(sPage) ? sPage.ToInt() : -4;
            }
            return -
    5;
        }
            
        
    sUrl =    "http://vkontakte.ru/login.php";
        
    sRequest =     "s=" +
                    
    +
                    
    "&op=slogin&redirect=1&expire=0&to=";

        if( !
    Post() )
            return -
    6;
        
        if(    !
    sPage.Pos("Set-Cookie: remixsid=") )
            return -
    7;
        
        
    sCookie TextMid("Set-Cookie: remixsid="';');
        
        return 
    0;
    }
    //---------------------------------------------------------------------------
     
  3. Meecript_

    Meecript_ Banned

    Joined:
    29 Oct 2008
    Messages:
    194
    Likes Received:
    62
    Reputations:
    32
    PHP:
    //---------------------------------------------------------------------------
    String VK::ValueByName(String sNameString sQuote)
    {
        
    String sResult sPage
        
        if(
    sResult.Pos("name=" sQuote sName sQuote))
        {
            
    sResult.Delete(1sResult.Pos("name=" sQuote sName sQuote));

            if(
    sResult.Pos("value=" sQuote))
            {
                
    sResult.Delete(1sResult.Pos("value=" sQuote) + 1);
                
    sResult.SetLength(sResult.Pos(sQuote) - 1);

                return 
    sResult;
            }
        }

        return 
    "";
    }
    //---------------------------------------------------------------------------
    String VK::TextMid(String sLeftString sRight)
    {
        
    String sResult sPage;
        
        if(
    sResult.Pos(sLeft))
        {
            
    sResult.Delete(1sResult.Pos(sLeft) + sLeft.Length() - 1);
            
            if(
    sResult.Pos(sRight))
            {
                
    sResult.SetLength(sResult.Pos(sRight) - 1);
            
                return 
    sResult;
            }
        }
        
        return 
    "";
    }
    //---------------------------------------------------------------------------
     
  4. Refqs

    Refqs Banned

    Joined:
    20 Feb 2010
    Messages:
    139
    Likes Received:
    56
    Reputations:
    27
    PHP:



    data
    .Add('email='+login);
     
    data.Add('pass='+pass); uns:=UTF8toANSI(idhttp1.post('http://login.vk.com/?act=login'data)); 
    s:=copy(unspos('<input type='#39'hidden'#39' name='#39's'#39' value='#39'', uns)+37,  56);


     
    #4 Refqs, 22 Jun 2010
    Last edited: 22 Jun 2010
  5. Meecript_

    Meecript_ Banned

    Joined:
    29 Oct 2008
    Messages:
    194
    Likes Received:
    62
    Reputations:
    32
    PHP:
    //---------------------------------------------------------------------------
    bool VK::GetCaptcha(void)
    {
        
    setopt(curlCURLOPT_POST0);
        
    setopt(curlCURLOPT_HEADER 0);
        
    setopt(curlCURLOPT_WRITEFUNCTIONCaptchaWrite);
        
    setopt(curlCURLOPT_WRITEDATA, (void*)&bufCaptcha);
        
        
    sUrl "http://vkontakte.ru/captcha.php?sid=" +
                
    sCaptchaSid;
        
    bufCaptcha.size 0;
        
    setopt(curlCURLOPT_URLsUrl);
        
    perform(curl);
        
        
    setopt(curlCURLOPT_WRITEFUNCTIONPageWrite);
        
    setopt(curlCURLOPT_WRITEDATA, &sPage);
    //---------------------------------------------------------------------------
     
  6. Meecript_

    Meecript_ Banned

    Joined:
    29 Oct 2008
    Messages:
    194
    Likes Received:
    62
    Reputations:
    32
    PHP:
    //---------------------------------------------------------------------------
    String VK::AntigateCheckCaptcha()
    {
        
    setopt(curlCURLOPT_HEADER 0);
        
    setopt(curlCURLOPT_PROXY "");
        
    setopt(curlCURLOPT_PROXYTYPE HTTP);

        
    struct curl_httppost *post NULL;
        
    struct curl_httppost *last NULL;
        
    formadd(&post, &last,   CURLFORM_COPYNAME"method",   CURLFORM_COPYCONTENTS"post"CURLFORM_END);
        
    formadd(&post, &last,   CURLFORM_COPYNAME"soft_id",   CURLFORM_COPYCONTENTS"5"CURLFORM_END);
        
    formadd(&post, &last,   CURLFORM_COPYNAME"key",   CURLFORM_COPYCONTENTSsAntigateKeyCURLFORM_END);
        
    formadd(&post, &last,   CURLFORM_COPYNAME"file",    CURLFORM_BUFFER"captcha.jpg"
                                
    CURLFORM_BUFFERPTRbufCaptcha.memoryCURLFORM_BUFFERLENGTHbufCaptcha.size,  
                                
    CURLFORM_CONTENTTYPE"image/jpeg"CURLFORM_END);

                        
        
    String sId "";
        
        
    sUrl "http://antigate.com/in.php";
        
    sPage "";
        
    setopt(curlCURLOPT_URLsUrl);
        
    setopt(curlCURLOPT_HTTPPOSTpost);
        
    perform(curl);
        
    setopt(curlCURLOPT_POST0);
        
    formfree(post);

        if(
    sPage.Pos("\r"))
            
    sPage.SetLength(sPage.Pos("\r") - 1);
                
        if(
    sPage.IsEmpty())
            return 
    "ERROR_REPLY_IN";
        else if(
    sPage.Pos("ERROR_"))
            return 
    sPage;
        else if(
    sPage.Pos("OK"))
            
    sId sPage.SubString(sPage.Pos("|") + 1sPage.Length() - sPage.Pos("|"));

        if(
    sId.IsEmpty())
            return 
    "ERROR_BAD_CAPTCHA_ID";
            
        for(
    int i 012; ++i)
        {
            
    Sleep(5000);

            
    sUrl =     "http://antigate.com/res.php?key=" +
                    
    sAntigateKey +
                    
    "&action=get&id=" +
                    
    sId;
            
    sPage "";
            
    setopt(curlCURLOPT_URLsUrl);
            
    perform(curl);

            if(
    sPage.Pos("\r"))
                
    sPage.SetLength(sPage.Pos("\r") - 1);
                
            if(
    sPage.IsEmpty())
                return 
    "ERROR_REPLY_GET";
            else if(
    sPage.Pos("ERROR_"))
                return 
    sPage;
            else if(
    sPage.Pos("OK"))
            {
                
    sPage.Delete(1sPage.Pos("|"));
                return 
    sPage;
            }
        }
        
        return 
    "ERROR_TIMEOUT";
    }
    //---------------------------------------------------------------------------
     
  7. Meecript_

    Meecript_ Banned

    Joined:
    29 Oct 2008
    Messages:
    194
    Likes Received:
    62
    Reputations:
    32
    PHP:
    //---------------------------------------------------------------------------
    static void *cap_realloc(void *ptrsize_t size)
    {
        return 
    ptr realloc(ptrsize) : malloc(size);
    }
    //---------------------------------------------------------------------------
    static size_t CaptchaWrite(void *datasize_t sizesize_t nmembvoid *buffer)
    {
        
    size_t realsize size nmemb;
        
    struct CaptchaBuffer *mem = (struct CaptchaBuffer *)buffer;
        
    mem->memory = (char*)cap_realloc(mem->memorymem->size realsize 1);
        if(
    mem->memory)
        {
            
    memcpy(&(mem->memory[mem->size]), datarealsize);
            
    mem->size += realsize;
            
    mem->memory[mem->size] = 0;
        }
        return 
    realsize;
    }
    //---------------------------------------------------------------------------
     
  8. Meecript_

    Meecript_ Banned

    Joined:
    29 Oct 2008
    Messages:
    194
    Likes Received:
    62
    Reputations:
    32
    Теперь осталось только собрать весь код вместе и перевести на нужный язык =)

    При изменении этой строки работоспособность кода не гарантируется ;)
     
    #8 Meecript_, 22 Jun 2010
    Last edited: 22 Jun 2010
  9. Refqs

    Refqs Banned

    Joined:
    20 Feb 2010
    Messages:
    139
    Likes Received:
    56
    Reputations:
    27
    [​IMG]
     
  10. 1n0y

    1n0y Active Member

    Joined:
    9 May 2009
    Messages:
    276
    Likes Received:
    282
    Reputations:
    2
    тут неверно. вместо 5 надо 101 (%
     
  11. @leks@

    @leks@ New Member

    Joined:
    28 Nov 2009
    Messages:
    32
    Likes Received:
    0
    Reputations:
    0
    Скажите что нетак.....
    сначало заходит потом выкидывает
    Code:
    procedure TForm1.Button1Click(Sender: TObject);
    var
    s,PageProfile:string;
    data,log:tstringlist;
    begin
    IdHTTP1.AllowCookies:=true;
    //IdHTTP1.HandleRedirects:=false;
    data:=TStringList.Create;
    log:=TStringList.Create;
    data.Add('[email protected]');
    data.Add('pass=123456');
    s:=UTF8toANSI(idhttp1.post('http://login.vk.com/?act=login', data));
    x:=copy(s, pos('<input type='#39'hidden'#39' name='#39's'#39' value='#39'', s)+37,  56);
     try
    log.Add('s='+x);
    log.Add('op=slogin');
    log.Add('redirect=1');
    log.Add('expire=0');
    log.Add('to=');
    log.Add('request_method=post');
    PageProfile:=idhttp1.post('http://vkontakte.ru/login.php', log);
    except
     end;
     if Pos('logout', PageProfile)<>0 then
      Memo1.Lines.Add('Авторизация удалась')
     else
      Memo1.Lines.Add('Авторизация не удалась')
    
    end;
    
     
  12. M_script

    M_script Members of Antichat

    Joined:
    4 Nov 2004
    Messages:
    2,581
    Likes Received:
    1,317
    Reputations:
    1,557
    Что значит "выкидывает"?
     
  13. 1n0y

    1n0y Active Member

    Joined:
    9 May 2009
    Messages:
    276
    Likes Received:
    282
    Reputations:
    2
    вобщем-то наличие самого параметра s на странице уже говорит об успешной авторизации, и дальше делать запросы невижу смысла - просто в куки подставляй s и делай свои грязные дела :)
    способ конечно не без подводных камней - например если страница заблокирована за спам, программа будет думать, что страница валидная.. хотя конечно и твой код не отличит заблоченную от валидной :)
     
  14. karp

    karp New Member

    Joined:
    24 Jun 2010
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Авторизацию лучше проходить через wap версию

    Авторизацию лучше проходить через wap версию wap.vkontakte.ru
    Все легко и отлично авторизовывается.
    Вот ИСХОДНИК
    Перехватывает капчу, если лезит капча, то выводит ее в image
     
  15. M_script

    M_script Members of Antichat

    Joined:
    4 Nov 2004
    Messages:
    2,581
    Likes Received:
    1,317
    Reputations:
    1,557
    1) Чем авторизация через вап проще обычной? :confused:
    2) Если в прошлом году, можно было авторизоваться через вап и с теми же куками работать в обычной версии, то сейчас такого нет и работать придется через вап, а это накладывает много ограничений.
    3) IP адреса чаще попадают в блэк.
     
  16. Refqs

    Refqs Banned

    Joined:
    20 Feb 2010
    Messages:
    139
    Likes Received:
    56
    Reputations:
    27
    IdCookieManager1.AddCookie('remixsid='+s+ '; path=/; ','vkontakte.ru');

    и выкидывать не будет
     
  17. akimov_aleks

    akimov_aleks New Member

    Joined:
    3 May 2009
    Messages:
    39
    Likes Received:
    1
    Reputations:
    0
    Сори не понил куда его встовлять
    можешь пример...
     
  18. 1n0y

    1n0y Active Member

    Joined:
    9 May 2009
    Messages:
    276
    Likes Received:
    282
    Reputations:
    2
    кукимэнэджэр не тру
    HTTP.Request.CustomHeaders.Add('Cookie: remixsid=' + s); - труъ :)