PHP模拟QQ登录

在微博上看到网友使用PHP实现自动挂QQ,就自我思考了下模拟登录的方式。在PHP中CURL模拟提交则可以很简单的实现登录动作,这个方式在ASP则较难实现,使用JS倒是有点思路,但JS不能跨域限制就让我傻眼了。不过至少那位网友也是使用了PHP的curl实现的。好,让咱这个PHP的门外汉也试试吧。

PHP我确实是刚看,至于什么是curl,上php官网查,虽然不明白到底是什么意思,但照葫芦画瓢还是会的,共享万岁。因为是由程序来自动提交登录的,所有JS在程序里面就没什么用处了,而且要找个流量小的,太大程序下载的速度就会非常慢,最后定在使用3gqq登录方式。

跟着CURL的参数来,找个提交登录的3gqq的登陆URL,http://pt5.3g.qq.com/,因为网页格式是wap格式的,所以只有使用chrome或者opera才能访问,否则都会出现下载提示,IE8也不能访问,IE9不知道会不会改善。查看源码,会看到就几个输入框和几个隐藏的输入框,相信看到这里的你知道是神马个东西了。

<?php 
$qqno='你的QQ';
$qqpw='QQ密码';
$cookie = dirname(__FILE__).'/cookie.txt';
$post = array(
	'login_url' => 'http://pt.3g.qq.com/s?sid=ATAll43N7ZULRQ5V8zdfojol&aid=nLogin',
	'q_from' => '',
	'loginTitle' => 'login',
	'bid' => '0',
	'qq' => $qqno,
	'pwd' => $qqpw,
	'loginType' => '1',
	'loginsubmit' => 'login',
);
$curl = curl_init('http://pt.3g.qq.com/handleLogin?aid=nLoginHandle&sid=ATAll43N7ZULRQ5V8zdfojol');
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie); // ?Cookie
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post));
$result = curl_exec($curl);
curl_close($curl);
?>

我在测试的时候主要是因为cookie没有设置,因为总是想着这不是在客户端提交,记录Cookie也没有什么用,就删除了Cookie参数,试了好多次之后加上Cookie就成功了。

另外,QQ登录的时候会对你的IP进行检测,如果登录的IP地址不是经常登录的IP地址,则需要输入验证码,此时上面的模拟登录就不能用了,jucelin也没想到什么好的方式解决。不过,可以手动尝试在http://pt5.3g.qq.com/上登录,多登录几次,验证码就不会再有了,当然这里的几次不是登录就退出再登录再退出那么简单,估计至少时间跨度要大点,登录2-3次基本上就OK了。

其实使用SID登录也是一种模拟QQ登录的方式,SID码来自于登录后的URL中,每次登录都会分配唯一的SID码,这也是3gqq全站登录的方式,因为要考虑有的手机不支持Cookie(这里突然想到腾讯要是使用session,会是什么样的状况),但又要实现全站登录的需求。

OK,通过SID码登录就不多说了,相信聪明的你肯定能想到。 😆

PHP模拟QQ登录

因为这个程序一个多星期之前就写了,就进行了一些拓展,感兴趣的可以看看我写的这个实例:QQ挂机宝(好吧,我承认这个名字取得由点鸟,但我确实没想到啥名,凑合着叫叫吧)。这个实例主要重点放在了功能实现上,所有什么安全措施,什么用户体验,什么程序运行效率都没去弄,,所以…你懂的,如果你发现功能上不对的地方记得给我留言。

如果你有更好的思路或者更深的想法,欢迎交流,例如用来发QQ消息,发微博什么的,虽然上面2项都测试成功了。

47 thoughts on “PHP模拟QQ登录

  1. Pingback引用通告: 升级在线挂QQ系统-QQ挂机宝 | Jucelin

  2. PanFake

    我试了上面的代码,并修改了post地址,在本地测试的时候成功,但一挪到vps上就不行了,因为这段代码没提供具体的错误信息,我也没法判断。另外,能否把做好的这个php源码发给我,我想学习下……谢谢了

    回复
    1. jucelin 文章作者

      上面就是那个做好的代码哦,呵呵。你的VPS肯定没有开启CURL。看下php的环境就知道了。

      回复
        1. jucelin 文章作者

          不需要了。另外失败的原因也有可能是你的VPS没有挂过你的QQ,当你登录QQ的时候被认为是可疑的登录,此时需要输入验证码,所以也会造成登录失败的。

          回复
          1. PanFake

            我怀疑是这个问题- -怎么解决…
            命令行真心很难操控啊……

          2. jucelin 文章作者

            可以找找其他的登录方式,别人解决了,我也没时间去捣腾这个,所以就没找了,如果找到也可以告诉我下,呵呵

  3. wotry

    很酷!可惜对php一窍不通,复制你代码测试没有成功,本地测试的。
    什么时候写一个用sid登录的文章,让我们也瞻仰瞻仰。

    回复
        1. jucelin 文章作者

          ‘login_url’变了应该,试试这个http://pt5.3g.qq.com/s?sid=ARrEODNsERTlzOveB4RlEN9t&aid=nLogin

          回复
          1. wotry

            是变了,修改后还是不能登录,还有就是curl_init这个函数中的url是什么意思?是表单中action的数据吗?如果换的花,后边sid是随机的。

          2. jucelin 文章作者

            这个看官方的文档应该比较清楚,我也是初学者,呵呵http://cn.php.net/curl。

          3. localtest(枕头)

            查看登陆页面(http://pt5.3g.qq.com/)源码:
            form标签中action字段的sid每刷新一次,都变化一次;
            login_url字段直接http://pt.3g.qq.com/s?aid=nLogin 这个就行了;
            ‘loginsubmit’ => ‘login’值为login,任意值应该都行吧?因为已经执行了提交(经测试值为:0 可行 😆 )

          4. jucelin 文章作者

            嗯,是的。看来你是自己看过了。

          5. localtest(枕头)

            我觉得可以这样(关于聊天):
            定时刷新在线好友,之后获取3gQQ聊天窗口内容,检测左上角内容,如果有消息的话,会有类似:
            一个小企鹅头像(消息数)
            这样的内容,检测出来后,获取链接消息内容,之后在新页面,填写相关字段,借助curl模拟提交,模拟回复信息
            这样就可以实现,模拟自动回复信息了(比如模拟消息:该QQ正在使用挂机宝挂机)

            既然可以检测出消息,获取消息,可以把获取的消息根据发送消息好友 保存起来,这样就可以防止使用挂机报挂Q丢消息了

            利用自动回复和获取内容原理,还可以根据好友发送消息内容,写一个 自动服务,或者自动聊天机器人来( 😆 )

          6. jucelin 文章作者

            哈哈,你想到的几个功能我已经测试实现了,包括发说说,发微博等。不过话说实现归实现,不上线也是在犹豫:
            1,因为这个是捡个漏洞写的,腾讯一个补丁就能搞定了;
            2,原本这个程序是挂自己的小号使用的,所以才这里公布代码,后闲来没事才整理,写个页面公布的;
            3,挂的基本上都是小号,挂的时间特意设定在凌晨1点以后,又本着不浪费服务器资源的精神,获取聊天记录的功能就价值不大了。
            最初整理的时候是想写大点,包括挂机mail提示,消息mail提示等等,后来考虑的因素多了,就搁置了。

          7. localtest(枕头)

            注册一个免费QQ号,获取聊天记录内容,检测聊天记录内容,根据内容做出相应的处理(比如对服务器做的一些操作,像备份一些东西啦,清理一些东西啦,当然这些功能得事先写好)怎么样呢,这个免费QQ可以是自己的一个专属助理QQ,用自己常用的QQ加上助理QQ,可以简单,随时实地得,比如使用手机在课件,在公交车上,发送简单指令可以在服务器上做一些操作

          8. jucelin 文章作者

            这个想法不错,哈哈,啥时候试试

          9. localtest(枕头)

            确实是借助腾讯的一个漏洞实现的,识别验证码没有试过,不知道效果怎么样,估计不太靠谱,验证码是网站的一道防机器人的有力防线,网站的安全人员肯定会有所考虑

          10. jucelin 文章作者

            我观察了下,他的验证码很多规则,不好程序破解,其实我也写不出来,呵呵

          11. localtest(枕头)

            关于挂机宝,其实呢,我觉得既然保存SID,那么就可以进行一切操作了,跟保存用户QQ密码没什么区别 😯
            你觉得呢? 😉
            不过,既然要挂机嘛,肯定得输入一些密码之类的登陆信息,尽量做好安全措施吧!
            提醒用户设置密码保护比较好

          12. jucelin 文章作者

            SID确实是类似于密码之类的,但无法修改密码和密保,所以我在挂机宝中只保存了SID。好多人挂的都是无保QQ,让他设置密保,有点不太好,所以就提了下而已。

          1. jucelin 文章作者

            不输出,主要是为了防止拿来主义者。很多人都会直接复制代码然后调试,结果什么也没输出,就会认为代码不行,正好我就是不想让这样的人用,呵呵

  4. 亨sir

    哈哈,技术不错,只是啊,不该用在QQ上
    我的重点是说,QQ只是能用来交流就可以了
    哈哈
    好文
    貌似也很忙,也没更新

    回复
    1. jucelin 文章作者

      哈哈,大公司的产品比较有吸引力,换句话说实际上也是在找一种成就感,也没恶意。
      这几天几个客户要网站,就没更新了。发现现在写代码真的很慢。

      回复
        1. jucelin 文章作者

          早上起来我也折腾了下,结果发现有个sql写错了。。。呵呵

          回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注