@FoxRefire
congratulations I haven't seen such a beautiful and important work in quite some time.
I wanted to ask you are there any other services the non standard ones that use json sending is it possible to do something?
Support our site by donate $5 directly to us Thanks!!!
Try StreamFab Downloader and download streaming video from Netflix, Amazon!
Try StreamFab Downloader and download streaming video from Netflix, Amazon!
+ Reply to Thread
Results 31 to 60 of 770
-
-
Got it to work with your http://0.tcp.ap.ngrok.io:12365 api but not with http://127.0.0.1:18888
(have note tested if the keys was alright yet)
Edit: some sites just gives me "undefined" -
First of all thanks for the great work , loaded the server with the extension and this works like a charm !
Just one last thing , for the pssh and the lic url do i have to select them manually every time or am i doing something wrong ?
Regards -
-
-
Code:
let psshs = chrome.extension.getBackgroundPage().getPsshs(); let requests = chrome.extension.getBackgroundPage().getRequests(); let userInputs = {}; function drawList(arr, _searchBox, _list, _userInputs) { const elements = arr; const searchBox = document.getElementById(_searchBox); const list = document.getElementById(_list); elements.forEach((element, index) => { const li = document.createElement("li"); li.textContent = element; li.addEventListener("click", () => { userInputs[_userInputs] = index; document.getElementById(_userInputs).value = element; document.getElementById(_userInputs + "Index").value = index; document.getElementById("selectPssh").style.display = "none"; document.getElementById("selectRequest").style.display = "none"; document.getElementById("home").style.display = "block"; }); list.appendChild(li); }); searchBox.addEventListener("input", (event) => { const searchValue = event.target.value.toLowerCase(); list.innerHTML = ""; elements.forEach((element, index) => { if (element.toLowerCase().includes(searchValue)) { const li = document.createElement("li"); li.textContent = element; li.addEventListener("click", () => { userInputs[_userInputs] = index; document.getElementById(_userInputs).value = element; document.getElementById(_userInputs + "Index").value = index; document.getElementById("selectPssh").style.display = "none"; document.getElementById("selectRequest").style.display = "none"; document.getElementById("home").style.display = "block"; }); list.appendChild(li); } }); }); } function selectPssh() { document.getElementById("home").style.display = "none"; document.getElementById("selectPssh").style.display = "block"; } function selectRequest() { document.getElementById("home").style.display = "none"; document.getElementById("selectRequest").style.display = "block"; } var CommonWV = async function (pssh, licUrl, _headers) { const serverAddr = "http://127.0.0.1:18888"; console.group("fetch cert..."); let certBuffer = await fetch(licUrl, { body: new Uint8Array([0x08, 0x04]), headers: _headers, method: "POST", }).then((resp) => resp.arrayBuffer()); let certB64 = ""; if (isValidJson(String.fromCharCode(...new Uint8Array(certBuffer)))) { let jsonData = JSON.parse( String.fromCharCode(...new Uint8Array(certBuffer)) ); if (jsonData.license) { certB64 = jsonData.license; } else { console.log("JSON does not contain 'license'"); } } else { certB64 = btoa(String.fromCharCode(...new Uint8Array(certBuffer))); } console.log(certB64); console.groupEnd(); console.group("fetch challenge..."); let jsonC = await fetch(serverAddr + "/getchallenge", { body: JSON.stringify({ PSSH: pssh, CertBase64: certB64, }), headers: { "Content-Type": "application/json", }, method: "POST", }).then((resp) => resp.json()); let challengeBase64 = jsonC.challengeBase64; console.log(challengeBase64); console.groupEnd(); console.group("fetch license..."); let licBuffer = await fetch(licUrl, { body: Uint8Array.from(atob(challengeBase64), (c) => c.charCodeAt(0)), headers: _headers, method: "POST", }).then((resp) => resp.arrayBuffer()); let licB64 = ""; if (isValidJson(String.fromCharCode(...new Uint8Array(licBuffer)))) { let jsonData = JSON.parse( String.fromCharCode(...new Uint8Array(licBuffer)) ); if (jsonData.license) { licB64 = jsonData.license; } else { console.log("JSON does not contain 'license'"); } } else { licB64 = btoa(String.fromCharCode(...new Uint8Array(licBuffer))); } console.log(licB64); console.groupEnd(); console.group("get keys..."); let jsonK = await fetch(serverAddr + "/getkeys", { body: JSON.stringify({ PSSH: pssh, ChallengeBase64: challengeBase64, LicenseBase64: licB64, }), headers: { "Content-Type": "application/json", }, method: "POST", }).then((resp) => resp.json()); let keys = jsonK.keys; console.log(keys); console.groupEnd(); return keys; }; function isValidJson(str) { try { JSON.parse(str); return true; } catch (e) { return false; } } async function guess() { endpoint = document.getElementById("guessr").value; const result = await CommonWV( psshs[userInputs["pssh"]], requests[userInputs["license"]]["url"], requests[userInputs["license"]]["headers"] ); document.getElementById("result").value = result; } if (psshs.length != 0) { document.addEventListener("DOMContentLoaded", function () { document.getElementById("noEME").style.display = "none"; document.getElementById("home").style.display = "block"; document.getElementById("psshButton").addEventListener("click", selectPssh); document .getElementById("licenseButton") .addEventListener("click", selectRequest); document.getElementById("guess").addEventListener("click", guess); drawList(psshs, "psshSearch", "psshList", "pssh"); drawList( requests.map((r) => r["url"]), "requestSearch", "requestList", "license" ); }); }
-
-
@Karoolus, can you get it to pull keys that has M3u8 links as well instead of just MPD? thanks
-
multiple services has m3u8 with keys, I was just wandering is all. I like the app so far.
-
Ngrok public API shutdowned.
Instead, I published permanent public API, use this instead.
https://proposed-marketa-foxrefire.koyeb.app -
[Announcement]
Released new version.please update extension
New version includes:
* Custom scheme support
* Separate some codes to make code looks clear
* Public API integration
* Auto selects PSSH when there is one detected PSSH -
can you send me the URL again, as I looked on both links I had, but it says nothing been updated today. thanks
-
@FoxRefire can you add to pull keys from m3u8 links that have keys as well? thanks
-
The tool works great!
Truly one of the most special things I've seen lately.
Very smart development.
I would recommend adding the following actions to :RESULT
Direct link to the MPD file
+
auto Code ready for download using N_m3u8dl-re or webdl.\
+
Option to export the (cURL Header). -
This would be easier to use without the external WVCore server. Compile pywidevine to WASM using pyodide and it could all run in the extension...
-
@FoxRefire
first thanks for your rel
anyway with latest version, i can run WVCore.Server.exe and win cmd open and close instantly
before guesser does not work still for me, but WVCore.Server.exe cmd popup show some data correctly ...
Similar Threads
-
Is this Widevine or?
By cenkoman in forum Video Streaming DownloadingReplies: 6Last Post: 28th Dec 2022, 15:15 -
Widevine help
By Stevo1987 in forum Video Streaming DownloadingReplies: 16Last Post: 27th Aug 2022, 12:08 -
OSX Mac - Chrome v83 + Widevine L3 extension
By R4p1dH0n3Y in forum Video Streaming DownloadingReplies: 5Last Post: 17th Nov 2021, 14:53 -
Widevine guesser not working
By Hammer in forum Video Streaming DownloadingReplies: 13Last Post: 4th Oct 2021, 11:26 -
widevine decrypt extension for microsoft edge not working
By takheang303 in forum Video Streaming DownloadingReplies: 6Last Post: 3rd Apr 2021, 11:46