From a0b921eb6adee0d4f8ad8badbf22c8cd6d569371 Mon Sep 17 00:00:00 2001 From: Joris Bertomeu Date: Wed, 27 Aug 2025 16:50:00 +0200 Subject: [PATCH] Fix amazon --- background.js | 31 ++++++++++++++++++++++++++----- blockRules.conf | 2 ++ python/schemes/Amazon.py | 33 +++++++++++++++++++++++++++------ selectRules.conf | 2 +- 4 files changed, 56 insertions(+), 12 deletions(-) diff --git a/background.js b/background.js index 9408d4a..a876b54 100644 --- a/background.js +++ b/background.js @@ -46,11 +46,18 @@ function updateBadge() { chrome.webRequest.onBeforeSendHeaders.addListener( function(details) { if (details.method === "POST") { + if (!window.bodys) + window.bodys=[]; + + // Vérifier que le body existe dans window.bodys avant d'y accéder + const bodyData = window.bodys.find((b) => b.id == details.requestId); + window.requests.push({ url:details.url, headers:convertHeaders(details.requestHeaders), - body:window.bodys.find((b) => b.id == details.requestId).body + body: bodyData ? bodyData.body : "" // Utiliser une chaîne vide si pas de body trouvé }); + if(testBlock(details.url)){ return {cancel:true} } @@ -63,15 +70,29 @@ chrome.webRequest.onBeforeSendHeaders.addListener( //Get requestBody from POST requests chrome.webRequest.onBeforeRequest.addListener( function(details) { - // Ton code existant pour les POST + // Code existant pour les POST - avec vérification du requestBody if (details.method === "POST") { + if (!window.bodys) + window.bodys=[]; + + // Vérifier que requestBody existe et a la propriété raw + let bodyContent = ""; + if (details.requestBody && details.requestBody.raw && details.requestBody.raw.length > 0) { + try { + bodyContent = btoa(String.fromCharCode(...new Uint8Array(details.requestBody.raw[0]['bytes']))); + } catch (e) { + console.warn("Erreur lors de l'encodage du body:", e); + bodyContent = ""; + } + } + window.bodys.push({ - body:details.requestBody.raw ? btoa(String.fromCharCode(...new Uint8Array(details.requestBody.raw[0]['bytes']))) : "", - id:details.requestId + body: bodyContent, + id: details.requestId }); } - // Nouveau : capturer les MPD + // Nouveau : capturer les MPD (pour toutes les méthodes) if (details.url.includes('.mpd') || details.url.includes('manifest') || details.url.includes('dash.mpd') || diff --git a/blockRules.conf b/blockRules.conf index ac14947..7cfa184 100644 --- a/blockRules.conf +++ b/blockRules.conf @@ -4,3 +4,5 @@ license.vdocipher.com ngenix.net/license shield-drm.imggaming.com/api/v2/license wvls/contentlicenseservice/v1/licenses +unagi-eu.amazon.com/1/events/com.amazon.csm.csa.prod +atv-ps-eu.primevideo.com/cdp/usage/Clickstream diff --git a/python/schemes/Amazon.py b/python/schemes/Amazon.py index 0af5723..93aa50d 100644 --- a/python/schemes/Amazon.py +++ b/python/schemes/Amazon.py @@ -1,7 +1,28 @@ -import urllib.parse -payload = f'widevine2Challenge={urllib.parse.quote(base64.b64encode(cdm.service_certificate_challenge).decode())}&includeHdcpTestKeyInLicense=true' -service_cert = await corsFetch(licUrl, "POST", licHeaders, payload, "json") -service_cert = service_cert['widevine2License']['license'] -payload = f'widevine2Challenge={urllib.parse.quote(getChallenge("b64", service_cert))}&includeHdcpTestKeyInLicense=true' +# import urllib.parse +# payload = f'widevine2Challenge={urllib.parse.quote(base64.b64encode(cdm.service_certificate_challenge).decode())}&includeHdcpTestKeyInLicense=true' +# service_cert = await corsFetch(licUrl, "POST", licHeaders, payload, "json") +# service_cert = service_cert['widevine2License']['license'] +# payload = f'widevine2Challenge={urllib.parse.quote(getChallenge("b64", service_cert))}&includeHdcpTestKeyInLicense=true' +# licence = await corsFetch(licUrl, "POST", licHeaders, payload, "json") +# licence = licence['widevine2License']['license'] +from js import console +import json + +payload = loadBody("json") +payload['licenseChallenge'] = getChallenge("b64") + +# DEBUG: Vérifier le payload avant envoi +console.log("=== REQUEST DEBUG ===") +console.log("License URL:", licUrl) +console.log("Payload:", json.dumps(payload)) +console.log("Headers:", json.dumps(licHeaders)) +console.log("Challenge type:", type(payload.get('licenseChallenge'))) + licence = await corsFetch(licUrl, "POST", licHeaders, payload, "json") -licence = licence['widevine2License']['license'] +console.log("Response complet:", json.dumps(licence)) +payload['licenseChallenge'] = getChallenge("b64") +licence = await corsFetch(licUrl, "POST", licHeaders, payload, "json") +# Afficher dans la console JS +licence_str = json.dumps(licence) if licence else "null" +console.log("Widevine License JSON:", licence_str) +licence = licence['widevineLicense']['license'] \ No newline at end of file diff --git a/selectRules.conf b/selectRules.conf index 56089e7..89f72b1 100644 --- a/selectRules.conf +++ b/selectRules.conf @@ -7,7 +7,7 @@ lic.drmtoday.com$$DRMToday corusappservices.com/authorization/widevine/getresourcekey$$GlobalTV b2c-www.redefine.pl/rpc/drm/$$PolSatBoxGo widevine.entitlement.eu.theplatform.com$$thePlatform -cdp/catalog/GetPlaybackResources$$Amazon +atv-ps-eu.primevideo.com/playback/drm-vod/GetWidevineLicense$$Amazon drm-license.youku.tv$$Youku NOS71ZV1/wvls$$NosTV license.vdocipher.com/auth$$VdoCipher