mirror of
https://github.com/Satsuoni/widevine-l3-guesser
synced 2025-02-25 00:15:23 +01:00
Bastardized extension, but might work better on some sites
This commit is contained in:
parent
8423929019
commit
4ceaf59db2
7
background/background.html
Normal file
7
background/background.html
Normal file
@ -0,0 +1,7 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<script type="module" src="background.js"></script>
|
||||
</head>
|
||||
</html>
|
96
background/background.js
Normal file
96
background/background.js
Normal file
@ -0,0 +1,96 @@
|
||||
import WasmDsp from "../wasm/wasm_gsr.js";
|
||||
var Wdsp=null;
|
||||
var _freeStr, stringToUTF8, writeArrayToMemory, UTF8ToString, stackSave, stackRestore, stackAlloc;
|
||||
function getCFunc(ident) {
|
||||
return Wdsp[`_${ident}`]; // closure exported function
|
||||
}
|
||||
|
||||
function scall (ident, returnType, argTypes, args, opts) {
|
||||
const toC = {
|
||||
string (str) {
|
||||
let ret = 0;
|
||||
if (str !== null && str !== undefined && str !== 0) {
|
||||
const len = (str.length << 2) + 1;
|
||||
ret = stackAlloc(len);
|
||||
stringToUTF8(str, ret, len);
|
||||
}
|
||||
return ret;
|
||||
},
|
||||
array (arr) {
|
||||
const ret = stackAlloc(arr.length);
|
||||
writeArrayToMemory(arr, ret);
|
||||
return ret;
|
||||
}
|
||||
};
|
||||
function convertReturnValue (ret) {
|
||||
if (returnType === 'string') return UTF8ToString(ret);
|
||||
if (returnType === 'boolean') return Boolean(ret);
|
||||
return ret;
|
||||
}
|
||||
const func = getCFunc(ident);
|
||||
const cArgs = [];
|
||||
let stack = 0;
|
||||
if (args) {
|
||||
for (let i = 0; i < args.length; i++) {
|
||||
const converter = toC[argTypes[i]];
|
||||
if (converter) {
|
||||
if (stack === 0) stack = stackSave();
|
||||
cArgs[i] = converter(args[i]);
|
||||
} else {
|
||||
cArgs[i] = args[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
const _ret = func.apply(null, cArgs);
|
||||
const ret = convertReturnValue(_ret);
|
||||
_freeStr(_ret);
|
||||
if (stack !== 0) stackRestore(stack);
|
||||
return ret;
|
||||
}
|
||||
|
||||
function swrap (ident, returnType, argTypes, opts) {
|
||||
argTypes = argTypes || [];
|
||||
const numericArgs = argTypes.every((type) => type === 'number');
|
||||
const numericRet = returnType !== 'string';
|
||||
if (numericRet && numericArgs && !opts) {
|
||||
return getCFunc(ident);
|
||||
}
|
||||
return function () {
|
||||
|
||||
return scall(ident, returnType, argTypes, arguments, opts);
|
||||
};
|
||||
}
|
||||
|
||||
async function init() {
|
||||
Wdsp=await WasmDsp();
|
||||
await Wdsp.ready;
|
||||
_freeStr=Wdsp._freeStr;
|
||||
stringToUTF8=Wdsp.stringToUTF8;
|
||||
writeArrayToMemory=Wdsp.writeArrayToMemory;
|
||||
UTF8ToString=Wdsp.UTF8ToString;
|
||||
stackSave=Wdsp.stackSave;
|
||||
stackRestore=Wdsp.stackRestore;
|
||||
stackAlloc=Wdsp.stackAlloc;
|
||||
chrome.runtime.onMessage.addListener(onRuntimeMessage);
|
||||
}
|
||||
function decode(val,sendResponse)
|
||||
{
|
||||
var tryUsingDecoder = swrap('tryUsingDecoder', 'string', ['string']);
|
||||
var res=tryUsingDecoder(val);
|
||||
sendResponse({value:res});
|
||||
}
|
||||
function onRuntimeMessage(message, _sender, sendResponse) {
|
||||
if (message.name !== "dec") return;
|
||||
if(!message.value) return;
|
||||
if(Wdsp==null)
|
||||
{
|
||||
init().then(()=>{decode(message.value,sendResponse)});
|
||||
}
|
||||
else
|
||||
{
|
||||
decode(message.value,sendResponse);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
init();
|
@ -1 +1 @@
|
||||
emcc wasm_src/allocate.cpp wasm_src/misc.cpp wasm_src/integer.cpp wasm_src/algebra.cpp wasm_src/codelift.cpp -Os -s TOTAL_MEMORY=18743296 -Wno-implicitly-unsigned-literal -I "./wasm_src" -s WASM=1 -s LLD_REPORT_UNDEFINED -s "MODULARIZE=1" -s "EXPORT_NAME='WasmDsp'" -s "BINARYEN_METHOD='native-wasm'" -s "EXPORTED_FUNCTIONS=['_freeStr','_tryUsingDecoder']" -s "EXPORTED_RUNTIME_METHODS=['stringToUTF8','UTF8ToString','stackSave','writeArrayToMemory','stackAlloc','stackRestore']" -o wasm/wasm_gsr.js
|
||||
emcc wasm_src/allocate.cpp wasm_src/misc.cpp wasm_src/integer.cpp wasm_src/algebra.cpp wasm_src/codelift.cpp -Os -s TOTAL_MEMORY=18743296 -Wno-implicitly-unsigned-literal -I "./wasm_src" -s WASM=1 -s LLD_REPORT_UNDEFINED -s EXPORT_ES6=1 -s "MODULARIZE=1" -s "EXPORT_NAME='WasmDsp'" -s "BINARYEN_METHOD='native-wasm'" -s DYNAMIC_EXECUTION=0 -s "EXPORTED_FUNCTIONS=['_freeStr','_tryUsingDecoder']" -s "EXPORTED_RUNTIME_METHODS=['stringToUTF8','UTF8ToString','stackSave','writeArrayToMemory','stackAlloc','stackRestore']" -o wasm/wasm_gsr.js
|
||||
|
@ -4,7 +4,6 @@ This is where the magic happens
|
||||
|
||||
|
||||
var WidevineCrypto = {};
|
||||
var _freeStr, stringToUTF8, writeArrayToMemory, UTF8ToString, stackSave, stackRestore, stackAlloc;
|
||||
|
||||
|
||||
// Convert a hex string to a byte array
|
||||
@ -24,6 +23,19 @@ function bytesToHex(bytes) {
|
||||
return hex.join("");
|
||||
}
|
||||
|
||||
function sendMessagePromise( item) {
|
||||
return new Promise((resolve, reject) => {
|
||||
var event = new CustomEvent("PassToBackground", {detail: item});
|
||||
window.dispatchEvent(event);
|
||||
window.addEventListener("BackgroundReply", function(evt) {
|
||||
if(evt.detail.value) {
|
||||
resolve(evt.detail.value);
|
||||
} else {
|
||||
reject('Something wrong');
|
||||
}
|
||||
},{once:true});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
(async function() {
|
||||
@ -69,76 +81,24 @@ WidevineCrypto.log=function() {
|
||||
}
|
||||
}
|
||||
|
||||
WidevineCrypto.Module= await WasmDsp();
|
||||
await WidevineCrypto.Module.ready;
|
||||
_freeStr=WidevineCrypto.Module._freeStr;
|
||||
stringToUTF8=WidevineCrypto.Module.stringToUTF8;
|
||||
writeArrayToMemory=WidevineCrypto.Module.writeArrayToMemory;
|
||||
UTF8ToString=WidevineCrypto.Module.UTF8ToString;
|
||||
stackSave=WidevineCrypto.Module.stackSave;
|
||||
stackRestore=WidevineCrypto.Module.stackRestore;
|
||||
stackAlloc=WidevineCrypto.Module.stackAlloc;
|
||||
|
||||
WidevineCrypto.getCFunc = function (ident) {
|
||||
return this.Module[`_${ident}`]; // closure exported function
|
||||
}
|
||||
WidevineCrypto.scall = function (ident, returnType, argTypes, args, opts) {
|
||||
const toC = {
|
||||
string (str) {
|
||||
let ret = 0;
|
||||
if (str !== null && str !== undefined && str !== 0) {
|
||||
const len = (str.length << 2) + 1;
|
||||
ret = stackAlloc(len);
|
||||
stringToUTF8(str, ret, len);
|
||||
}
|
||||
return ret;
|
||||
},
|
||||
array (arr) {
|
||||
const ret = stackAlloc(arr.length);
|
||||
writeArrayToMemory(arr, ret);
|
||||
return ret;
|
||||
}
|
||||
};
|
||||
function convertReturnValue (ret) {
|
||||
if (returnType === 'string') return UTF8ToString(ret);
|
||||
if (returnType === 'boolean') return Boolean(ret);
|
||||
return ret;
|
||||
}
|
||||
const func = this.getCFunc(ident);
|
||||
const cArgs = [];
|
||||
let stack = 0;
|
||||
if (args) {
|
||||
for (let i = 0; i < args.length; i++) {
|
||||
const converter = toC[argTypes[i]];
|
||||
if (converter) {
|
||||
if (stack === 0) stack = stackSave();
|
||||
cArgs[i] = converter(args[i]);
|
||||
} else {
|
||||
cArgs[i] = args[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
const _ret = func.apply(null, cArgs);
|
||||
const ret = convertReturnValue(_ret);
|
||||
_freeStr(_ret);
|
||||
if (stack !== 0) stackRestore(stack);
|
||||
return ret;
|
||||
}
|
||||
WidevineCrypto.swrap=function (ident, returnType, argTypes, opts) {
|
||||
argTypes = argTypes || [];
|
||||
const numericArgs = argTypes.every((type) => type === 'number');
|
||||
const numericRet = returnType !== 'string';
|
||||
if (numericRet && numericArgs && !opts) {
|
||||
return this.getCFunc(ident);
|
||||
}
|
||||
return function () {
|
||||
|
||||
return this.scall(ident, returnType, argTypes, arguments, opts);
|
||||
};
|
||||
}
|
||||
WidevineCrypto.tryUsingDecoder = WidevineCrypto.swrap('tryUsingDecoder', 'string', ['string']);
|
||||
//WidevineCrypto.Module= await WasmDsp();
|
||||
//await WidevineCrypto.Module.ready;
|
||||
//_freeStr=WidevineCrypto.Module._freeStr;
|
||||
//stringToUTF8=WidevineCrypto.Module.stringToUTF8;
|
||||
//writeArrayToMemory=WidevineCrypto.Module.writeArrayToMemory;
|
||||
//UTF8ToString=WidevineCrypto.Module.UTF8ToString;
|
||||
//stackSave=WidevineCrypto.Module.stackSave;
|
||||
//stackRestore=WidevineCrypto.Module.stackRestore;
|
||||
//stackAlloc=WidevineCrypto.Module.stackAlloc;
|
||||
|
||||
|
||||
//WidevineCrypto.tryUsingDecoder = WidevineCrypto.swrap('tryUsingDecoder', 'string', ['string']);
|
||||
|
||||
WidevineCrypto.tryUsingDecoder = async function (data)
|
||||
{
|
||||
var res=await sendMessagePromise({name:"dec",value:data});
|
||||
return res;
|
||||
}
|
||||
WidevineCrypto.chromeRSAPublicKey =
|
||||
`-----BEGIN PUBLIC KEY-----
|
||||
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvKg9eT9JPEnfVYYS50x3
|
||||
@ -166,7 +126,7 @@ WidevineCrypto.tryDecodingKey=async function(encKey)
|
||||
{
|
||||
|
||||
let hex=bytesToHex(encKey);
|
||||
let res=this.tryUsingDecoder(hex);
|
||||
let res=await this.tryUsingDecoder(hex);
|
||||
this.log(hex);
|
||||
|
||||
this.log("Output");
|
||||
|
@ -1,11 +1,16 @@
|
||||
var Cryplo = {};
|
||||
window.addEventListener("PassToBackground", function(evt) {
|
||||
chrome.runtime.sendMessage(evt.detail,response => {
|
||||
var event = new CustomEvent("BackgroundReply", {detail: response});
|
||||
window.dispatchEvent(event);});
|
||||
}, false);
|
||||
|
||||
injectScripts();
|
||||
async function injectScripts()
|
||||
{
|
||||
await injectScript('lib/pbf.3.0.5.min.js');
|
||||
await injectScript('lib/cryptojs-aes_0.2.0.min.js');
|
||||
await injectScript('protobuf-generated/license_protocol.proto.js');
|
||||
await injectScript('wasm/wasm_gsr.js');
|
||||
// await injectScript('wasm/wasm_gsr.js');
|
||||
await injectScript('content_key_decryption.js');
|
||||
await injectScript('eme_interception.js');
|
||||
}
|
||||
|
@ -6,15 +6,19 @@
|
||||
"version": "1.0.0",
|
||||
"permissions":
|
||||
[
|
||||
|
||||
"webRequest"
|
||||
],
|
||||
"icons":
|
||||
{
|
||||
|
||||
},
|
||||
"background": {
|
||||
"page": "background/background.html"
|
||||
},
|
||||
"browser_action": {
|
||||
|
||||
},
|
||||
|
||||
"content_scripts":
|
||||
[
|
||||
{
|
||||
|
File diff suppressed because one or more lines are too long
Loading…
x
Reference in New Issue
Block a user