X Tutup
Skip to content

Commit fe954bf

Browse files
committed
深入分析WebQQ登录
1 parent c837f99 commit fe954bf

File tree

2 files changed

+80
-27
lines changed

2 files changed

+80
-27
lines changed

web_qq.py

Lines changed: 80 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,19 @@
44
import requests
55
import re
66
import json
7+
import random
8+
import time
9+
import os
710

811

912
# 入口
1013
url_root = 'https://ui.ptlogin2.qq.com/cgi-bin/login?daid=164&target=self&style=16&mibao_css=m_webqq&appid=501004106&enable_qlogin=0&no_verifyimg=1&s_url=http%3A%2F%2Fw.qq.com%2Fproxy.html&f_url=loginerroralert&strong_login=1&login_state=10&t=20131024001'
1114

1215
# 验证参数
13-
url_check = 'https://ssl.ptlogin2.qq.com/check?pt_tea=1&uin=123456&appid=501004106&js_ver=10125&js_type=0&login_sig=&u1=http%3A%2F%2Fw.qq.com%2Fproxy.html&r=0.5067279115319252'
16+
url_check = 'https://ssl.ptlogin2.qq.com/check'
17+
18+
# 图形验证码
19+
url_img_verify = 'https://ssl.captcha.qq.com/getimage?aid=501004106&r=0.746980357915163&uin=555555&cap_cd=Yktn0uE_UcyPqpvIbJe99ncYNR1jVUbobBraaII7JI5aTuzo5UJzsA**'
1420

1521
# 登录页的url
1622
url_login = 'https://ssl.ptlogin2.qq.com/login'
@@ -19,35 +25,41 @@
1925
header = {
2026
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36'}
2127

28+
# 加密salt
29+
salt = ''
30+
2231
# 登录需要的参数
2332
payload = {
24-
'u': '123456',
33+
'u': '234567',
2534
'p': '2rDrq7sBKdqkqzHgyntOBpaM6p8RAAcBpEio3*UCWuMNiG0LUw6WRsKTDsps2GJ6vAf1CPd-HoNl-QFekDH9Lfn54h1KOvOZeQlARGNPON0JECRoSUF1*8kOezqzRqBFMVVPM5cMJ3PFjn00*5KbpSHkHAJHF9AV3kV-JKE0iChfjaXcOBkRKv75mM2j8RQByBz0KFPssmrgKqPIGGatXw__',
26-
'verifycode': '!NQA',
35+
# 'verifycode': '!NQA',
36+
'verifycode': '!QYD',
2737
# 隐藏域表单参数-------------start
28-
'webqq_type': 10, # 10: "在线",20: "离线",30: "离开",40: "隐身",50: "忙碌",60: "Q我吧",70: "请勿打扰",
29-
'remember_uin': 1,
30-
'login2qq': 1,
31-
'aid': 501004106,
38+
'webqq_type': '10', # 10: "在线",20: "离线",30: "离开",40: "隐身",50: "忙碌",60: "Q我吧",70: "请勿打扰",
39+
'remember_uin': '1',
40+
'login2qq': '1',
41+
'aid': '501004106',
3242
'u1': 'http://w.qq.com/proxy.html?login2qq=1&webqq_type=10',
33-
'h': 1,
34-
'ptredirect': 0,
35-
'ptlang': 2052,
36-
'daid': 164,
37-
'from_ui': 1,
38-
'pttype': 1,
43+
'h': '1',
44+
'ptredirect': '0',
45+
'ptlang': '2052',
46+
'daid': '164',
47+
'from_ui': '1',
48+
'pttype': '1',
3949
'dumy': '',
4050
'fp': 'loginerroralert',
4151
# 隐藏域表单参数-------------end
42-
'action': '0-12-229270',
52+
'action': '0-21-27455',
53+
# 前两个参数初始值[0, 0]分别对应鼠标点击,键盘按下的次数,最后一个是点击登录按钮与页面初次加载的时间差
54+
# 贱人,这明显是记录用户行为的~~腾讯的人品可见一斑
4355
'mibao_css': 'm_webqq',
44-
't': 1,
45-
'g': 1,
46-
'js_type': 0,
47-
'js_ver': 10125,
56+
't': '1',
57+
'g': '1',
58+
'js_type': '0',
59+
'js_ver': '10125',
4860
'login_sig': '',
49-
'pt_randsalt': 0,
50-
'pt_vcode_v1': 0,
61+
'pt_randsalt': '0',
62+
'pt_vcode_v1': '0',
5163
'pt_verifysession_v1': 'e8dd4fef1f230072429cae05732530ef5d7df5fa61660a7311235e2315409046d556365705db19ae32cd082739370abd93a5f90e5a174a5a',
5264
}
5365

@@ -76,8 +88,45 @@ def parse_hide_params(html):
7688

7789

7890
def get_check():
79-
response = s.get(url_check, headers=header)
80-
return response.content
91+
"""
92+
获取验证信息
93+
:return:
94+
"""
95+
check_payload = {
96+
'pt_tea': '1', # 固定值:1
97+
'uin': payload['u'],
98+
'appid': payload['aid'],
99+
'js_ver': 10125, # 固定值
100+
'js_type': 0, # 固定值
101+
'login_sig': '', # 固定值
102+
'u1': 'http://w.qq.com/proxy.html', # 固定值
103+
'r': random.random()
104+
}
105+
# 具体参数参考607行[https://ui.ptlogin2.qq.com/js/10125/mq_comm.js]
106+
response = s.get(url_check, params=check_payload, headers=header)
107+
check_dict = response.content
108+
payload['verifycode'] = check_dict.split(',')[1].strip('\'')
109+
salt = check_dict.split(',')[2].strip('\'')
110+
payload['pt_verifysession_v1'] = check_dict.split(',')[3].strip('\'')
111+
112+
113+
def get_img_verify():
114+
"""
115+
获取图形验证码
116+
:return:
117+
"""
118+
img_payload = {
119+
'aid': payload['aid'],
120+
'r': random.random(),
121+
'uin': payload['u'],
122+
'cap_cd': payload['pt_verifysession_v1']
123+
}
124+
img_name = os.path.split(os.path.realpath(__file__))[0] + '/static/QQImgVerify/' + str(time.time()) + '.jpg'
125+
img_ret = s.get(url_check, params=img_payload, headers=header)
126+
with open(img_name, 'wb') as f:
127+
f.write(img_ret.content)
128+
print img_name
129+
return img_name
81130

82131

83132
def login():
@@ -90,13 +139,17 @@ def login():
90139

91140

92141
if __name__ == "__main__":
142+
# 获取隐藏域表单参数
93143
params_html = get_hide_params_html()
94144
params = parse_hide_params(params_html)
95-
96-
print dict(json.loads(params))
97-
check_dict = get_check()
98-
payload['pt_verifysession_v1'] = check_dict.split(',')[3]
99-
145+
payload_hide_params = dict(json.loads(params))
146+
print payload_hide_params
147+
payload = dict(payload, **payload_hide_params)
148+
# 获取验证参数
149+
get_check()
150+
151+
print json.dumps(payload, ensure_ascii=False, indent=4)
152+
# 登录
100153
result = login()
101154
print result
102155

0 commit comments

Comments
 (0)
X Tutup