|
楼主 |
发表于 2011-11-3 23:35:00
|
显示全部楼层
本帖最后由 qqmmcc 于 2011-11-4 12:37 编辑
二. 登录QQ空间(GET)
2.1 分析
透过抓包分析可以发现,登录QQ是采用GET方式,而且分为两步:
第一步:输入QQ号获取验证码
- http://ptlogin2.qq.com/check?uin=QQ号&appid=15000101&ptlang=2052&r=0.8782269803101405
复制代码
第一步 GET 提交后,服务器会有两种情况返回
ptui_checkVC('0','!5F8'); // 此信息不需要手动输入验证码
//此信息需要再次提交获取图片验证码手动输入
ptui_checkVC('1','6c052b276914a067a775de1cde3d4f995ecce1a2c0258f88');
“6c052b276914a067a775de1cde3d4f995ecce1a2c0258f88” 需要此key提交获取验证码,以保证验证码不失效 |
根据此特点编写获取验证码函数 verifycode = function(){
var url = "http://ptlogin2.qq.com/check?
uin="+qq+"&appid=15000101&ptlang=2052&r="+math.random()
var refter = "http://qzone.qq.com/"
var temp = http.get(url,,refter)
wb.write(temp)
if(temp){temp1 = string.match(temp,"\'(.*?)\'")}
win.delay(100)
if(temp1=0){winform.code.text=string.match(temp,"\,\'(.*?)\'") }
if(temp1=1){temp2 = string.match(temp,"\,\'(.*?)\'")}
if(temp2){
var url = "http://captcha.qq.com/getimage?aid=15000101&r="+ math.random() +"&uin="+ qq +"&vc_type="+ temp2 +""
winform.picturebox.image = http.get(url)
}
}
|
第二步:输入密码及验证码,然后登录
- http://ptlogin2.qq.com/login?ptlang=2052&u=QQ号&p=MD5加密的密码&verifycode=!5D8&aid=15000101&u1=http%3A%2F%2Fimgcache.qq.com%2Fqzone%2Fv5%2Floginsucc.html%3Fpara%3Dizone&ptredirect=1&h=1&from_ui=1&dumy=&fp=loginerroralert&action=3-16-58672&dummy=
复制代码
登录的最重要一步,就是MD5加密的密码,透过JS 可以看到此加密的密码算法是:
- if (D[B].name == "p") {
- var E = D.verifycode.value;//验证码
- E = E.toUpperCase();//字符转大写
- A += md5(md5_3(D.p.value) + E)
- }
复制代码
用aardio代码写出此JS的加密算法:
import string.md5;
md5_3 =function(str){
var a,b,c = string.md5(str)
var a,b,c = string.md5(c)
var a,b,c = string.md5(c)
return a;
}
var qqPass = string.md5(md5_3(password)+string.upper(verifycode))
|
2.2 登录代码
import win.ui;
/*DSG{{*/
var winform = win.form( text="aardio Form";right=658;bottom=601 )
winform.add(
button2={ bottom=402;right=127;left=31;top=364;font=LOGFONT( name='宋体' );z=9;text="跳转";cls="button" };
groupbox4={ bottom=202;right=146;left=10;top=144;z=2;text="输入验证码";edge=1;cls="groupbox" };
code={ bottom=192;text="";left=20;top=163;font=LOGFONT( name='宋体' );z=11;right=124;edge=1;cls="edit" };
qqpass={ bottom=120;text="";left=27;top=91;font=LOGFONT( name='宋体' );z=6;right=127;password=1;edge=1;cls="edit" };
qqnum={ bottom=60;text="";left=27;top=34;font=LOGFONT( name='宋体' );z=5;right=131;edge=1;cls="edit" };
login={ bottom=349;right=125;left=29;top=311;font=LOGFONT( name='宋体' );z=7;text="登录";cls="button" };
groupbox2={ bottom=70;right=147;left=11;top=18;z=4;text="QQ号";edge=1;cls="groupbox" };
edit3={ vscroll=1;text="";left=157;multiline=1;top=21;font=LOGFONT( name='宋体' );bottom=401;z=8;right=638;hscroll=1;edge=1;cls="edit" };
picturebox={ bottom=287;notify=1;right=138;left=18;top=231;font=LOGFONT( name='宋体' );transparent=1;border=1;z=10;text="picturebox";cls="picturebox" };
groupbox={ bottom=300;right=150;left=7;top=212;z=3;text="点击图片获取验证码";edge=1;cls="groupbox" };
groupbox3={ bottom=131;right=148;left=10;top=75;z=1;text="QQ密码";edge=1;cls="groupbox" }
)
/*}}*/
import web.form;
var wb = web.form( winform.edit3);//创建web窗体
math.randomize()
import string.md5;
md5_3 =function(str){
var a,b,c = string.md5(str)
var a,b,c = string.md5(c)
var a,b,c = string.md5(c)
return a;
}
import inet.http;
http = inet.http();//创建http对象
//获取验证码函数
verifycode = function(){
var url = "http://ptlogin2.qq.com/check?
uin="+qq+"&appid=15000101&ptlang=2052&r="+math.random()
var refter = "http://qzone.qq.com/"
var temp = http.get(url,,refter)
wb.write(temp)
if(temp){temp1 = string.match(temp,"\'(.*?)\'")}
win.delay(100)
if(temp1=0){winform.code.text=string.match(temp,"\,\'(.*?)\'") }
if(temp1=1){temp2 = string.match(temp,"\,\'(.*?)\'")}
if(temp2){
var url = "http://captcha.qq.com/getimage?aid=15000101&r="+ math.random() +"&uin="+ qq +"&vc_type="+ temp2 +""
winform.picturebox.image = http.get(url)
}
}
//获取输入的QQ号
winform.qqnum.oncommand = function(id,event){
qq= winform.qqnum.text
}
//获取验证码图片
winform.picturebox.oncommand = function(id,event){
inet.clearCache("qq.com")
if(!qq){
winform.msgbox("请输入QQ号")
}else {
verifycode()
}
}
//登录
winform.login.oncommand = function(id,event){
var password = winform.qqpass.text
var code = string.upper(winform.code.text);
var jiami = string.md5(md5_3(password)+code)
var html = http.get("http://ptlogin2.qq.com/login?ptlang=2052&u="+ qq +"&p="+ jiami +"&verifycode="+ code +"&aid=15000101&u1=http%3A%2F%2Fimgcache.qq.com%2Fqzone%2Fv5%2Floginsucc.html%3Fpara%3Dizone&ptredirect=1&h=1&from_ui=1&dumy=&fp=loginerroralert")
if(html){
wb.write(string.fromto( html ))
}
if(string.find(string.fromto( html ),"登录成功")){
wb.go("http://qzone.qq.com")
}else {
winform.msgbox("登录失败")
}
}
//跳转
winform.button2.oncommand = function(id,event){
wb.go("http://my.qq.com/")
}
winform.show(true)
//进入消息循环
win.loopMessage();
return winform,wb;
|
|