File size: 2,649 Bytes
cdd5c14 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
import hashlib
from uuid import uuid4
import time
CLIENT_ID = "ZQL_zwA4qhHcoe_2"
CLIENT_SECRET = "Og9Vr1L8Ee6bh0olFxFDRg"
CLIENT_VERSION = "1.06.0.2132"
PACKAG_ENAME = "com.thunder.downloader"
SDK_VERSION = "2.0.3.203100 "
APP_NAME = PACKAG_ENAME
def get_timestamp() -> int:
"""
Get current timestamp.
"""
return int(time.time() * 1000)
def device_id_generator() -> str:
"""
Generate a random device id.
"""
return str(uuid4()).replace("-", "")
SALTS = [
"kVy0WbPhiE4v6oxXZ88DvoA3Q",
"lON/AUoZKj8/nBtcE85mVbkOaVdVa",
"rLGffQrfBKH0BgwQ33yZofvO3Or",
"FO6HWqw",
"GbgvyA2",
"L1NU9QvIQIH7DTRt",
"y7llk4Y8WfYflt6",
"iuDp1WPbV3HRZudZtoXChxH4HNVBX5ZALe",
"8C28RTXmVcco0",
"X5Xh",
"7xe25YUgfGgD0xW3ezFS",
"",
"CKCR",
"8EmDjBo6h3eLaK7U6vU2Qys0NsMx",
"t2TeZBXKqbdP09Arh9C3",
]
def captcha_sign(device_id: str, timestamp: str) -> str:
"""
Generate a captcha sign.
在网页端的js中, 搜索 captcha_sign, 可以找到对应的js代码
"""
sign = CLIENT_ID + CLIENT_VERSION + PACKAG_ENAME + device_id + timestamp
for salt in SALTS:
sign = hashlib.md5((sign + salt).encode()).hexdigest()
return f"1.{sign}"
def generate_device_sign(device_id, package_name):
signature_base = f"{device_id}{package_name}1appkey"
# 计算 SHA-1 哈希
sha1_hash = hashlib.sha1()
sha1_hash.update(signature_base.encode("utf-8"))
sha1_result = sha1_hash.hexdigest()
# 计算 MD5 哈希
md5_hash = hashlib.md5()
md5_hash.update(sha1_result.encode("utf-8"))
md5_result = md5_hash.hexdigest()
device_sign = f"div101.{device_id}{md5_result}"
return device_sign
def build_custom_user_agent(device_id, user_id):
device_sign = generate_device_sign(device_id, PACKAG_ENAME)
user_agent_parts = [
f"ANDROID-{APP_NAME}/{CLIENT_VERSION}",
"protocolVersion/200",
"accesstype/",
f"clientid/{CLIENT_ID}",
f"clientversion/{CLIENT_VERSION}",
"action_type/",
"networktype/WIFI",
"sessionid/",
f"deviceid/{device_id}",
"providername/NONE",
f"devicesign/{device_sign}",
"refresh_token/",
f"sdkversion/{SDK_VERSION}",
f"datetime/{get_timestamp()}",
f"usrno/{user_id}",
f"appname/{APP_NAME}",
"session_origin/",
"grant_type/",
"appid/",
"clientip/",
"devicename/Xiaomi_M2004j7ac",
"osversion/13",
"platformversion/10",
"accessmode/",
"devicemodel/M2004J7AC",
]
return " ".join(user_agent_parts)
|