GT-Python
import base64
import hashlib
import json
import os
import random
import string
import time
import uuid
from Crypto.Cipher import AES, PKCS1_v1_5
from Crypto.PublicKey import RSA
from Crypto.Util.Padding import pad
from tls_client import Session
host = "https://account.yalla.games"
vers = "1.2.0.2"
lang = 1
plte = 1
devi = 4
arec = "964"
path = "/YallaGame/V2/AccountRelation/LoginByMobilePwd"
rkey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAik19fj8zJnG7Ub50NvgLObo7KWkEQgXd7AcK9KsIETw/IvCsNc3SsbZqK9qpb+Ulv4kKMe1L6249+3fMLLzSpLtsb2k0cyRk3eKW0uyj8483HI2iSvAr1DIgNzvUXMbIAXSizw4IMQAejUKRbLh4w+lKVWU/6nSuMZNhpzswNPJqegItrEhIRK0tQ78W0lhFCvS3ggRbbFN7Oh/CNM843ZvS9tiFPS66kmmjimxxyAXKAPXvuMfJ9wuLXdkeBob87uGV16yW74835pux0GSRbHSmsNaZiZ5KJBkSEOE1HDsaYiSUQz3ByGGBnw9nah91ZnXxYuk55JvWcyg+Wuv9RwIDAQAB"
devfile = os.path.join(os.path.dirname(os.path.abspath(__file__)), "ludo_device_id.json")
dvid = None
try:
with open(devfile) as f:
d = json.load(f)
if d.get("deviceId"):
dvid = d["deviceId"]
except Exception:
pass
if dvid is None:
dvid = str(uuid.uuid4())
try:
with open(devfile, "w") as f:
json.dump({
"deviceId": dvid,
"android": f"{uuid.uuid4().hex}_{uuid.uuid4().hex[:16]}",
"shumeng": "".join(random.choice(string.ascii_letters + string.digits) for _ in range(36)),
"nonce": f"{random.randint(-2**31, 2**31 - 1)}_{uuid.uuid4()}",
"created": int(time.time()),
}, f)
except Exception:
pass
sess = Session(client_identifier="okhttp4_android_13", random_tls_extension_order=True)
sess.timeout_seconds = 30
mobl = input("mobile: ").strip()
pwrd = input("password: ").strip()
pwdh = hashlib.md5(pwrd.encode()).hexdigest()
pdat = json.dumps({"mobile": mobl, "areaCode": arec, "password": pwdh, "languageId": lang}, separators=(",", ":")).encode()
akey = base64.b64encode(os.urandom(24)).decode().encode()
aiv_ = os.urandom(16)
act_ = AES.new(akey, AES.MODE_CBC, aiv_).encrypt(pad(pdat, AES.block_size))
pjsn = base64.b64encode(aiv_ + act_).decode()
bprm = json.dumps({"timeSpan": int(time.time() * 1000), "nonce": dvid + "_" + base64.b32encode(os.urandom(9)).decode()[:15], "token": None, "version": vers, "plateType": plte, "deviceType": devi}, separators=(",", ":")).encode()
biv_ = os.urandom(16)
bct_ = AES.new(akey, AES.MODE_CBC, biv_).encrypt(pad(bprm, AES.block_size))
bps_ = base64.b64encode(biv_ + bct_).decode()
rpub = RSA.import_key(base64.b64decode(rkey))
bfsh = base64.b64encode(PKCS1_v1_5.new(rpub).encrypt(akey)).decode()
hdrs = {
"User-Agent": "YallaLudoHD-Android-0",
"Accept": "*/*",
"Accept-Encoding": "deflate, gzip",
"Content-Type": "application/json",
"BlowFishString": bfsh,
"BaseParamString": bps_,
"Version": vers,
}
body = json.dumps({"paramJsonString": pjsn}, separators=(",", ":")).encode()
resp = sess.post(host + path, headers=hdrs, data=body)
print(resp.text)
لوكن +خوارزميه لودو لايت
15 · 1.1K ·