php скрипт для серверов mail.ru

Dmitriy

Новичок
Пользователь
8 Янв 2014
2
2
3
37
Есть задумка соорудить скрипт работающий с серверами мэйл.ру. Все бы хорошо, но есть один трабол.
из теории: авторизация проходит следующим образом:
1. соединяемся с сервером он нам дает в ответ пакет данных.
2 из пакета вытаскиваем ключ
3 на основе ключа логина и пароля генерируем md5 хэш
4 составляем пакет и отправляем его обратно.
5 в ответ должен придти ответ.... НО ЕГО НЕТ(((

теперь поподробнее
Первый пакет который приходит
Код:
0132107B0000D0000000001EFE176437E87D6A00010500001A333030303030353836663532383563313330353066376261383300
где
01 - CUInt опкод пакета
32 - CUInt длина пакета
10 - CUInt размер ключа
7B0000D0000000001EFE176437E87D6A - Bytes ключ
000105 - Bytes версия
00 - Byte, тип авторизации (MD5)
1A - CUInt, размер CRC
3330303030303538366635323835633133303530663762613833 - Bytes, CRC
00 - Byte, модификатор
Из этих данных интересен только ключ 7B0000D0000000001EFE176437E87D6A

2. теперь нужно отправить пакет с опкодом 0х03 структура пакета:
Код:
03 - CUInt опкод пакета
ХХ -CUInt размер пакета
XX - CUInt  длина логина
xx xx ... xx   - Bytes логин
XX -CUInt  длина хэша
xx xx ... xx   - Bytes хэш
00 04 ff ff ff ff Bytes нужные данные
хэш считается hash_hmac('md5', md5($l.$p, true),$key,true)
где $l логин $p пароль

также привожу сам текст скрипта на пхп
PHP:
<?php
set_time_limit(0);
$l='user';  //логин
$p='password';  //пароль
// все конвертируется iconv("UTF-8", "UTF-16LE", $Message)
//$l=PackString($l);
//$p=PackString($p);
if(!@$sock=socket_create(AF_INET, SOCK_STREAM, SOL_TCP))
{throw new Exception("Не удалось связать сокет"); exit();}
		socket_connect($sock,'link12.pwonline.ru','29000');
		socket_set_block($sock);
$bufer=SocketRead($sock); // получили пакет авторизации
//echo $bufer;
//var_dump(unpack("H*", $bufer));
$key = substr($bufer,3, 16);	  //key
// var_dump(unpack("H*", $key));
$hash=hash_hmac('md5', md5($l.$p, true),$key,true);
$lLengh = cuint(StrLen($l));//длина логина
$hLengh = cuint(StrLen($hash));//длина hash
$Packet=$lLengh.$l.$hLengh.$hash."\x00\x04\xff\xff\xff\xff";
//echo $Packet;
SendPacket(3,$Packet,$sock);
//socket_recv($sock, $bu, 8192, 0); // получили пакет авторизации
$bu=SocketRead($sock);
echo $bu;
socket_set_nonblock($sock);
echo socket_strerror(socket_last_error($sock))  ;
 
 
 
 
 
 
 
 
SocketClose($sock);
// Функции для работы
function cuint($Data)
{   // Пакует и переворачивает строку задом на перед)))
	if($Data < 64)
			return StrRev(PACK("C", $Data));
	else if($Data < 16384)
			return StrRev(PACK("S", ($Data | 0x8000)));
	else if($Data < 536870912)
			return StrRev(PACK("I", ($Data | 0xC0000000)));
	return StrRev(PACK("c", -32) . PACK("I", $Data));
}
function PackString($data)
	{
		$data = iconv("UTF-8", "UTF-16LE", $data);
		return $data;
	}
  function PackOctet($data)
	{
		$data = pack("H*", $data);
		return cuint(strlen($data)).$data;
	}
function SendPacket($id,$data,$sock)
{   //$id - CUInt, тип/опкод пакета
//$count - CUInt, размер пакета
//$data - данные
$d = PackOctet('');
	$d = cuint($id).cuint(strlen($data)).$data;
	echo $d;
   // $m=  unpack("C*", $d);
   // var_dump($m);
	SocketSend($d,$sock);
}
function SocketConnect($ip,$port)
{
 
 
 
 
}
function SocketSend($data,$sock)
{
$byte=socket_send($sock, $data, 8192, 0);
var_dump(unpack("H*", $data));
echo "send $byte";
}
function SocketRead($sock)
{
socket_recv($sock, $buf, 8192, 0);
	socket_set_nonblock($sock);
	return $buf;
}
function SocketClose($sock)
{
socket_close($sock);
}
?>

По моему мнению неверно расчитывается хэш.
 
Последнее редактирование:
  • Like
Реакции: LikO и Joslian

jkpro

Пользователь
« PW Мастер I »
21 Фев 2013
71
63
18
30
И для чего Скрипт?
Авторизация на серверы мейл.ру

По моему мнению неверно расчитывается хэш.
Вроде всё правильно, или я не вижу ошибки.. А почему вы решили что у вас она есть? Что шлет сервер в ответ?
 

Dmitriy

Новичок
Пользователь
8 Янв 2014
2
2
3
37
Сервер молчит.... не сходится хэш. если снифером прочитать пакеты и ручками поставить ключ.... при сравнении рассчитанного и отправленного elementclient'ом данные не сходятся(((
 

Пользователи онлайн

Сейчас на форуме нет ни одного пользователя.

Последние ресурсы

Статистика форума

Темы
3.838
Сообщения
21.199
Пользователи
7.611
Новый пользователь
Shenia