仓库:MuZiCul/QQScanLogin(原创)· 语言:Python · 定位:程序化模拟 QQ 扫码登录,驱动王者荣耀活动接口
注:仓库 README 描述为"使用摄像头扫描二维码登录QQ",但实际代码是纯程序化模拟 QQ 扫码登录流程(获取二维码 → 轮询扫码状态 → 换取登录 Cookie),并调用王者荣耀(pvp.qq.com 体验服)活动接口。不涉及摄像头。
login())if os.path.exists('cookie.txt'):
# 读取本地 Cookie 直接复用
self.cookies = json.loads(open('cookie.txt').read())
self.skey = d.get('skey')
self.get_bkn()
# 请求王者荣耀活动接口(smoba.ams.game.qq.com)
url = 'https://smoba.ams.game.qq.com/ams/ame/amesvr?...sServiceDepartment=group_b...'
r = requests.post(url, headers=self.headers, data={'bkn': self.bkn}, cookies=self.cookies)
else:
self.img_get() # 首次使用,走扫码登录
img_get() / get_state())https://ssl.ptlogin2.qq.com/ptqrshow 获取二维码(appid=21000501,u1 指向 pvp.qq.com 王者活动页)qrsig,通过 get_token() 计算 ptqrtoken(经典的 t += (t<<5) + ord(ch) 哈希算法)get_state() 每 3 秒轮询 ptqrlogin 接口,解析返回文本判断二维码状态:二维码未失效 / 二维码认证中 / 二维码已失效 / 登录成功check_sig 接口(ptlogin2.game.qq.com)换取 skey 等正式 Cookie,写入 cookie.txtdef get_bkn(self):
e = str(self.skey); t = 5381; n = 0
while n < len(e):
t += (t << 5) + ord(e[n]) # 经典 BKN/hash 算法
n += 1
self.bkn = t & 2147483647
| 技术点 | 说明 |
|---|---|
| 二维码登录协议 | ptqrshow / ptqrlogin / check_sig 三接口串接 |
| BKN 计算 | 基于 skey 的位运算哈希 |
| Cookie 持久化 | JSON 存本地复用,避免重复扫码 |
| 活动接口 | 直接 POST smoba.ams.game.qq.com 驱动王者活动 |
这个项目的真实价值在于逆向 QQ 登录协议:完整复刻了扫码登录的请求链(取码 → 轮询 → 换票 → 建会话),并把登录态直接用于驱动王者荣耀活动接口——这和同作者的 WZRYTYF(体验服兑换)是同一技术体系。对想学习 QQ 登录逆向/扫码协议复刻的开发者是很好的参考。
依赖硬编码 Cookie 与接口参数,接口变更后需重新适配;请仅在合法授权场景使用。