Перейти к содержимому

 Друзья: Всё для вебмастера | [ Реклама на форуме ]


Rutor
Rutor


[ DDos Услуги. DDos атака. Заказать ДДос ]


mail.ru php regger


  • Авторизуйтесь для ответа в теме
В этой теме нет ответов

#1
x45x50

x45x50

    Бит

  • Moderator
  • 33 сообщений
Пишем свой mail.ru regger  
Введение
Привет всем значит пару дней назад решил написать mail.ru реггер на С++ а потом подумал и решил ну зачем зря лить свой траф напишу ка я луче скриптик на рнр закину на сервачок и буду баловаться там.
Итак регистрация на маил.ру происходит по адрессу маил.ру.Заходим значит на адресс и смотрим хуеву тучу параметров которые нам совсем не сдались).
Итак задача:Написать скрипт для простенькой регистрации на этом бардаке.
Мат часть
Итак при заходе на страницу регистрации браузер посылает запросы серверу по протоколу http(Рекомендую почитать RFC).В данном случае нам нужен запрос страницы регистрации, всякие картинки которые тоже грузяться нам не нужны( За исклучением одной картинкой с кодом защиты).
Итак что делает браузер(для просмтра использовал плагин к фф LiveHttpHeaders)(то что после //мои коментарии

Цитата

GET /cgi-bin/signup HTTP/1.1 //Запрос требуемой страницы
Host: win.mail.ru //На заданом хосте
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1) Gecko/20061010 Firefox/2.0 //Идентификатор браузера
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 //Принимаемый формат сообщений
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3//ПРинимаемый язык
Accept-Encoding: gzip,deflate//Принимаем сжатие
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7//Принимаемая кодировка
Keep-Alive: 300//Сколько
Connection: keep-alive//Сохрнаять соединение
На этот запрос сервер должен послать ответ с кодом 200(ОК) что все произошло успешно.Заголовки+код самой страницы(как раз то что нам нужно)
Итак среди всего мусора нам нужно выдрать нужную нам информацию.
Кодинг
Думаю луче будет представить сам код с подробным коментарием.
mail.php

Цитата

<?php
$domain="win.mail.ru"; //Требуемый сервер для регистрации

$server_ip=gethostbyname($domain); //Получаем ип адресс этого сервера

$serv_port=80; //Требуемый порт сервера(для хттп 80)

//Начинаем составлять запрос который потом отправим на сервер.
//Помним что каждая строка запроса должна заканчиваться \r\n

$GET="GET /cgi-bin/signup HTTP/1.1\r\n"; //Целевой скрипт и версия протокола

$Host="Host: win.mail.ru\r\n"; //Целевой хост(маил ру)

$Agent="User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1) Gecko/20061010 Firefox/2.0\r\n";

$Accept="Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n";

$ALang="Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3\r\n";

$AChar="Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7\r\n";

$Alive="Keep-Alive: 300\r\n";

$Conect="Connection: keep-alive\r\n";

$Referer="Referer: ]]>http://win.mail.ru/c...in/splash\r\n";]]>

$end="\r\n";//Запрос должен заканчиваться \r\n

$socket=fsockopen($server_ip,$serv_port,$erno,$errstr,15);//Соединяемся с
//Сервером

if($socket)//Если соединение произошло удачно.
{
  print "Connected to <b>$domain</b>($server_ip)(get_register page)ok.<br>";
  //Выводим юзеру что соединение произошло удачно.
  //Пишем в сокет наш запрос который описан выше.
  fwrite($socket,$GET);
  fwrite($socket,$Host);
  fwrite($socket,$Agent);
  fwrite($socket,$Accept);
  fwrite($socket,$ALang);
  fwrite($socket,$AChar);
  fwrite($socket,$Alive);
  fwrite($socket,$Conect);
  fwrite($socket,$Referer);
  fwrite($socket,$end);

  while(!feof($socket))//Теперь ждем ответа от сервера пока не будет найден
//конец запроса
  {
    $tmp_buff=fread($socket,1024); //Создаем временый буфер по 1024 байта
    $recv_buff=$recv_buff .$tmp_buff; //Записываем в новый буфер всю инфу
  }
  $image_tmp=strstr($recv_buff,"get_image?id=");

  //Вот важный момент
  //на странице должен находиться уникальный 8 значный
  //номер(идентификатор  изображения для защиты от автоматической реги

  $image_num=substr($image_tmp,13,8);

  //функция strstr вернет адрес первого вхождения строки которую ищем
  //в строке в которой ищем.
  //Мы знаем что от первого вхождения  до уникального идетификатора
// 13 символов -> мы сдивгаем позицию в буфере на 13 символов
// И записываем в строку позицию с 13 символа временого буфера
// на 8 символов вперед(т.к номер 8 значный)

  $id_tmp=strstr($recv_buff,"name=\"ID\"");
  $id=substr($id_tmp,17,8);

//Аналогично с предыдушим кодом получаем Идентификатор запроса
//маил ру каждому клиенту запросившему регистрацию выдает
//Уникальную 8 значную строку вот ее мы и получаем.

  fclose($socket);
  //Закрываем дескриптор

  $img_get="GET /cgi-bin/get_image?id=$image_num HTTP/1.1\r\n";
  //Теперь готовим запрос для получения картинки с кодом.
  //(Все  коментируемые переменнные  уже были обьявлены
  //И мы будем использовать их.
  //$Host
  //$Agent
  $img_acp="Accept: image/png,*/*;q=0.5\r\n";
  //$ALang
  //$AChar
  //$Alive
  //$Conect
  $img_ref="Referer: ]]>http://win.mail.ru/c...in/signup\r\n";]]>
  //$end
  ###############################################################
  $img_sock=fsockopen($server_ip,$serv_port,$errni,$errstr,15);
//о5 же открываем соединение
//Дело в том что после каждого ответа сервер закрывает соединение.
  if($img_sock)
  //Если все произошло хорошо
  {
    print "Connected to domain <b>$domain</b>($server_ip)(get_image)ok.<br>";
  //Говорим что все хорошо
  // И пишем запрос в сокет
    fwrite($img_sock,$img_get);
    fwrite($img_sock,$Host);
    fwrite($img_sock,$Agent);
    fwrite($img_sock,$img_acp);
    fwrite($img_sock,$ALang);
    fwrite($img_sock,$AChar);
    fwrite($img_sock,$Alive);
    fwrite($img_sock,$Conect);
    fwrite($img_sock,$img_ref);
    fwrite($img_sock,$end);
    while(!feof($img_sock))
    {
      $tmp_img=fread($img_sock,1024);
      $img_musor=$img_musor .$tmp_img;
      //Записываем все в буфер
    }
    fclose($img_sock);
    //Закрываем сокет
    $jpeg_img=strstr($img_musor,'яШя');

    //Дело в том что в буфер запишеться не только сама картинка
  //но и ответ хттп сервера если все в порядке то 200 и хедеры
  //Поэтому мы ввдираем из буфера только саму картинку
  //jpg картинка начинаеться со слов яШя и нам нужна вся
  //Информация следущая только после яшя и сама яшя

    $img_file=fopen("$image_num.jpg","wb");
  //Теперь создаем jpg файл и записываем в него
    fwrite($img_file,$jpeg_img);
  //Буфер картинки
    fclose($img_file);
    // Закрываем файл
    print "<img src=\"$image_num.jpg\"></img>";
  //Теперь выводим картинку для того чтобы ввести изображеную на ней
  //картинку
    print "<form action=\"register.php\" method=\"get\">

  //Все остальное будет обрабатывать скрипт register.php

    <b>Enter_code:FromPicture</b><br>
  //Говорим что надо ввести число на картинке

    <input type=\"Hidden\" name=\"image_num\" value=\"$image_num\"></input>

  //Тут говориться что тут будет передан параметр image_num    
  //скрипту  register.php

    <input type=\"text\" name=\"img_code\"></input><br>

//Тут говориться что тут будет передан параметр img_code  
//Этот параметр вводим сами ручками

    <input type=\"Hidden\" name=\"id\ value=\"$id\"></input><br>

//Передаем ID самого запроса который нам выдал маил ру
    </form>";
  }
}
else
{
die("failed\n");
}
?>
register.php

Цитата

<?php

    $domain="win.mail.ru";
    $server_ip=gethostbyname($domain);
    $serv_port=80;
    //Это все было описано в предыдущем скрипте
    $rand1=rand(1,9090909099);
//Генерируем случайный номер
    $rand2=rand(1,12345678);
//Генерируем второй случайны номер
    $name="preved"."$rand1";
//имя для регистрируемого аккаунта
    $pass="poka" ."$rand2";
//пароль для регистрируемого аккаунта
    $dom="mail.ru";
//Домен который нужен для регистрации
    print "<b>Result of previous request:</b><br>";
    print "Image id:<b>$image_num</b><br>";
    print "Image code on image:<b>$img_code</b><br>";
    print "ID of request:<b>$id</b><br>";
    //Эти Принты для проверки можно закоментировать    $mail_query="ID=$id&Count=1&back=&Username=$name&
RegistrationDomain=$mod&Password=$pass&Password_Verify=$pass&
Password_Question=%C4%E5%E2%E8%F7%FC%FF+
%F4%E0%EC%E8%EB%E8%FF+%EC%E0%F2%E5%F0%E8&
Password_CustomQuestion=&Password_Answer=
87i865jh56g45g45g44545g54g45g&Email=&FirstName=yrrthrthtrh&
LastName=trh56h556h&BirthDay=13&BirthMonth=1&BirthYear=1987&
Sex=1&Mrim.Country=0&Mrim.Region=0&security_image_id=$image_num&
security_image_answer=$img_code&B1=+%C7%E0%F0%E5%E3%E8%F1%F2
%F0%E8%F0%EE%E2%E0%F2%FC+%EF%EE%F7%F2%EE%E2%FB%E9+
%FF%F9%E8%EA+";
//Вот это сам запрос его надо писать в одну строку а то допишуться символы    //перевода каретки.
//Сам запрос смотрел о5 же в плагине LiveHtppHeaders и изменял его вручную
//ДУмаю если ты понимаешь в пхп то все поимешь.Это свиду запрос такой        //большой,на самом деле почти одно и то же
    $mail_qlength=strlen($mail_query);
//Считаем длину запроса
    //###############################################
    $register=fsockopen($server_ip,$serv_port,$errni,$errstr,15);
  //Соединяемся с сервером
    if($register)
//Если все ок
    {
      print "Connected<br>"
      //Говорим что все гуд
      fwrite($register,"POST /cgi-bin/reg HTTP/1.1\r\n");
      fwrite($register,"Host:win.mail.ru\r\n");
      fwrite($register,"Accept:*/*\r\n");
      //Принимаем все
      fwrite($register,"Referer: ]]>http://win.mail.ru/c...n/signup\r\n");]]>
      fwrite($register,"Proxy-Connection: Keep-Alive\r\n");
      fwrite($register,"Content-Length: $mail_qlength\r\n");
      //Говорим размер нашего запроса
      fwrite($register,"Content-Type: application/x-www-form-urlencoded\r\n\r\n");
      fwrite($register,$mail_query);
      //Отправялем сам запрос
      while(!feof($register))
      {
      //Обрабатываем получение от сервера как и в прошлый раз
      $tmp_str=fread($register,1024);
      $result=$result .$tmp_str;
      }
      fclose($register);
      $isfound=strstr($result,"Found");
      //Если вы вели изображение правильно то будет отправлен ответ
      //Found
      if($isfound==false)
      {
        //А если нет сами виноваты не то написали
        die("You Enter Wrong Image Code or Other Unknown Error<br>");
      }
      else
      {
        //Тут говорим что все ок
        //акаунт зарегистрирован
        //и все будет писаться в accs.txt
        print("Register account ok.<br>");
        print("$name:$pass@$dom<br>");
        $log=fopen("accs.txt","a+");
        fwrite($log,"$name:$pass@$dom\r\n");
        fseek($log,SEEK_END);
        fclose($log);
      }
    }
?>
Тестировалось
на PHP 5.2.1 c включеными сокетами.
Автор
Марк aka x45x50:ICQ 998819
Спасибо за внимание.
P.S писалось еще в сентябре, возможно на сервере поменяли метод регистрации, но принципы остались теже самые,которые могут быть применимы к любой системы регистрации
Кодинг на заказ
PM only


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных