mirror of
https://github.com/hyugogirubato/cbz.git
synced 2026-09-26 13:31:00 +00:00
106 lines
3.5 KiB
Python
106 lines
3.5 KiB
Python
import secrets
|
|
import random
|
|
|
|
import requests
|
|
|
|
from requests_toolbelt.multipart.encoder import MultipartEncoder
|
|
|
|
|
|
def fields(value: dict) -> dict:
|
|
return {key: str(val) for key, val in value.items()}
|
|
|
|
|
|
def get_id() -> str:
|
|
group1 = '-'.join([f'{random.randint(0, 255):02x}' for _ in range(6)])
|
|
group2 = '-'.join([f'{random.randint(0, 255):02x}' for _ in range(6)])
|
|
return f'{group1}:{group2}'
|
|
|
|
|
|
if __name__ == '__main__':
|
|
user_email = 'example@mail.com'
|
|
user_token = secrets.token_hex(16)
|
|
user_subscription = 'register'
|
|
device_token = secrets.token_hex(16)
|
|
device_platform = 49
|
|
device_id = get_id()
|
|
app_version = 6169
|
|
media_id = 'B0CPPH5WK4'
|
|
pssh = 'CAESEM235gyo/kFAk//K99EUxOAaBmFtYXpvbiI1Y2lkOnpiZm1ES2orUVVDVC84cjMwUlRFNEE9PSxRWVJUWXJnd1JxbXBzMngvTnM0alVRPT0qAlNEMgA='
|
|
certificate = 'CAUSwgUKvAIIAxIQCuQRtZRasVgFt7DIvVtVHBi17OSpBSKOAjCCAQoCggEBAKU2UrYVOSDlcXajWhpEgGhqGraJtFdUPgu6plJGy9ViaRn5mhyXON5PXmw1krQdi0SLxf00FfIgnYFLpDfvNeItGn9rcx0RNPwP39PW7aW0Fbqi6VCaKWlR24kRpd7NQ4woyMXr7xlBWPwPNxK4xmR/6UuvKyYWEkroyeIjWHAqgCjCmpfIpVcPsyrnMuPFGl82MMVnAhTweTKnEPOqJpxQ1bdQvVNCvkba5gjOTbEnJ7aXegwhmCdRQzXjTeEV2dO8oo5YfxW6pRBovzF6wYBMQYpSCJIA24ptAP/2TkneyJuqm4hJNFvtF8fsBgTQQ4TIhnX4bZ9imuhivYLa6HsCAwEAAToPYW1hem9uLmNvbS1wcm9kEoADETQD6R0H/h9fyg0Hw7mj0M7T4s0bcBf4fMhARpwk2X4HpvB49bJ5Yvc4t41mAnXGe/wiXbzsddKMiMffkSE1QWK1CFPBgziU23y1PjQToGiIv/sJIFRKRJ4qMBxIl95xlvSEzKdt68n7wqGa442+uAgk7CXU3uTfVofYY76CrPBnEKQfad/CVqTh48geNTb4qRH1TX30NzCsB9NWlcdvg10pCnWSm8cSHu1d9yH+2yQgsGe52QoHHCqHNzG/wAxMYWTevXQW7EPTBeFySPY0xUN+2F2FhCf5/A7uFUHywd0zNTswh0QJc93LBTh46clRLO+d4RKBiBSj3rah6Y5iXMw9N9o58tCRc9gFHrjfMNubopWHjDOO3ATUgqXrTp+fKVCmsGuGl1ComHxXV9i1AqHwzzY2JY2vFqo73jR3IElr6oChPIwcNokmNc0D4TXtjE0BoYkbWKJfHvJJihzMOvDicWUsemVHvua9/FBtpbHgpbgwijFPjtQF9Ldb8Swf'
|
|
|
|
multipart_data = MultipartEncoder(
|
|
fields({
|
|
'T': 10,
|
|
'B': 6,
|
|
'C': user_email,
|
|
'D': user_token,
|
|
'E': user_subscription,
|
|
'F': device_token,
|
|
'G': device_platform,
|
|
'H': device_id,
|
|
'I': 1,
|
|
'Z': app_version,
|
|
'K': 2,
|
|
'L': media_id,
|
|
'M': pssh,
|
|
'N': certificate
|
|
})
|
|
)
|
|
|
|
# @Info: Challenge
|
|
r = requests.request(
|
|
method='POST',
|
|
url='https://drm-w-j2.dvdfab.cn/ex/',
|
|
data=multipart_data,
|
|
headers={
|
|
'Accept': '*/*',
|
|
'Content-Type': multipart_data.content_type,
|
|
'Expect': '100-continue',
|
|
'User-Agent': 'DVDFab'
|
|
}
|
|
)
|
|
r.raise_for_status()
|
|
|
|
challenge = r.json()['FB']
|
|
print(f'[+] Challenge: {challenge}')
|
|
|
|
licence = '' # TODO: AMZ License
|
|
|
|
# @Info: Keys
|
|
multipart_data = MultipartEncoder(
|
|
fields({
|
|
'T': 12,
|
|
'B': 6,
|
|
'C': email,
|
|
'D': user_token,
|
|
'E': user_subscription,
|
|
'F': device_token,
|
|
'G': device_platform,
|
|
'H': device_id,
|
|
'I': 1,
|
|
'Z': app_version,
|
|
'K': 2,
|
|
'L': media_id,
|
|
'M': pssh,
|
|
'N': certificate,
|
|
'O': licence
|
|
})
|
|
)
|
|
|
|
r = requests.request(
|
|
method='POST',
|
|
url='https://drm-w-j2.dvdfab.cn/ex/',
|
|
data=multipart_data,
|
|
headers={
|
|
'Accept': '*/*',
|
|
'Content-Type': multipart_data.content_type,
|
|
'Expect': '100-continue',
|
|
'User-Agent': 'DVDFab'
|
|
}
|
|
)
|
|
r.raise_for_status()
|
|
content = r.json()
|
|
|
|
data = content['D']
|
|
mod_key = content['T']
|