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

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 sLogin, String 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(curl, CURLOPT_PROXY , sProxy);
            
    setopt(curl, CURLOPT_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=" +
                    
    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 sName, String sQuote)
    {
        
    String sResult = sPage; 
        
        if(
    sResult.Pos("name=" + sQuote + sName + sQuote))
        {
            
    sResult.Delete(1, sResult.Pos("name=" + sQuote + sName + sQuote));

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

                return 
    sResult;
            }
        }

        return 
    "";
    }
    //---------------------------------------------------------------------------
    String VK::TextMid(String sLeft, String sRight)
    {
        
    String sResult = sPage;
        
        if(
    sResult.Pos(sLeft))
        {
            
    sResult.Delete(1, sResult.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(uns, pos('<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(curl, CURLOPT_POST, 0);
        
    setopt(curl, CURLOPT_HEADER , 0);
        
    setopt(curl, CURLOPT_WRITEFUNCTION, CaptchaWrite);
        
    setopt(curl, CURLOPT_WRITEDATA, (void*)&bufCaptcha);
        
        
    sUrl = "http://vkontakte.ru/captcha.php?sid=" +
                
    sCaptchaSid;
        
    bufCaptcha.size = 0;
        
    setopt(curl, CURLOPT_URL, sUrl);
        
    perform(curl);
        
        
    setopt(curl, CURLOPT_WRITEFUNCTION, PageWrite);
        
    setopt(curl, CURLOPT_WRITEDATA, &sPage);
    //---------------------------------------------------------------------------
     
  6. Meecript_

    Meecript_ Banned

    Joined:
    29 Oct 2008
    Messages:
    194
    Likes Received:
    62
    Reputations:
    32
    PHP:
    //---------------------------------------------------------------------------
    String VK::AntigateCheckCaptcha()
    {
        
    setopt(curl, CURLOPT_HEADER , 0);
        
    setopt(curl, CURLOPT_PROXY , "");
        
    setopt(curl, CURLOPT_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_COPYCONTENTS, sAntigateKey, CURLFORM_END);
        
    formadd(&post, &last,   CURLFORM_COPYNAME, "file",    CURLFORM_BUFFER, "captcha.jpg", 
                                
    CURLFORM_BUFFERPTR, bufCaptcha.memory, CURLFORM_BUFFERLENGTH, bufCaptcha.size,  
                                
    CURLFORM_CONTENTTYPE, "image/jpeg", CURLFORM_END);

                        
        
    String sId = "";
        
        
    sUrl = "http://antigate.com/in.php";
        
    sPage = "";
        
    setopt(curl, CURLOPT_URL, sUrl);
        
    setopt(curl, CURLOPT_HTTPPOST, post);
        
    perform(curl);
        
    setopt(curl, CURLOPT_POST, 0);
        
    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("|") + 1, sPage.Length() - sPage.Pos("|"));

        if(
    sId.IsEmpty())
            return 
    "ERROR_BAD_CAPTCHA_ID";
            
        for(
    int i = 0; i < 12; ++i)
        {
            
    Sleep(5000);

            
    sUrl =     "http://antigate.com/res.php?key=" +
                    
    sAntigateKey +
                    
    "&action=get&id=" +
                    
    sId;
            
    sPage = "";
            
    setopt(curl, CURLOPT_URL, sUrl);
            
    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(1, sPage.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 *ptr, size_t size)
    {
        return 
    ptr ? realloc(ptr, size) : malloc(size);
    }
    //---------------------------------------------------------------------------
    static size_t CaptchaWrite(void *data, size_t size, size_t nmemb, void *buffer)
    {
        
    size_t realsize = size * nmemb;
        
    struct CaptchaBuffer *mem = (struct CaptchaBuffer *)buffer;
        
    mem->memory = (char*)cap_realloc(mem->memory, mem->size + realsize + 1);
        if(
    mem->memory)
        {
            
    memcpy(&(mem->memory[mem->size]), data, realsize);
            
    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:
    272
    Likes Received:
    276
    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=pupok@mail.ru');
    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,582
    Likes Received:
    1,310
    Reputations:
    1,557
    Что значит "выкидывает"?
     
  13. 1n0y

    1n0y Active Member

    Joined:
    9 May 2009
    Messages:
    272
    Likes Received:
    276
    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,582
    Likes Received:
    1,310
    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:
    272
    Likes Received:
    276
    Reputations:
    2
    кукимэнэджэр не тру
    HTTP.Request.CustomHeaders.Add('Cookie: remixsid=' + s); - труъ :)