Что бы пройти авторизацию нам нужно сделать несколько шагов:
1. Взять ключ для нашего пароля
2. Зашифровать все (пароль + ключ)
3. Послать запрос на авторизацию
Для начала я создал класс ml с 4 методами: get_password, get_salt, auth и curl_get
class ml{
var $auth_url = "http://mlgame.ru/auth";
var $salt_url = "http://mlgame.ru/salt";
var $game_url = "http://mlgame.ru/";
var $password;
var $login;
var $cookie_name = "cookie.txt";
function __construct(){}
function curl_get($host, $referer = null){}
function get_salt(){}
function get_password(){}
function auth(){}
}
Что кто будет делать:
get_salt будет идти на страничку подбора ключа для пароля и парсить его.
get_passwordбудет генерировать наш пароль, в смысле шифровать его с ключом (salt)
auth будет нас авторизировать
curl_get будет у нас в качестве браузера
get_salt:
$salt = json_decode($this->curl_get($this->salt_url), TRUE); return $salt['salt'];
В ответ получим что-то похожее на md5
get_password:
Что бы сложить пароль они используют ресурсы клиента, что есть для их и яма. И в эту яму полезим и мы.
Алгоритм шифра вот такой: MD5( MD5(clearText) + salt );
так что:
return md5(md5($this->password)."".$this->get_salt());
Этого вполне достаточно что бы сделать хэш нашего пароля точно так же как это делает и сайт.
auth:
Тут все просто, у нас есть логин у нас уже есть сгенерированный хэш нашего пароля и у нас есть сигарета и кофе…
Сервер нам попросту отдаст ошибку типа у нас не правильный пароль если мы не заберем cookie которые он нам даст. Для этого я в curl_get добавил всего две строчки:
curl_setopt($ch, CURLOPT_COOKIEJAR, $this->cookie_name); curl_setopt($ch, CURLOPT_COOKIEFILE, $this->cookie_name);
после все хорошо заработало.
Ну и сам auth:
$to = $this->auth_url."?username=".$this->login."&password=".$this->get_password()."&autologin=false&captcha=null"; $auth = $this->curl_get($to, $this->game_url); return $auth;
curl_get будет пока что!!!! вот такой:
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_REFERER, $referer);
curl_setopt($ch, CURLOPT_USERAGENT, "Opera/14.00 (Windows NT 5.1; U; ru) Presto/2.9.168 Version/11.51");
curl_setopt($ch, CURLOPT_URL, $host);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_COOKIEJAR, $this->cookie_name);
curl_setopt($ch, CURLOPT_COOKIEFILE, $this->cookie_name);
$html = curl_exec($ch);
echo curl_error($ch);
curl_close($ch);
return $html;
ГОТОВЫЙ ML.CLASS.PHP:
class ml{
var $auth_url = "http://mlgame.ru/auth";
var $salt_url = "http://mlgame.ru/salt";
var $game_url = "http://mlgame.ru/";
var $password;
var $login;
var $cookie_name = "cookie.txt";
function __construct(){}
function curl_get($host, $referer = null){
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_REFERER, $referer);
curl_setopt($ch, CURLOPT_USERAGENT, "Opera/14.00 (Windows NT 5.1; U; ru) Presto/2.9.168 Version/11.51");
curl_setopt($ch, CURLOPT_URL, $host);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_COOKIEJAR, $this->cookie_name);
curl_setopt($ch, CURLOPT_COOKIEFILE, $this->cookie_name);
$html = curl_exec($ch);
echo curl_error($ch);
curl_close($ch);
return $html;
}
function get_salt(){
$salt = json_decode($this->curl_get($this->salt_url), TRUE);
return $salt['salt'];
}
function get_password(){
//MD5( MD5(clearText) + salt );
return md5(md5($this->password)."".$this->get_salt());
}
function auth(){
$to = $this->auth_url."?username=".$this->login."&password=".$this->get_password()."&autologin=false&captcha=null";
$auth = $this->curl_get($to, $this->game_url);
return $auth;
}
}
Делаем
$ml = new ml(); $ml->login = "ЛОГИН"; $ml->password = "ПАРОЛЬ"; echo $ml->auth();
и вуаля 🙂 мы вошли.