目录
前言
需要成品请直接看文章结尾,包含扫码控号,生成小马,获取Skey等各种功能
QQKey,顾名思义就是QQ的一种密钥,与密码不同,QQKey可以实现直接式登录QQ的各种业务,权限相当与密码会更高,且无需进行各种号主认证
一、通过网页抓包进行观察
Step 1. 迈出第一步
打开QQ空间后按下F12打开开发者控制台,点开网络后刷新观察
Step 2. 获取QQ号
通过对每个请求观察找到pt_get_uins
这个请求,发现其返回的正是我们所登录的QQ号
加以观察,发现pt_local_tk
这个未知的值,此时,就需要倒推回去了
Step 3. 获取pt_local_tk
继续往前看,发现xlogin
请求返回的Set-Cookie就返回了我们正需要的pt_local_tk
值
稍微比较一下,发现正好对应刚刚pt_get_uins
请求内的pt_local_tk
这时,我们就正式搞定获取QQ号和pt_local_tk了
Step 4. 获取QQKey(Clientkey)
接下来就是我们最重要的获取QQKey了
QQKey,真实名称其实叫ClientKey,因为功能性被称为了QQKey
点击你的头像进行登录,此时又会蹦出来一大堆请求,别慌,一般像这种有目的请求一般还是比较好找的
观察请求,发现pt_get_st
这个请求看起来比较可疑,观察请求,发现我们的QQKey就在请求的Set-Cookie里
至此,获取QQKey的所有步骤已经完成,接下来就是程序实现了
二、程序实现
注意在请求后续QQ号和QQKey时需带上Headers
Referer: https://xui.ptlogin2.qq.com/
Host: localhost.ptlogin2.qq.com:4301
import sys
import requests
import re
import json
import os
os.system("title QQ Clientkey 获取器")
print("[Info] 欢迎使用 QQ Clientkey 获取器!")
print("[Tip] 在刚登录QQ时获取可能会出现如无法获取key的情况,这时请重启工具获取!")
session = requests.session()
try:
print("[Info] 正在获取pt_local_token...")
login_htm = session.get("https://xui.ptlogin2.qq.com/cgi-bin/xlogin?s_url=https://qzs.qq.com/qzone/v5/loginsucc.html?para=izone")
q_cookies = requests.utils.dict_from_cookiejar(login_htm.cookies)
pt_local_token = q_cookies.get("pt_local_token")
pt_login_sig = q_cookies.get("pt_login_sig")
print(f"[+] pt_local_token={pt_local_token}\n[+] pt_local_sig={pt_login_sig}")
params = {"callback":"ptui_getuins_CB",
"r":"0.8987470931280881",
"pt_local_tk":pt_local_token}
cookies = q_cookies
headers = {"Referer":"https://xui.ptlogin2.qq.com/",
"Host":"localhost.ptlogin2.qq.com:4301",
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36 Edg/123.0.0.0"}
except Exception as e:
print(f"[ERROR] 获取pt_local_token时发生错误,原因:{e}")
input()
sys.exit(0)
try:
print("[Info] 正在获取本机登录QQ号..")
get_uin = session.get("https://localhost.ptlogin2.qq.com:4301/pt_get_uins",params=params,cookies=cookies,headers=headers).text
uin_list = re.findall(r'\[([^\[\]]*)\]', get_uin)[0]
split_list = list(map(lambda i:i if i[0] == '{' else '{'+i,uin_list.split(',{')))
uin = None
nickname = None
if len(split_list) > 1:
print("[Info] 检测到您正在多开QQ,将使用第一个QQ号获取")
uin_list = json.loads(json.loads(json.dumps(split_list[0])))
uin = uin_list.get("uin")
nickname = uin_list.get("nickname")
else:
uin = json.loads(uin_list).get('uin')
nickname = json.loads(uin_list).get('nickname')
print(f"[+] uin={uin}\n[+] nickname={nickname}")
clientkey_params = {"clientuin":uin,
"r":"0.14246048393632815",
"pt_local_tk":pt_local_token,
"callback":"__jp0"}
print("[Info] 正在获取clientkey...")
clientkey_get = session.get("https://localhost.ptlogin2.qq.com:4301/pt_get_st",cookies=cookies,headers=headers,params=clientkey_params)
clientkey_cookies = requests.utils.dict_from_cookiejar(clientkey_get.cookies)
clientkey = clientkey_cookies.get("clientkey")
if not clientkey:
print("\033[33m[Warning]未获取到clientkey,请尝试稍后重启工具获取!\033[0m")
else:
print(f"[+] clientkey={clientkey}")
except Exception as e:
print(f"[ERROR] 获取clientkey发生错误,请检查是否开启QQ!")
input()
sys.exit(0)
while True:
pass
执行效果
三、总结
如需完整代码(获取Skey,Pskey,QQ空间&QQ群突破地址以及生成小马等各种功能),可参见我的Github仓库
其中也包含着扫码登录实现控号的功能,如果觉得好用不妨给我打个Star:)
新人第一次写文章,求赞!
就这样,散会!