首页
社区
课程
招聘
[旧帖] [原创]程序模拟用户登陆腾讯微博 0.00雪花
2011-6-28 17:53 3518

[旧帖] [原创]程序模拟用户登陆腾讯微博 0.00雪花

2011-6-28 17:53
3518
因为需要针对腾讯微博编写爬虫,所以第一步肯定要登陆到微博上.腾讯提供的api接口.无奈接口的显示条件太多.所以就想模拟用户的登陆来进入页面.过程还是蛮好玩的.腾讯在登陆过程中用了多次随机加密,,多次跳转.不过最终还是成功的进入了.
写下模拟登陆的过程…
第一次发帖.希望大家多多指教啊…

打开抓包工具,进入登陆页面. http://ui.ptlogin2.qq.com/login_weibo.html发现下载了

http://ui.ptlogin2.qq.com/login_t.js
http://xui.ptlogin2.qq.com/wb/qlogin_t.html?v=10060201
http://ui.ptlogin2.qq.com/js/v.js?r=0.42120279716782455
http://ui.ptlogin2.qq.com/clearcache.html
http://ui.ptlogin2.qq.com/login_weibo.html
http://imgcache.qq.com/ptlogin/ac/v6/js/qlogin_t.js?v=1.1
2秒后又请求了
http://ptlogin2.qq.com/check?uin=>账号<&appid=46000101&r=0.5011474802941705

不管html页面 只看js的话.

http://ui.ptlogin2.qq.com/login_t.js 返回的是一个js
http://imgcache.qq.com/ptlogin/ac/v6/js/qlogin_t.js?v=1.1 返回的是  ptuiV(10062901);
http://ptlogin2.qq.com/check?uin=>账号<&appid=46000101&r=0.5011474802941705
返回的是类似ptui_checkVC('0','!2HV');的信息

估计这三个地方比较重要..,而http://ptlogin2.qq.com/check?uin=>账号<&appid=46000101&r=0.5011474802941705为后请求 应该在js中有调用

搜索下js的源码.

var B="http://ptlogin2."+g_domain+"/check?uin="+C+"&appid="+D+"&r="+Math.random();

可得知.r为随机数.而appid为46000101,固定值.uin为账号.而返回的ptui_checkVC('0','!2HV');则是调用ptui_checkVC函数.进行分析.得知.

是将返回值复制给页面的一个id为verifyinput隐藏域.用来在提交登陆的时候传值.

登陆.抓包可得.请求方式为GET.完整的URL如下
http://ptlogin2.qq.com/login?u=>账号<&p=F444E63B35E61AD95EA590E0CE11234B&verifycode=!LTK&aid=46000101&u1=http%3A%2F%2Ft.qq.com&h=1&from_ui=1&fp=loginerroralert

通过页面源码可知.

U为用户名
P为密码.加密后
Verifycode为刚才获取的值
Aid为固定值
u1=http%3A%2F%2Ft.qq.com&h=1&from_ui=1&fp=loginerroralert未知,

再次抓包
http://ptlogin2.qq.com/login?u=>账号<&p=2A330E728720E2173197330E202A6642&verifycode=!K2O&aid=46000101&u1=http%3A%2F%2Ft.qq.com&h=1&from_ui=1&fp=loginerroralert

发现.
P 和Verifycode和上次不同.其他值不变.暂时不管.而Verifycode我们已经知道是怎么来的了重点关注P

分析页面源码,发现在登录时  实际上市调用了ptui_checkValidate这个函数而该函数又调用了ajax_Submit.这个函数.

if(E[A].name=="p"){
var F="";F+=E.verifycode.value;
F=F.toUpperCase();
B+=md5(md5_3(E.p.value)+F)

简单看下 可以得知p是由MD5_3的密码加密后再和验证串联后再次加密获得..继续跟进.
可以得知腾讯的加密方式还是很复杂的..共有
md5_3
md5
hex_md5
str_md5
core_md5
md5_cmn
md5_ff
md5_gg
md5_hh
md5_ii
safe_add
bit_rol
str2binl
binl2str
binl2hex
等函数.不用仔细看了 直接转成JAVA来测试一下吧.
返回 ptuiCB('0','0','http://t.qq.com','0','登录成功!');
返回登录成功.但是这时还不能进入个人的主页.而且看着还像是函数.难道还是再次执行.在js文件中查找 果然…

if(C!=""||D==0){
var A=new Date();
A.setHours(A.getHours()+24*30);
document.cookie="ptui_loginuin2="+escape(f_u.value)+";expires ="+A.toGMTString()+";domain =ui.ptlogin2.qq.com";
top.location.href=C;return
}

发现为设置cookie.既然是设置cookie.我们就抓包来看
请求

登陆请求

Cookie: pt2gguin=o0>账号<; pgv_pvid=8173925820; pgv_flv=10.0; pgv_r_cookie=1162840646389; o_cookie=>账号<; ac=1,009,008; uin=o0>账号<; skey=@rAt7FjYfB; ptisp=ctc; pgv_info=ssid=s9544862000; ptcz=8212ca17ace4b736761ff883f0b20a6bf77dcdcc52fee257377f143723b3ce5c; ptui_qstatus=1; ptvfsession=71c028e3b65b11ea1c3be3c00c7f8e0b74d39b3e8b6ab5f9b21a6899c1bc979c54b80640181bb90170196609ba4f5382; ptuserinfo=e29982e58fb3e7bebd

登陆返回

Set-Cookie: pt2gguin=o0>账号<; EXPIRES=Fri, 02-Jan-2020 00:00:00 GMT; PATH=/; DOMAIN=qq.com;
Set-Cookie: uin=o0XXXXXXX; PATH=/; DOMAIN=qq.com;
Set-Cookie: skey=@rAt7FjYfB; PATH=/; DOMAIN=qq.com;
Set-Cookie: clientuin=; EXPIRES=Fri, 02-Jan-1970 00:00:00 GMT; PATH=/; DOMAIN=qq.com;
Set-Cookie: clientkey=; EXPIRES=Fri, 02-Jan-1970 00:00:00 GMT; PATH=/; DOMAIN=qq.com;
Set-Cookie: zzpaneluin=; EXPIRES=Fri, 02-Jan-1970 00:00:00 GMT; PATH=/; DOMAIN=qq.com;
Set-Cookie: zzpanelkey=; EXPIRES=Fri, 02-Jan-1970 00:00:00 GMT; PATH=/; DOMAIN=qq.com;
Set-Cookie: ptisp=ctc; PATH=/; DOMAIN=qq.com;
Set-Cookie: ptuserinfo=e29982e58fb3e7bebd; PATH=/; DOMAIN=ptlogin2.qq.com;

跳转请求

Cookie: uin=o0>账号<; skey=@rAt7FjYfB; ptisp=ctc; pgv_info=ssid=s3593389632; pt2gguin=o0XXXXXXX; mb_reg_from=8

有几个字段不一样.是从请求头中新返回的..设置进去..

..登陆成功,进入主页.至此 就通过程序模拟用户的登陆,并成功的绕做了腾讯的OAUTH验证..

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
点赞5
打赏
分享
最新回复 (13)
雪    币: 143
活跃值: (61)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
weizehua 1 2011-6-28 19:26
2
0
高手!!!!!!!;
雪    币: 284
活跃值: (106)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
鹿剑 3 2011-6-28 19:37
3
0
Webbrowser控件模拟点击登陆岂不是更方便,之后的自动恢复等都是小case
雪    币: 386
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ttgood 2011-6-28 19:50
4
0
高手继续! 。。。
雪    币: 677
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hezhang 2011-6-28 19:51
5
0
学习了    1111
雪    币: 59
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
aslprince 2011-6-28 20:08
6
0
是WEB QQ 登入的么??

后面抓到的包没加密??
雪    币: 175
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
fenggui 2011-6-28 22:14
7
0
web qq 登录密码以前是,不知道现在还是不。  MD5(MD5(MD5(toUper(secret))))
看下js应该知道
雪    币: 24
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
ntdom 2011-6-28 22:51
8
0
这里的对密码的加密方式是MD5(MD5(密码)+随机数)
而在最后的几次抓包的时候我已经能够得到服务器返回的正确登录了.
只是不能正确的获取数据.最后的只是比较数据包的差异
发现时服务器返回的值没有设置到cookie里面...所以那个数据是没有加密的.
雪    币: 24
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
ntdom 2011-6-28 22:57
9
0
Webbrowser控件是.net下的么,这是个模拟浏览器的控件吧?
实际上如果直接用模拟浏览器的话也是可以模拟登录的.如java中的htmlunit.
但是那个工具的效率比较低 而且不是很符合自己的应用 所以就自己分析了一下腾讯微博登录的数据包.
只要登录后拿到session.以后的操作就好办了 呵呵..
雪    币: 49
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yonet 2011-6-29 00:34
10
0
分析的很详细,学习了。。
雪    币: 111
活跃值: (100)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
ronging 2011-6-29 22:12
11
0
同意,这才是王道啊。WebBrowser控件是IE带的,和.Net无关。

看了楼主的文章,有点不大明白楼主到底是怎么做的,是用TCP、IP做的?能show一些代码嘛?
雪    币: 24
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
ntdom 2011-6-30 08:21
12
0
oh ie带的就不行了...
我是要用程序登陆进去 然后实时的获取微博页面的源码
然后做数据挖掘的 ie的工具不行 必须自己用代码实现....
而且模拟登陆的话可以自己来维持session的实效性.同时能绕过api接口的次数限定.
因为逆向出来请求来做的话 服务器看来 你就是用户

这里代码不方便公布..
作用么 举个例子就是这两天论坛里有个人共享刷分的工具.
我也做了一个 就是分析了下看雪的登陆请求 写的...
雪    币: 198
活跃值: (103)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yamidie 2011-6-30 08:43
13
0
查下看雪多少!
雪    币: 0
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
chesion 2011-6-30 14:42
14
0
谢谢 楼主 分享 哇啦啦
游客
登录 | 注册 方可回帖
返回