Kênh 360 Công Nghệ Kênh 360 Công Nghệ

Trang chủ - Lập trình - PHP - Đăng nhập vào Yahoo sử dụng giao thức YMSG

Đăng nhập vào Yahoo sử dụng giao thức YMSG

Trước hết là 1 class yahoo() trong class yahoo có 2 packet chính là Webpacket (header) và packet w_login() (hàm login) và hàm curl(), find().
Phiên bản YMSG: 102
Server yahoo: webcs122.msg.sp1.yahoo.com
Port: 5050
Nguồn phpbasic.com!

Hàm curl và find mình không cần giải thích, sẽ post trong code full bên dưới. Nguyên tắc hoạt động của hàm curl là dùng lấy cookie khi đăng nhập vào http://login.yahoo.com/config/login?
Hàm find dùng để tìm chuỗi cần thiết ở đây là chuỗi cookie khi login vào yahoo ở trên.

Tiếp theo là các YMSG packet (capture được):

PHP Code:

public function w_packet($PacketData,$ServiceType,$SessionID,$StatusType){
$ProtVer="102";
$PacketData=preg_replace('/À€/', '^$', $PacketData);
$Packet="<Ymsg Command=".chr(34).$ServiceType.chr(34)." Status=".chr(34).$StatusType.chr(34)." Version=".chr(34).$ProtVer.chr(34)." VendorId=".chr(34)."406".chr(34)." SessionId=".chr(34).$SessionID.chr(34).">".$PacketData."</Ymsg>";
$w_packet="Content-Length: ".strlen($Packet).chr(13).chr(10).chr(13).chr(10).$Packet;
return
$w_packet;
}
public function
w_login($username,$Cookie,$inv=false){
if(
$inv) $inv="À€244À€3075À€6À€";
else
$inv="À€6À€";
$packet="0".$username."2".$username."1".$username.$inv.$Cookie."98us1921878631949";
$login=$this->w_packet($packet, 550, 0,"1515563605");
return
$login;
}

Cái hàm trên là packet header và cái dưới là packet login.

Vậy là đã đủ các yếu tố để thực hiện đăng nhập vào yahoo rồi, bây giờ mình dùng fsockopen để kết nối với server và gửi packet lên đó rồi xem coi có phản ứng gì hem

đầu tiên gọi cái class:

PHP Code:
$yahoo=new yahoo

PHP Code:
$login=$yahoo->curl("GET","","http://login.yahoo.com/config/login?.src=my&logout=1&.direct=1&.done=",0,1,0);
$login=$yahoo->curl("GET","","http://login.yahoo.com/config/login?login=w2art&passwd=******",0,1,0); 
dùng hàm find để tìm cookie:
PHP Code:
$Y="Y=v=".$yahoo->find($login,"Y=v=",";");$T="T=z=".$yahoo->find($login,"T=z=",";");$Encrypt=$Y."; ".$T
chú ý: T là mã hóa của yahoo is, Y là mã hóa của pwd, $Encypt là kết hợp 2 cái đó ^^

Tiếp đó là tạo kết nối với server:
PHP Code:
$fp=fsockopen('tcp://webcs122.msg.sp1.yahoo.com', 5050, $errno, $errstr, 20); 
Gửi packet login:
PHP Code:
fwrite($fp,$yahoo->w_login("w2art",$Encrypt,true)); 
chú ý hàm login xem ở trên đầu bài.

đấy giờ xem packet trả về như thế nào, nếu trả về là list nick ảo, và list friend thì là login thành công, else thì sai pwd hay user gì gì đó.

Giờ post full code nè:
PHP Code:
<?php
@set_time_limit(0);
class
yahoo{
public function
curl($method = 'GET',$vars,$url,$fl = 0,$head = 0,$nobody = 0
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
if (
$method == 'POST') {
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);
}
curl_setopt($ch, CURLOPT_USERAGENT,$_SERVER['HTTP_USER_AGENT']);
@
curl_setopt($ch, CURLOPT_FOLLOWLOCATION,$fl);
curl_setopt($ch, CURLOPT_HEADER,$head);
curl_setopt($ch, CURLOPT_NOBODY,$nobody);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
ob_start();
$result = curl_exec($ch);
curl_close($ch);
ob_end_clean();
return
$result;
}
public function
find($s,$s1,$s2){
$p1=strpos($s,$s1);
if(
$p1===FALSE)return $p1;
$p1+=strlen ($s1);
$p2=strpos($s,$s2,$p1+1);
if(
$p2===FALSE)return $p2;
return
substr($s,$p1,$p2-$p1);
}
public function
w_packet($PacketData,$ServiceType,$SessionID,$StatusType){
$ProtVer="102";
$PacketData=preg_replace('/À€/', '^$', $PacketData);
$Packet="<Ymsg Command=".chr(34).$ServiceType.chr(34)." Status=".chr(34).$StatusType.chr(34)." Version=".chr(34).$ProtVer.chr(34)." VendorId=".chr(34)."406".chr(34)." SessionId=".chr(34).$SessionID.chr(34).">".$PacketData."</Ymsg>";
$w_packet="Content-Length: ".strlen($Packet).chr(13).chr(10).chr(13).chr(10).$Packet;
return
$w_packet;
}
public function
w_login($username,$Cookie,$inv=false){
if(
$inv) $inv="À€244À€3075À€6À€";
else
$inv="À€6À€";
$packet="0".$username."2".$username."1".$username.$inv.$Cookie."98us1921878631949";
$login=$this->w_packet($packet, 550, 0,"1515563605");
return
$login;
}
public function
w_pm($username,$friends,$msg){
$packet="1À€".$username."À€5À€".$friends."À€241À€0À€14À€".$msg."À€";
$pm=$this->w_packet($packet, 6, 0,"1515563605");
return
$pm;
}
}
$yahoo=new yahoo;

$user="w2art";
$pwd="******";
$cookie=md5($user.$pwd).'_cookie.txt';
$login=$yahoo->curl("GET","","http://login.yahoo.com/config/login?.src=my&logout=1&.direct=1&.done=",0,1,0);
$login=$yahoo->curl("GET","","http://login.yahoo.com/config/login?login=".$user."&passwd=".$pwd,0,1,0);
sleep(1);
if(
strpos($login,"Invalid ID or password")){
$login=$yahoo->curl("GET","","http://login.yahoo.com/config/login?login=".$user."&passwd=".$pwd,0,1,0);
}
$Y="Y=v=".$yahoo->find($login,"Y=v=",";");$T="T=z=".$yahoo->find($login,"T=z=",";");$Encrypt=$Y."; ".$T;
$fp=fsockopen('tcp://webcs122.msg.sp1.yahoo.com', 5050, $errno, $errstr, 20);
fwrite($fp,$yahoo->w_login("w2art",$Encrypt,true));
stream_set_timeout($fp,1);
$b=trim(stream_get_contents($fp));
if(
strpos($b,"Command=\"85\"")){
$n=strtolower($yahoo->find($b,"^$216^$","^$275^$"));
$n=split("254",$n);
$n1=substr($n[0],0,-2);
$n2=substr($n[1],2);
$p=$yahoo->find($b,"^$89^$","^$90^$");
echo
$n1." ".$n2.";".$p;
exit;
}
?>
Vậy đó: nếu packet trả về có cái số 85 là đăng nhập thành công đấy. Và ở trên tớ viết lấy list nick ảo và tên đầu và cuối của nick đăng nhập, còn list bạn bè thì các bạn có thể viết tương tự.
Nguồn phpbasic.com
Lần cập nhật cuối ( Thứ sáu, 24 Tháng 2 2012 15:00 )  

Kênh 360 công nghệ

  • Nổi bật
  • Tin mới
  • Game mới
  • PrestaShop Guide
  • PrestaShop

Có thể bạn quan tâm

Download nhiều nhất

11/12
Download PES 2011 - FIFA 11
693
18/12
binkw32 dll
175
18/12
TeamViewerQS
49
English French German Japanese Korean