feat(huya): 一键网页cookie工具 - 密码->cred->铸证->bind->cookie/verify全套
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
#!/usr/bin/env python3
|
||||
"""网页版密码登录 -> 直接拿全套长 cookie(udb_cred/udb_passdata/yyuid...)。
|
||||
|
||||
用法: python tools/web_cookie_login.py <账号> <密码>
|
||||
"""
|
||||
import sys, json, re, hashlib, time, uuid
|
||||
from pathlib import Path
|
||||
|
||||
ROOT = Path(__file__).resolve().parent.parent
|
||||
sys.path.insert(0, str(ROOT))
|
||||
import requests
|
||||
from core.huya.device_fingerprint import get_huya_sdid
|
||||
|
||||
URL = "https://udblgn.huya.com/web/v2/passwordLogin"
|
||||
|
||||
|
||||
def main():
|
||||
acct, pwd = sys.argv[1], sys.argv[2]
|
||||
if not acct.startswith("hy_"):
|
||||
acct = "hy_" + acct
|
||||
sha1 = hashlib.sha1(pwd.encode()).hexdigest()
|
||||
try:
|
||||
sdid = get_huya_sdid(allow_fallback=True).sdid
|
||||
except Exception:
|
||||
sdid = "0UnHUgv0_qmfD4KAKlwzhqaKn105aUYt7oVTYd8Axc4iQSNyLE_nmgRB8tPxnndI8Th1nJ_003VaxeRFLVvpJcTJXFa3qhMVoHC9dykeCz3DWVkn9LtfFJw_Qo4kgKr8OZHDqNnuwg612sGyflFn1dutzDtufJ9ExmL1Pr7Bhq2nTk7vCmHfM2aTlTZvNeXfn"
|
||||
ctx = f"WB-{uuid.uuid4().hex}-" + uuid.uuid4().hex.upper()[:24]
|
||||
beh = json.dumps({
|
||||
"furl": "https://www.huya.com/", "curl": "https://www.huya.com/g",
|
||||
"user_action": [{"id": "7", "d": 712,
|
||||
"t": str(int(time.time() * 1000))}]})
|
||||
body = {
|
||||
"uri": "30001", "version": "2.6", "context": ctx,
|
||||
"appId": "5002", "appSign": "1ce3bf682483d03f146f58232ec10635",
|
||||
"authId": "", "sdid": sdid, "lcid": "2052", "byPass": "3",
|
||||
"requestId": str(int(time.time())%100000000),
|
||||
"data": {"userName": acct, "password": sha1, "domainList": "",
|
||||
"remember": "1",
|
||||
"behavior": requests.utils.quote(beh, safe="")}}
|
||||
s = requests.Session()
|
||||
s.trust_env = False
|
||||
r = s.post(URL, json=body, timeout=15, headers={
|
||||
"Content-Type": "application/json;charset=UTF-8",
|
||||
"Origin": "https://www.huya.com",
|
||||
"Referer": "https://www.huya.com/",
|
||||
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) "
|
||||
"AppleWebKit/537.36 Chrome/150.0 Safari/537.36"})
|
||||
print("HTTP", r.status_code)
|
||||
j = r.json()
|
||||
print("returnCode:", j.get("returnCode"), "|",
|
||||
j.get("description") or j.get("message"))
|
||||
if j.get("returnCode") != 0:
|
||||
print(json.dumps(j, ensure_ascii=False)[:400])
|
||||
return 1
|
||||
print("\n=== 全套 Cookie ===")
|
||||
total = 0
|
||||
for c in s.cookies:
|
||||
v = c.value or ""
|
||||
total += len(c.name) + len(v) + 2
|
||||
mark = " ← 长" if len(v) > 100 else ""
|
||||
print(f"{c.name:16s} = {v[:70]}{'...' if len(v)>70 else ''}{mark}")
|
||||
ck = "; ".join(f"{c.name}={c.value}" for c in s.cookies)
|
||||
(ROOT / "evidence/web_cookies.txt").write_text(ck)
|
||||
print(f"\n总长 {len(ck)} 字符, 已存 evidence/web_cookies.txt")
|
||||
print("用法: requests.get(url, headers={'Cookie': open('evidence/web_cookies.txt').read()})")
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
Reference in New Issue
Block a user