写在最前:这篇文字是描述的我的一个没有成功的代码,鉴于某些原因成功的代码就不公布了。能写出来的自然容易,100来行代码就可以搞定,而且由于手机QQ版本繁多,方法也是万千的。不管是截封包,还是逆向源代码,基本上都是可以取得一定收获的。对于这种问题,我一贯作风是只保证刚刚满足自己的需求即可,也懒得作深入探究。 鉴于最近TX的QQ升级规则最重要的一条改成了连续6小时手机QQ,而电脑加速则最多只有0.5天。我尚不清楚3GQQ算不算手机QQ,但是我实践中是不算的,然而登录记录上看属于手机QQ的,那么应该是我的每2小时更换一次登录IP的缘故吧。现在很容易的可以实现3GQQ,手机QQ似乎调试的时候遇到了一些问题。当然应该是腾讯版本比较繁多,其中一个版本遇到了问题,也就是我前面那篇文章提到的。
$s=new socketc("58.60.12.177",14000);
while($row = mysql_fetch_array($result))
{
$s->socket();
$r=rand(200,999);
$var_msg="VER=1.4&CON=1&CMD=Login&SEQ=".$r."UIN=".$row['qq_number']."&PS=".strtoupper(md5($row['qq_pw']))."&M5=1&LG=0&LC=812822641C978097&GD=5MWX2PF3FOVGTP6B&CKE=\r\n";
echo $row['qq_number']."<br/>";
$var_retu = ($s->sendmsg($var_msg)) or die("Empty receive!\n");
/*$s->sendmsg("VER=1.4&CON=1&CMD=Login&SEQ=112255&UIN=316926989&PS=61E9315B47B2851C910091FB5AF495C2&M5=1&LG=0&LC=812822641C978097&GD=5MWX2PF3FOVGTP6B&CKE=\r\n");*/
print_r($var_retu);
$vars_retu = explode('&', $var_retu);
if(strpos($vars_retu[1],"VERIFYCODE"))
{
$vars_vc = explode('=',$vars_retu[7]);
$vercode = @pack("H*",$vars_vc[1]);
echo "<form action='ajax_mobile.php' method='post'>";
echo "<img src='data:image/png;base64,". base64_encode($vercode)."'/>";
echo "<input type='hidden' name='_qqcode' value='".$row['qq_number']."'> </input>";
echo "<input type='text' name='_vercode'></input><input type='submit' value='验证'></input><br/>";
echo "</form>";
}
echo $var_msg."<hr/>";
$s->close();
}
嗯,这段代码是以52挂Q为蓝本的,本来我调试的时候已经写好了应答代码,只是不知道从什么时候开始好像突然被疼迅加入黑名单了,反正怎么调试疼迅的应答都是空的,我收到的都是空对象。但是奇葩的是我用的另一个代码就可以使用的。现在部署的是另一套手机QQ的代码,这里就不贴出来了。上面这个代码我本地在无法重现,也就懒得取消数据库依赖以及服务器部署测试了。(起初大约一两个小时都是可用的,可以看到验证码,然后我还尝试着训练我验证码识别库,可以突然就不可以了,也换过几个不同的IP,socket://58.60.12.177:14000,socket://211.136.236.88:14000,http://tqq.tencent.com:8000,http://mconn.tencent.com:14000,http://kconn.tencent.com:21001,我试验过前面两个,后面的懒得实验,因为我已经可以满足需求也没必要这么折腾)。