Spaces:
Sleeping
Sleeping
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) | |