Регистрация на mail.ru

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by RedFern.89, 19 Dec 2010.

  1. RedFern.89

    RedFern.89 Member

    Joined:
    20 Jan 2010
    Messages:
    575
    Likes Received:
    48
    Reputations:
    0
    здарова парни! есть у кого алгоритм регистрации на mail.ru? delphi/cpp
     
  2. Welemir

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

    Joined:
    10 Jan 2008
    Messages:
    229
    Likes Received:
    11
    Reputations:
    -4
    Ну,если не гуглится,то найди на серверных языках и глянь как там.Сделай по аналогии.Имхо сокеты,пост запросы и сериализация нужны тут).
     
  3. RedFern.89

    RedFern.89 Member

    Joined:
    20 Jan 2010
    Messages:
    575
    Likes Received:
    48
    Reputations:
    0
    Welemir, если не сложно скиньте плз)) просто ппц как много парсинга)) оч прошу скиньте
     
  4. 1n0y

    1n0y Active Member

    Joined:
    9 May 2009
    Messages:
    276
    Likes Received:
    280
    Reputations:
    2
    держи функцию. возвращает либо "bad", либо login:pass
    сделана правда через жопу лижбы работала, но работает :)
    прокоментировать чтото несмог, потомучто уже и непомню как это работает :)

    Code:
    function mailregmail: string;
    var
    mailid,mname,mvalue,mailpas,maillog:string;
    mailpost,mailget,mailtmp:tstringlist;
    maili:integer;
    begin
    try
    try
    result:='';
    while (length(result)<4) do
    begin
    popmail:=0;
    cook.CookieCollection.Clear;
    mailget:=tstringlist.Create;
    mailpost:=tstringlist.Create;
    mailtmp:=tstringlist.Create;
    showmessage('['+TimeToStr(Time)+'] '+p+'Регистрирую почту на mail.ru..');
     try
      mailget.text:=http.Get('http://win.mail.ru/cgi-bin/signup');
     except end;
    
    
      for maili:=0 to mailget.Count-1 do
       begin
        if pos('<input type="hidden" name="', mailget[maili])<>0 then
         begin
          mname:='';
          mname:=copy(mailget[maili], pos('hidden" name="',mailget[maili])+14, 50);
          delete(mname, pos('"',mname), length(mname));
          mvalue:=copy(mailget[maili], pos('value="',mailget[maili])+7, length(mailget[maili]));
          delete(mvalue, pos('"',mvalue), length(mvalue));
          mailpost.Add(mname+'='+mvalue);
    
         end;
        if (pos('name="x_', mailget[maili])<>0) and (pos('name="x_reg_id', mailget[maili])=0) then
         begin
          mname:='';
          mname:=copy(mailget[maili], pos('name="x_',mailget[maili])+6, 18);
          mailtmp.Add(mname);
        //
         end;
        if pos('x_get_image_', mailget.Text)=0 then
        begin
        if (pos('img src="x_image?', mailget[maili])<>0) and (pos('&num=1', mailget[maili])<>0) then
         begin
          mln1:=copy(mailget[maili], pos('img src="x_image?',mailget[maili])+9, 60);
          delete(mln1, pos('"',mln1), length(mln1));
         end;
        if (pos('img src="x_image?', mailget[maili])<>0) and (pos('&num=2', mailget[maili])<>0) then
         begin
          mln2:=copy(mailget[maili], pos('img src="x_image?',mailget[maili])+9, 60);
          delete(mln2, pos('"',mln2), length(mln2));
         end;
        if (pos('img src="x_image?', mailget[maili])<>0) and (pos('&num=3', mailget[maili])<>0) then
         begin
          mln3:=copy(mailget[maili], pos('img src="x_image?',mailget[maili])+9, 60);
          delete(mln3, pos('"',mln3), length(mln3));
         end;
         end;
       end;
      if pos('x_get_image_', mailget.Text)<>0 then
      begin
        mln4:=copy(mailget.Text, pos('x_get_image_',mailget.Text), 100);
        delete(mln4, pos('"',mln4), length(mln4));
       [B]тут собираем капчу, если она состоит из трёх картинок[/B]
      end
      else
       [B]или несобираем, если капча из 1 картинки[/B]
      maillog:=randomlog(14);
      mailpas:=randomlog(12);
    //  form1.Memo1.Text:=mailpost.Text+form1.Memo1.Text;
      randomize;
      ri:=random(3);
      if ri=0 then
       mailpost.add('RegistrationDomain=mail.ru');
      if ri=1 then
       mailpost.add('RegistrationDomain=inbox.ru');
      if ri=2 then
       mailpost.add('RegistrationDomain=bk.ru');
      if ri=3 then
       mailpost.add('RegistrationDomain=list.ru') ;
      mailpost.add('RemindPhone=');
      mailpost.add('your_town=');
      mailpost.Add(mailtmp[0]+'='+randomname(8));
      mailpost.Add(mailtmp[1]+'='+randomname(9));
      mailpost.Add(mailtmp[2]+'='+inttostr(randomrange(1, 31)));
      mailpost.Add('BirthMonth='+inttostr(randomrange(1, 12)));
      mailpost.Add(mailtmp[3]+'='+inttostr(randomrange(1965,  1995)));
      mailpost.Add(mailtmp[4]+'='+inttostr(randomrange(1, 2)));
       mailpost.Add('Password_Question=Девичья фамилия матери');
      mailpost.Add(mailtmp[5]+'='+maillog);
      mailpost.Add(mailtmp[6]+'='+mailpas);
      mailpost.Add(mailtmp[7]+'='+mailpas);
      mailpost.Add(mailtmp[8]+'=');
      mailpost.Add(mailtmp[9]+'='+randomlog(9));
      mailpost.Add(mailtmp[10]+'=');
      mailpost.add('B1=Зарегистрировать почтовый ящик');
      mailpost.Add(mailtmp[11]+'='+[B]разгадываем капчу[/B]);
      http.Request.ContentType:='application/x-www-form-urlencoded';
      try
       http.Post('http://win.mail.ru/cgi-bin/reg', mailpost);
      except end;
       if pos(maillog,http.Response.Location)<>0 then
        begin
         while length(http.Response.Location)<>0 do
          begin
           try
            http.Get(http.Response.Location);
           except end;
          end;
         if ri=0 then
          result:=maillog+'@mail.ru:'+mailpas;
         if ri=1 then
          result:=maillog+'@inbox.ru:'+mailpas;
         if ri=2 then
          result:=maillog+'@bk.ru:'+mailpas;
         if ri=3 then
          result:=maillog+'@list.ru:'+mailpas;
    
        end
       else
        begin
         result:='bad';
         showmessage('['+TimeToStr(Time)+'] '+p+'Ошибка регистрации почты на мэйл.ру.');
         inc(popmail);
          if popmail=4 then
           begin
            showmessage('['+TimeToStr(Time)+'] '+p+'Неудалось зарегистрировать почту на мэйл.ру..');
            break;
           end;
        end;
    
    
    end;
    except
      on E:Exception do
       begin
        result:='bad';
       showmessage('['+TimeToStr(Time)+'] '+p+'Ошибка мэйл.ру: ' +E.Message);
       end;
    
    end;
    finally
    mailpost.free;
    mailtmp.Free;
    mailget.Free;
    end;
    end;
     
    2 people like this.
  5. monstr3

    monstr3 New Member

    Joined:
    17 Nov 2008
    Messages:
    0
    Likes Received:
    1
    Reputations:
    5
    Предварительно захожу на страницу регистрации, отправляется запрос, из которого я получаю все поля, необходимые для отправки POST запроса на регистрацию (поля вида "x_fdgwg4g45g", id и тд). Затем отправляю запрос через InetCrack:

    Возвращает HTML ответ, в котором написано:
    В чем проблема?
     
  6. monstr3

    monstr3 New Member

    Joined:
    17 Nov 2008
    Messages:
    0
    Likes Received:
    1
    Reputations:
    5
    1n0y, ваш код работает, спасибо. Правда после регистрации выскакивает ошибка по HTTP 302, но это уже не проблема, разберемся.
     
    #6 monstr3, 6 Jan 2011
    Last edited: 6 Jan 2011
  7. 1n0y

    1n0y Active Member

    Joined:
    9 May 2009
    Messages:
    276
    Likes Received:
    280
    Reputations:
    2
    это не ошибка, это редирект на другие страницы. просто обрабатывай их, и всё
     
  8. SHiNiGaMi

    SHiNiGaMi Banned

    Joined:
    3 Jan 2010
    Messages:
    382
    Likes Received:
    55
    Reputations:
    15
    PHP подойдет? тут правда curl
    PHP:
    function auth_mail($login,$domain,$pass)
    {
      
    $ch curl_init("http://win.mail.ru/cgi-bin/auth");
      
    curl_setopt($ch,CURLOPT_POST,1);
      
    curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
      
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
      
    curl_setopt($ch,CURLOPT_COOKIEFILE"cookie.txt");
      
    curl_setopt($ch,CURLOPT_COOKIEJAR"cookie.txt");
      
    curl_setopt($ch,CURLOPT_POSTFIELDS,"Login=".$login."&Domain=".$domain."&Password=".$pass);
      
    $res curl_exec($ch);
      if(
    preg_match("#Неверное имя пользователя или пароль#i",$res))
        return 
    false;
      elseif(
    preg_match("#Входящие#i",$res))
        return 
    true;
    }
     
  9. 1n0y

    1n0y Active Member

    Joined:
    9 May 2009
    Messages:
    276
    Likes Received:
    280
    Reputations:
    2
    просили регистрацию, а не авторизацию..