From 84ae841f99708bf8e399ef8803fd26dcd4ed6776 Mon Sep 17 00:00:00 2001 From: CDM-Project Date: Tue, 17 Sep 2024 01:41:54 -0400 Subject: [PATCH] Added JSON support --- CDRM_Modules/Decrypt.py | 45 +++++++++++++++++++++++++++++++--------- CDRM_Modules/Get_PSSH.py | 2 +- 2 files changed, 36 insertions(+), 11 deletions(-) diff --git a/CDRM_Modules/Decrypt.py b/CDRM_Modules/Decrypt.py index 638269c..3002dd4 100644 --- a/CDRM_Modules/Decrypt.py +++ b/CDRM_Modules/Decrypt.py @@ -20,6 +20,7 @@ def load_license_curl(): self.headers = headers self.cookies = cookies self.data = data + self.json_data = json_data try: with open(f'{os.getcwd()}/License_cURL.py', 'r') as file: @@ -40,6 +41,10 @@ def load_license_curl(): data = local_namespace['data'] else: data = None + if 'json_data' in local_namespace: + json_data = local_namespace['json_data'] + else: + json_data = None return LicenseCURL() def check_if_url(string): @@ -57,19 +62,19 @@ def check_if_url(string): def replace_widevine_challenge(dictionary, challenge): for key, value in dictionary.items(): - if 'widevine' in key.lower(): + if 'widevine' in key.lower() or 'license' in key.lower(): dictionary[key] = challenge elif isinstance(value, dict): - replace_widevine_value(value, challenge_type) + replace_widevine_challenge(value, challenge) def find_widevine_license(dictionary): for key, value in dictionary.items(): if 'widevine' in key.lower() or 'license' in key.lower(): - license = dictionary[key] + license = dictionary[key].replace("-", "+").replace("_", "/") return license elif isinstance(value, dict): - replace_widevine_value(value, challenge_type) + find_widevine_license(value) def decrypt_local_cdm(): cdm_choice = CDM_Selector.select_local_cdm() @@ -141,17 +146,27 @@ def decrypt_local_cdm(): db_data = challenge if license_curl.data: try: - lic_data = replace_widevine_value(license_curl.data, base64.b64encode(challenge).decode()) + replace_widevine_challenge(license_curl.data, base64.b64encode(challenge).decode()) + lic_data = license_curl.data except: pass else: - lic_data = challenge + lic_data = None + if license_curl.json_data: + try: + replace_widevine_challenge(license_curl.json_data, base64.b64encode(challenge).decode()) + json_data = license_curl.json_data + except: + pass + else: + json_data = None try: license_response = httpx.post( url=user_license_url, headers=license_curl.headers, cookies=license_curl.cookies, - data=lic_data + json=json_data, + data=challenge if json_data is None and lic_data is None else lic_data ) except Exception as error: print(f'{Fore.RED}An error occurred.\n\n{error}') @@ -245,17 +260,27 @@ def decrypt_remote_cdm(): db_data = challenge if license_curl.data: try: - lic_data = replace_widevine_value(license_curl.data, base64.b64encode(challenge).decode()) + replace_widevine_challenge(license_curl.data, base64.b64encode(challenge).decode()) + lic_data = license_curl.data except: pass else: - lic_data = challenge + lic_data = None + if license_curl.json_data: + try: + replace_widevine_challenge(license_curl.json_data, base64.b64encode(challenge).decode()) + json_data = license_curl.json_data + except: + pass + else: + json_data = None try: license_response = httpx.post( url=user_license_url, headers=license_curl.headers, cookies=license_curl.cookies, - data=lic_data + json=json_data, + data=challenge if json_data is None and lic_data is None else lic_data ) except Exception as error: print(f'{Fore.RED}An error occurred.\n\n{error}') diff --git a/CDRM_Modules/Get_PSSH.py b/CDRM_Modules/Get_PSSH.py index da6b086..3cf397a 100644 --- a/CDRM_Modules/Get_PSSH.py +++ b/CDRM_Modules/Get_PSSH.py @@ -13,7 +13,7 @@ def get_pssh(mpd_or_m3u8_url): client.headers.update(License_cURL.headers) if License_cURL.cookies: client.cookies.update(License_cURL.cookies) - mpd = dash.DASH.from_url(url=mpd_or_m3u8_url,session=client).to_tracks(language="en") + mpd = dash.DASH.from_url(url=mpd_or_m3u8_url, session=client).to_tracks(language="en") tracks.add(mpd) PSSH = [] for track in tracks: