QQ音乐网页版登录参数全解析
大家可以关注我的 Github https://github.com/GitHub-ZC/
大家可以加入我的 QQ群
大家可以关注一下我的微信公众号:每天都有精彩资源推荐
一.首先访问QQ空间网页版。利用chrome控制台抓一下包,看一看具体提交参数。
首先我们看见访问这个链接
https://ssl.ptlogin2.qq.com/login?u=123456789&verifycode=!3EM&pt_vcode_v1=0&pt_verifysession_v1=2e3060f09b71ca20b267ab21ad475baa8749952f0ac785d525d487e641a123a47b92acab5bf40192507083fdbea117fb&p=MntTzJEwktsASZZHxF2Ncnw7H*-oUMK9bnzyFdefOAl8CJGOTvfiQGfpsi7hJQ8qc5K8eddhrKcCTO792b9zhW6RAz4KKkKAUz0z7Dm-KHxETj68Ho-qDenTIK7QClfgmcAvjkzDyHn8I1972dxXFz1XE1qX3nTiSGvwPS7I-feVEKvyQhTCDa1kSjtSZ8GXrNmVUh93YutlqI9MB6gJgXm6gCyQBy2B3bEclgDYr1-DkhpmJ6U4lfVk40OVz3Chbk1K-5V5Thmj6n5PEIycJaOW8HkHXMj-BgHMeqtml2qrm2GoMAN8fPrv9wxngDx9IcvwsWx*DoaRIcCX4g__&pt_randsalt=2&u1=https%3A%2F%2Fgraph.qq.com%2Foauth2.0%2Flogin_jump&ptredirect=0&h=1&t=1&g=1&from_ui=1&ptlang=2052&action=3-7-1660982920964&js_ver=22080914&js_type=1&login_sig=xoceG9emyg0bJ97jtStWoqMM10cwNZfK3qdpRCh0Evdo05M-7mffl6Dm0C0bt36v&pt_uistyle=40&aid=716027609&daid=383&pt_3rd_aid=100497308&ptdrvs=q88le-jw2YIbJPWzcbRCB-7Qa4ZdDv6hU04RJhihxRvwPUCBefa6ouEsHzsypHJH&sid=7448187206683891317&&o1vId=49283d5cbb01a744d46314da4608d929
u: 123456789
verifycode: !3EM
pt_vcode_v1: 0
pt_verifysession_v1: 2e3060f09b71ca20b267ab21ad475baa8749952f0ac785d525d487e641a123a47b92acab5bf40192507083fdbea117fb
p: MntTzJEwktsASZZHxF2Ncnw7H*-oUMK9bnzyFdefOAl8CJGOTvfiQGfpsi7hJQ8qc5K8eddhrKcCTO792b9zhW6RAz4KKkKAUz0z7Dm-KHxETj68Ho-qDenTIK7QClfgmcAvjkzDyHn8I1972dxXFz1XE1qX3nTiSGvwPS7I-feVEKvyQhTCDa1kSjtSZ8GXrNmVUh93YutlqI9MB6gJgXm6gCyQBy2B3bEclgDYr1-DkhpmJ6U4lfVk40OVz3Chbk1K-5V5Thmj6n5PEIycJaOW8HkHXMj-BgHMeqtml2qrm2GoMAN8fPrv9wxngDx9IcvwsWx*DoaRIcCX4g__
pt_randsalt: 2
u1: https://graph.qq.com/oauth2.0/login_jump
ptredirect: 0
h: 1
t: 1
g: 1
from_ui: 1
ptlang: 2052
action: 3-7-1660982920964
js_ver: 22080914
js_type: 1
login_sig: xoceG9emyg0bJ97jtStWoqMM10cwNZfK3qdpRCh0Evdo05M-7mffl6Dm0C0bt36v
pt_uistyle: 40
aid: 716027609
daid: 383
pt_3rd_aid: 100497308
ptdrvs: q88le-jw2YIbJPWzcbRCB-7Qa4ZdDv6hU04RJhihxRvwPUCBefa6ouEsHzsypHJH
sid: 7448187206683891317
o1vId: 49283d5cbb01a744d46314da4608d929
具体重要参数分析
u: 登陆的QQ号,和下面check的uin一致
verifycode:下面check返回的参数
pt_verifysession_v1: 下面check返回的参数
pt_randsalt: 下面返回的参数
ptdrvs: 下面返回的参数
sid:下面返回的参数
login_sig 、 o1vId 一个加密后的数据,统一环境是固定的,可以不需要
action 拼接的字符串,3-7是固定的,这个不重要,后面是事件戳
p: 加密后的密码
经过作者分析 login_sig 和 o1vId 都是浏览器固定的参数
粗略分析我们就知道哪些字段比较难搞了,u是用户名、verifycode是类似验证码的东西、pt_verifysession_v1类似id的字符串、p就应该是密码了。
我们分析的重点在verifycode、pt_verifysession_v1、P三个字段了,然后再看post请求之前的请求,发现了一个有价值的get请求:
二.检查账号接口
https://ssl.ptlogin2.qq.com/check?regmaster=&pt_tea=2&pt_vcode=1&uin=123456789&appid=716027609&js_ver=22080914&js_type=1&login_sig=xoceG9emyg0bJ97jtStWoqMM10cwNZfK3qdpRCh0Evdo05M-7mffl6Dm0C0bt36v&u1=https%3A%2F%2Fgraph.qq.com%2Foauth2.0%2Flogin_jump&r=0.6040831742269639&pt_uistyle=40&daid=383&pt_3rd_aid=100497308&o1vId=49283d5cbb01a744d46314da4608d929
ptui_checkVC(‘0’,‘!OPX’,‘\x00\x00\x00\x00\x07\x5b\xcd\x15’,‘a066e9d2a7b7e0cf7e92c68f65dd577e5e86d4512f303923e79cf9ca8fe28a2472c62eb9f78597b2af6075960c1a4b17’,‘2’,‘FSvNMi5TuSOLEcUB3KkGjdxdqp0qniDck8Hf0CQDplMA*PLVm8-zhOEjri5WTKT-’,‘4371625609126778505’)
第一个参数是验证方式,叫ptVcodeV1
第二个参数是验证码verifyCode
第三个参数是uin,其实就是输入的QQ号的十六进制编码
第四个参数是ptVerifysessionV1,也是用来验证的
第五个参数是密码加密的盐ptRandSalt
第六个参数是ptdrvs
第七个参数是sid
经过作者的分析,这个get请求已经返回verifycode、pt_verifysession_v1参数,那我们需要重点分析的是password的加密方式了。
第一个0代表不需要验证码,如果是1代表需要验证码 会走另一个流程.第二个参数和第三个参数会带入到密码加密中进行运算,再看这个请求的参数:
发现大多数都是固定参数,用自己的方法重写 r 和 uin 参数就行
三.登录参数分析
经过上面的分析 verifycode、pt_verifysession_v1参数 已经有了解决办法
我们继续看 p 参数,查找发出该请求的相应js位置
跟进之后我们可以看到加密 p 参数是这个函数
let getEncryption = function (t, e, n, o) {
n = n || "",
t = t || "";
for (var o = o ? t : l(t), t = l(w(o) + e), n = u["default"].strToBytes(n.toUpperCase(), !0), i = Number(n.length / 2).toString(16); i.length < 4;)
i = "0" + i;
u["default"].initkey(t),
n = u["default"].encrypt(o + u["default"].strToBytes(e) + i + n),
u["default"].initkey("");
for (var r = Number(n.length / 2).toString(16); r.length < 4;)
r = "0" + r;
return n = a["default"].rsa_encrypt(w(r + n)),
setTimeout(function () {
!function (t, e) {
if (!(Math.random() > (e || 1)))
try {
var n = location.protocol + "//ui.ptlogin2.qq.com/cgi-bin/report?id=" + t;
document.createElement("img").src = n
} catch (o) { }
}(488358, 1)
}, 0),
s["default"].encode(w(n)).replace(/[\/\+=]/g, function (t) {
return {
"/": "-",
"+": "*",
"=": "_"
}[t]
})
}
其中最麻烦的就是 加密 salt 的处理,经过代码的调试
经过反复的代码调试,关于 salt 获取,主要是通过 代码 加密 QQ 号获取
function (str) {
var maxLength = 16;
str = parseInt(str);
for (var hex = str.toString(16), len = hex.length, i = len; i < maxLength; i++)
hex = "0" + hex;
for (var arr = [], j = 0; j < maxLength; j += 2)
arr.push("\\x" + hex.substr(j, 2));
var result = arr.join("");
return eval('result="' + result + '"'),
result
}
具体加密的代码
https://github.com/GitHub-ZC/wp_MusicApi/blob/main/util/login_qq.js
到这里,我们就分析完 登录 的具体参数 , 但是想要获取 具体 Cookie 信息, 还是需要再 跳转 两条接口,再获取 登陆身份信息。
具体登录 Cookie 代码获取 在 GitHub 中