| [转载]WAP挂QQ主要协议 你也可以写挂QQ的服务程序了 |
|
| 文章内容 |
WAP挂QQ主要协议 你也可以写挂QQ的服务程序了
最近有朋友热上了QQ挂机 现把一些QQ的HTTP协议贡献一下 稍加加工就可以做一个挂QQ的服务端了!
支持HTTP协议登陆地址 其实就是WAP了 不是什么秘密了! http://tqq.tencent.com:8000
有的朋友说已经不可以挂了 今天(6月24日上午)测试了下还是可以的 但不保证以后还是可以!是不是有点郁闷啊:(
如果有朋友想要全部协议或想写一份挂QQ的服务端 偶可以帮你一下 !
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
抓取的协议包如下,自己分析: 连接到服务器: POST / HTTP/1.0 Connection: keep-alive Content-Type: application/x-www-form-urlencoded Content-Length: 105 Host: tqq.tencent.com:8000 Accept: text/html, */* User-Agent: Mozilla/3.0
发送请求(UIN我都修改成444444444 免的把我的号给黑掉): VER=1%2E1&CMD=Login&SEQ=70545&UIN=444444444&PS=343b1c4a3ea721b2d640fc8700db0f36&M5=1&LC=9326B87B234E7235&
返回请求: .... ..........
其实你有下面几个请求就可以挂了 登陆 状态 退出 其他的功能就不要用了!
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 登陆请求: VER=1.1&CMD=Login&SEQ=&UIN=444444444&PS=&M5=1&LC=9326B87B234E7235
VER是用来说明QQ协议的版本,CMD是说明协议的命令,Login就是指QQ的登录了,SEQ是他的为了防止重复发送而设定的一个标记,一般我们取当前时间数值的一段放入即可。,UIN是说明你当前要登录的用户QQ号,PS,是MD5加密过后的密码的值。
返回协议: VER=1.1&CMD=Login&SEQ=11281&UIN=&RES=0&RS=0&HI=60&LI=300(成功) RES为0表示成功返回,RS为0表示登录成功。 VER=1.1&CMD=Login&SEQ=11422&UIN=444444444&RES=0&RS=1&RA=登录失败 RS为1表示登录失败,那么就会出现提示信息RA说明原因。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 改变用户当前状态。 可以把QQ设置为在线,隐身等状态。具体命令如下:
VER=1.1&CMD=Change_Stat&SEQ=&UIN=&ST=
ST为要改变的状态,10为上线,20为离线,30为忙碌。
服务器得到协议后如果成功则返回:
VER=1.1&CMD=Change_Stat&SEQ=17512&UIN=444444444&RES=0&
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
退出登录 要退出登录,要向服务器发送命令Logout,具体命令如下:
VER=1.1&CMD=Logout&SEQ=&UIN=
服务器得到协议后如果成功则返回:
VER=1.1&CMD=LOGOUT&SEQ=15803&UIN=444444444&RES=0 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 顺手转一个MD5的函数:
//php_md5("字符串") define("BITS_TO_A_BYTE",8); define("BYTES_TO_A_WORD",4); define("BITS_TO_A_WORD",32); $m_lOnBits=array(30); $m_l2Power=array(30);
function LShift($lValue,$iShiftBits) { if ($iShiftBits==0) return $lValue; if ($iShiftBits==31) { if ($lValue&1) { return 0x80000000; } else { return 0; } } if ($iShiftBits < 0 || $iShiftBits > 31) { } if (($lValue&$GLOBALS{"m_l2Power"}[31-$iShiftBits])) { $tmpstr=(($lValue&$GLOBALS{"m_lOnBits"}[31-($iShiftBits+1)])*$GLOBALS{"m_l2Power"}[$iShiftBits])|0x80000000; } else { $tmpstr=(($lValue&$GLOBALS{"m_lOnBits"}[31-$iShiftBits])*$GLOBALS{"m_l2Power"}[$iShiftBits]); } return $tmpstr; }
function RShift($lValue,$iShiftBits) { if ($iShiftBits==0)return $lValue; if ($iShiftBits==31) { if ($lValue&0x80000000) { return 1; } else { return 0; } } if ($iShiftBits<0 || $iShiftBits>31) { } $tmpstr=floor(($lValue&0x7FFFFFFE)/$GLOBALS{"m_l2Power"}[$iShiftBits]); if ($lValue&0x80000000) { $tmpstr=$tmpstr|floor(0x40000000/$GLOBALS{"m_l2Power"}[$iShiftBits-1]); } return $tmpstr; }
function RotateLeft($lValue,$iShiftBits) { return LShift($lValue,$iShiftBits)|RShift($lValue,(32-$iShiftBits)); }
function AddUnsigned($lX,$lY) { $lX8=$lX&0x80000000; $lY8=$lY&0x80000000; $lX4=$lX&0x40000000; $lY4=$lY&0x40000000; $lResult=($lX&0x3FFFFFFF)+($lY&0x3FFFFFFF);
if ($lX4&$lY4) { $lResult=$lResult^0x80000000^$lX8^$lY8; } if ($lX4|$lY4) { if ($lResult&0x40000000) { $lResult=$lResult^0xC0000000^$lX8^$lY8; } else { $lResult=$lResult^0x40000000^$lX8^$lY8; } } else { $lResult=$lResult^$lX8^$lY8; } return $lResult; }
function md5_F($x,$y,$z) { return ($x&$y)|((~$x)&$z); }
function md5_G($x,$y,$z) { return ($x&$z)|($y&(~$z)); }
function md5_H($x,$y,$z) { return ($x^$y^$z); }
function md5_I($x,$y,$z) { return ($y^($x|(~$z))); }
function md5_FF(&$a,$b,$c,$d,$x,$s,$ac) { $a=AddUnsigned($a,AddUnsigned(AddUnsigned(md5_F($b,$c,$d),$x),$ac)); $a=RotateLeft($a,$s); $a=AddUnsigned($a,$b); }
function md5_GG(&$a,$b,$c,$d,$x,$s,$ac) { $a=AddUnsigned($a,AddUnsigned(AddUnsigned(md5_G($b,$c,$d),$x),$ac)); $a=RotateLeft($a,$s); $a=AddUnsigned($a,$b); }
function md5_HH(&$a,$b,$c,$d,$x,$s,$ac) { $a=AddUnsigned($a,AddUnsigned(AddUnsigned(md5_H($b,$c,$d),$x),$ac)); $a=RotateLeft($a,$s); $a=AddUnsigned($a,$b); }
function md5_II(&$a,$b,$c,$d,$x,$s,$ac) { $a=AddUnsigned($a,AddUnsigned(AddUnsigned(md5_I($b,$c,$d),$x),$ac)); $a=RotateLeft($a,$s); $a=AddUnsigned($a,$b); }
function ConvertToWordArray($sMessage) { $lWordArray=array(); $MODULUS_BITS=512; $CONGRUENT_BITS=448; $lMessageLength=strlen($sMessage); $lNumberOfWords=(floor(($lMessageLength+floor(($MODULUS_BITS-$CONGRUENT_BITS)/BITS_TO_A_BYTE))/floor($MODULUS_BITS/BITS_TO_A_BYTE))+1)*floor($MODULUS_BITS/BITS_TO_A_WORD); $lBytePosition=0; $lByteCount=0; while(!($lByteCount>=$lMessageLength)) { $lWordCount=floor($lByteCount/BYTES_TO_A_WORD); $lBytePosition=($lByteCount%BYTES_TO_A_WORD)*BITS_TO_A_BYTE; $lWordArray[$lWordCount]=$lWordArray[$lWordCount]|LShift(ord(substr($sMessage,$lByteCount+1-1,1)),$lBytePosition); $lByteCount=$lByteCount+1; } $lWordCount=floor($lByteCount/BYTES_TO_A_WORD); $lBytePosition=($lByteCount%BYTES_TO_A_WORD)*BITS_TO_A_BYTE; $lWordArray[$lWordCount]=$lWordArray[$lWordCount]|LShift(0x80,$lBytePosition); $lWordArray[$lNumberOfWords-2]=LShift($lMessageLength,3); $lWordArray[$lNumberOfWords-1]=RShift($lMessageLength,29); return $lWordArray; }
function WordToHex($lValue) { $tmpstr=""; for ($lCount=0; $lCount<=3; $lCount++) { $lByte=RShift($lValue,$lCount*BITS_TO_A_BYTE)&$GLOBALS{"m_lOnBits"}[BITS_TO_A_BYTE-1]; $tmpstr=$tmpstr.(substr("0".dechex($lByte),strlen("0".dechex($lByte))-2));//这行可能有问题 } return $tmpstr; }
function php_MD5($sMessage) { $GLOBALS{"m_lOnBits"}[0]=intval(1); $GLOBALS{"m_lOnBits"}[1]=intval(3); $GLOBALS{"m_lOnBits"}[2]=intval(7); $GLOBALS{"m_lOnBits"}[3]=intval(15); $GLOBALS{"m_lOnBits"}[4]=intval(31); $GLOBALS{"m_lOnBits"}[5]=intval(63); $GLOBALS{"m_lOnBits"}[6]=intval(127); $GLOBALS{"m_lOnBits"}[7]=intval(255); $GLOBALS{"m_lOnBits"}[8]=intval(511); $GLOBALS{"m_lOnBits"}[9]=intval(1023); $GLOBALS{"m_lOnBits"}[10]=intval(2047); $GLOBALS{"m_lOnBits"}[11]=intval(4095); $GLOBALS{"m_lOnBits"}[12]=intval(8191); $GLOBALS{"m_lOnBits"}[13]=intval(16383); $GLOBALS{"m_lOnBits"}[14]=intval(32767); $GLOBALS{"m_lOnBits"}[15]=intval(65535); $GLOBALS{"m_lOnBits"}[16]=intval(131071); $GLOBALS{"m_lOnBits"}[17]=intval(262143); $GLOBALS{"m_lOnBits"}[18]=intval(524287); $GLOBALS{"m_lOnBits"}[19]=intval(1048575); $GLOBALS{"m_lOnBits"}[20]=intval(2097151); $GLOBALS{"m_lOnBits"}[21]=intval(4194303); $GLOBALS{"m_lOnBits"}[22]=intval(8388607); $GLOBALS{"m_lOnBits"}[23]=intval(16777215); $GLOBALS{"m_lOnBits"}[24]=intval(33554431); $GLOBALS{"m_lOnBits"}[25]=intval(67108863); $GLOBALS{"m_lOnBits"}[26]=intval(134217727); $GLOBALS{"m_lOnBits"}[27]=intval(268435455); $GLOBALS{"m_lOnBits"}[28]=intval(536870911); $GLOBALS{"m_lOnBits"}[29]=intval(1073741823); $GLOBALS{"m_lOnBits"}[30]=intval(2147483647); $GLOBALS{"m_l2Power"}[0]=intval(1); $GLOBALS{"m_l2Power"}[1]=intval(2); $GLOBALS{"m_l2Power"}[2]=intval(4); $GLOBALS{"m_l2Power"}[3]=intval(8); $GLOBALS{"m_l2Power"}[4]=intval(16); $GLOBALS{"m_l2Power"}[5]=intval(32); $GLOBALS{"m_l2Power"}[6]=intval(64); $GLOBALS{"m_l2Power"}[7]=intval(128); $GLOBALS{"m_l2Power"}[8]=intval(256); $GLOBALS{"m_l2Power"}[9]=intval(512); $GLOBALS{"m_l2Power"}[10]=intval(1024); $GLOBALS{"m_l2Power"}[11]=intval(2048); $GLOBALS{"m_l2Power"}[12]=intval(4096); $GLOBALS{"m_l2Power"}[13]=intval(8192); $GLOBALS{"m_l2Power"}[14]=intval(16384); $GLOBALS{"m_l2Power"}[15]=intval(32768); $GLOBALS{"m_l2Power"}[16]=intval(65536); $GLOBALS{"m_l2Power"}[17]=intval(131072); $GLOBALS{"m_l2Power"}[18]=intval(262144); $GLOBALS{"m_l2Power"}[19]=intval(524288); $GLOBALS{"m_l2Power"}[20]=intval(1048576); $GLOBALS{"m_l2Power"}[21]=intval(2097152); $GLOBALS{"m_l2Power"}[22]=intval(4194304); $GLOBALS{"m_l2Power"}[23]=intval(8388608); $GLOBALS{"m_l2Power"}[24]=intval(16777216); $GLOBALS{"m_l2Power"}[25]=intval(33554432); $GLOBALS{"m_l2Power"}[26]=intval(67108864); $GLOBALS{"m_l2Power"}[27]=intval(134217728); $GLOBALS{"m_l2Power"}[28]=intval(268435456); $GLOBALS{"m_l2Power"}[29]=intval(536870912); $GLOBALS{"m_l2Power"}[30]=intval(1073741824);
$S11=7; $S12=12; $S13=17; $S14=22; $S21=5; $S22=9; $S23=14; $S24=20; $S31=4; $S32=11; $S33=16; $S34=23; $S41=6; $S42=10; $S43=15; $S44=21;
$x=ConvertToWordArray($sMessage);
$a=0x67452301; $b=0xEFCDAB89; $c=0x98BADCFE; $d=0x10325476;
for ($k=0; $k<=count($x); $k=$k+16) { $AA=$a; $BB=$b; $CC=$c; $DD=$d; md5_FF($a,$b,$c,$d,$x[$k+0],$S11,0xD76AA478); md5_FF($d,$a,$b,$c,$x[$k+1],$S12,0xE8C7B756); md5_FF($c,$d,$a,$b,$x[$k+2],$S13,0x242070DB); md5_FF($b,$c,$d,$a,$x[$k+3],$S14,0xC1BDCEEE); md5_FF($a,$b,$c,$d,$x[$k+4],$S11,0xF57C0FAF); md5_FF($d,$a,$b,$c,$x[$k+5],$S12,0x4787C62A); md5_FF($c,$d,$a,$b,$x[$k+6],$S13,0xA8304613); md5_FF($b,$c,$d,$a,$x[$k+7],$S14,0xFD469501); md5_FF($a,$b,$c,$d,$x[$k+8],$S11,0x698098D8); md5_FF($d,$a,$b,$c,$x[$k+9],$S12,0x8B44F7AF); md5_FF($c,$d,$a,$b,$x[$k+10],$S13,0xFFFF5BB1); md5_FF($b,$c,$d,$a,$x[$k+11],$S14,0x895CD7BE); md5_FF($a,$b,$c,$d,$x[$k+12],$S11,0x6B901122); md5_FF($d,$a,$b,$c,$x[$k+13],$S12,0xFD987193); md5_FF($c,$d,$a,$b,$x[$k+14],$S13,0xA679438E); md5_FF($b,$c,$d,$a,$x[$k+15],$S14,0x49B40821);
md5_GG($a,$b,$c,$d,$x[$k+1],$S21,0xF61E2562); md5_GG($d,$a,$b,$c,$x[$k+6],$S22,0xC040B340); md5_GG($c,$d,$a,$b,$x[$k+11],$S23,0x265E5A51); md5_GG($b,$c,$d,$a,$x[$k+0],$S24,0xE9B6C7AA); md5_GG($a,$b,$c,$d,$x[$k+5],$S21,0xD62F105D); md5_GG($d,$a,$b,$c,$x[$k+10],$S22,0x2441453); md5_GG($c,$d,$a,$b,$x[$k+15],$S23,0xD8A1E681); md5_GG($b,$c,$d,$a,$x[$k+4],$S24,0xE7D3FBC8); md5_GG($a,$b,$c,$d,$x[$k+9],$S21,0x21E1CDE6); md5_GG($d,$a,$b,$c,$x[$k+14],$S22,0xC33707D6); md5_GG($c,$d,$a,$b,$x[$k+3],$S23,0xF4D50D87); md5_GG($b,$c,$d,$a,$x[$k+8],$S24,0x455A14ED); md5_GG($a,$b,$c,$d,$x[$k+13],$S21,0xA9E3E905); md5_GG($d,$a,$b,$c,$x[$k+2],$S22,0xFCEFA3F8); md5_GG($c,$d,$a,$b,$x[$k+7],$S23,0x676F02D9); md5_GG($b,$c,$d,$a,$x[$k+12],$S24,0x8D2A4C8A);
md5_HH($a,$b,$c,$d,$x[$k+5],$S31,0xFFFA3942); md5_HH($d,$a,$b,$c,$x[$k+8],$S32,0x8771F681); md5_HH($c,$d,$a,$b,$x[$k+11],$S33,0x6D9D6122); md5_HH($b,$c,$d,$a,$x[$k+14],$S34,0xFDE5380C); md5_HH($a,$b,$c,$d,$x[$k+1],$S31,0xA4BEEA44); md5_HH($d,$a,$b,$c,$x[$k+4],$S32,0x4BDECFA9); md5_HH($c,$d,$a,$b,$x[$k+7],$S33,0xF6BB4B60); md5_HH($b,$c,$d,$a,$x[$k+10],$S34,0xBEBFBC70); md5_HH($a,$b,$c,$d,$x[$k+13],$S31,0x289B7EC6); md5_HH($d,$a,$b,$c,$x[$k+0],$S32,0xEAA127FA); md5_HH($c,$d,$a,$b,$x[$k+3],$S33,0xD4EF3085); md5_HH($b,$c,$d,$a,$x[$k+6],$S34,0x4881D05); md5_HH($a,$b,$c,$d,$x[$k+9],$S31,0xD9D4D039); md5_HH($d,$a,$b,$c,$x[$k+12],$S32,0xE6DB99E5); md5_HH($c,$d,$a,$b,$x[$k+15],$S33,0x1FA27CF8); md5_HH($b,$c,$d,$a,$x[$k+2],$S34,0xC4AC5665);
md5_II($a,$b,$c,$d,$x[$k+0],$S41,0xF4292244); md5_II($d,$a,$b,$c,$x[$k+7],$S42,0x432AFF97); md5_II($c,$d,$a,$b,$x[$k+14],$S43,0xAB9423A7); md5_II($b,$c,$d,$a,$x[$k+5],$S44,0xFC93A039); md5_II($a,$b,$c,$d,$x[$k+12],$S41,0x655B59C3); md5_II($d,$a,$b,$c,$x[$k+3],$S42,0x8F0CCC92); md5_II($c,$d,$a,$b,$x[$k+10],$S43,0xFFEFF47D); md5_II($b,$c,$d,$a,$x[$k+1],$S44,0x85845DD1); md5_II($a,$b,$c,$d,$x[$k+8],$S41,0x6FA87E4F); md5_II($d,$a,$b,$c,$x[$k+15],$S42,0xFE2CE6E0); md5_II($c,$d,$a,$b,$x[$k+6],$S43,0xA3014314); md5_II($b,$c,$d,$a,$x[$k+13],$S44,0x4E0811A1); md5_II($a,$b,$c,$d,$x[$k+4],$S41,0xF7537E82); md5_II($d,$a,$b,$c,$x[$k+11],$S42,0xBD3AF235); md5_II($c,$d,$a,$b,$x[$k+2],$S43,0x2AD7D2BB); md5_II($b,$c,$d,$a,$x[$k+9],$S44,0xEB86D391); $a=AddUnsigned($a,$AA); $b=AddUnsigned($b,$BB); $c=AddUnsigned($c,$CC); $d=AddUnsigned($d,$DD); } return strtolower(WordToHex($a).WordToHex($b).WordToHex($c).WordToHex($d)); }
//例子 $aaa=php_MD5("sdfasdf"); echo $aaa; //例子
|
|
| 相关信息 |
![]() |
[转载]WAP挂QQ主要协议 你也可以写挂QQ的服务程序了
发布者:lfj
浏览量:2335
发布日期:2005-07-03 23:06:09
所属专题: |
|
|