Added better message logic
This commit is contained in:
parent
b3eec07085
commit
31fd877bd9
@ -26,7 +26,6 @@ window.addEventListener("message", function(event) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (event.data.type === "__GET_CDM_DEVICES__") {
|
if (event.data.type === "__GET_CDM_DEVICES__") {
|
||||||
console.log("Received request for CDM devices");
|
|
||||||
|
|
||||||
chrome.storage.local.get(["widevine_device", "playready_device"], (result) => {
|
chrome.storage.local.get(["widevine_device", "playready_device"], (result) => {
|
||||||
const widevine_device = result.widevine_device || null;
|
const widevine_device = result.widevine_device || null;
|
||||||
@ -44,7 +43,6 @@ window.addEventListener("message", function(event) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (event.data.type === "__GET_INJECTION_TYPE__") {
|
if (event.data.type === "__GET_INJECTION_TYPE__") {
|
||||||
console.log("Received request for injection type");
|
|
||||||
|
|
||||||
chrome.storage.local.get("injection_type", (result) => {
|
chrome.storage.local.get("injection_type", (result) => {
|
||||||
const injectionType = result.injection_type || "LICENSE";
|
const injectionType = result.injection_type || "LICENSE";
|
||||||
@ -59,7 +57,6 @@ window.addEventListener("message", function(event) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (event.data.type === "__GET_DRM_OVERRIDE__") {
|
if (event.data.type === "__GET_DRM_OVERRIDE__") {
|
||||||
console.log("Received request for DRM override");
|
|
||||||
|
|
||||||
chrome.storage.local.get("drm_override", (result) => {
|
chrome.storage.local.get("drm_override", (result) => {
|
||||||
const drmOverride = result.drm_override || "DISABLED";
|
const drmOverride = result.drm_override || "DISABLED";
|
||||||
|
87
inject.js
87
inject.js
@ -1,16 +1,16 @@
|
|||||||
let widevineDeviceInfo = null;
|
let widevineDeviceInfo = null;
|
||||||
let playreadyDeviceInfo = null;
|
let playreadyDeviceInfo = null;
|
||||||
let originalMessage = null;
|
|
||||||
let originalChallenge = null
|
let originalChallenge = null
|
||||||
let serviceCertFound = false;
|
let serviceCertFound = false;
|
||||||
let drmType = "NONE";
|
let drmType = "NONE";
|
||||||
let psshFound = false;
|
let psshFound = false;
|
||||||
let firstValidLicenseChallenge = false;
|
|
||||||
let pssh = null;
|
let pssh = null;
|
||||||
let drmOverride = "DISABLED";
|
let drmOverride = "DISABLED";
|
||||||
let interceptType = "DISABLED";
|
let interceptType = "DISABLED";
|
||||||
let remoteCDM = null;
|
let remoteCDM = null;
|
||||||
|
let generateRequestCalled = false;
|
||||||
|
let remoteListenerMounted = false;
|
||||||
|
let injectionSuccess = false;
|
||||||
|
|
||||||
// Post message to content.js to get DRM override
|
// Post message to content.js to get DRM override
|
||||||
window.postMessage({ type: "__GET_DRM_OVERRIDE__" }, "*");
|
window.postMessage({ type: "__GET_DRM_OVERRIDE__" }, "*");
|
||||||
@ -426,4 +426,83 @@ function arrayBufferToBase64(uint8array) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return window.btoa(binary);
|
return window.btoa(binary);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const generateRequestFunction = MediaKeySession.prototype.generateRequest;
|
||||||
|
|
||||||
|
MediaKeySession.prototype.generateRequest = async function(initDataType, initData) {
|
||||||
|
if (!generateRequestCalled) {
|
||||||
|
generateRequestCalled = true;
|
||||||
|
const session = this;
|
||||||
|
let playReadyPssh = getPlayReadyPssh(initData);
|
||||||
|
if (playReadyPssh) {
|
||||||
|
// PlayReady Code
|
||||||
|
drmType = "PlayReady";
|
||||||
|
window.postMessage({ type: "__DRM_TYPE__", data: "PlayReady" }, "*");
|
||||||
|
console.log("[DRM Detected] PlayReady");
|
||||||
|
pssh = playReadyPssh;
|
||||||
|
window.postMessage({ type: "__PSSH_DATA__", data: playReadyPssh }, "*");
|
||||||
|
console.log("[PlayReady PSSH found] " + playReadyPssh)
|
||||||
|
}
|
||||||
|
let wideVinePssh = getWidevinePssh(initData)
|
||||||
|
if (wideVinePssh) {
|
||||||
|
// Widevine code
|
||||||
|
drmType = "Widevine";
|
||||||
|
window.postMessage({ type: "__DRM_TYPE__", data: "Widevine" }, "*");
|
||||||
|
console.log("[DRM Detected] Widevine");
|
||||||
|
pssh = wideVinePssh;
|
||||||
|
window.postMessage({ type: "__PSSH_DATA__", data: wideVinePssh }, "*");
|
||||||
|
console.log("[Widevine PSSH found] " + wideVinePssh)
|
||||||
|
}
|
||||||
|
if (!remoteListenerMounted) {
|
||||||
|
remoteListenerMounted = true;
|
||||||
|
session.addEventListener("message", async function messageInterceptor(event) {
|
||||||
|
event.stopImmediatePropagation();
|
||||||
|
const uint8Array = new Uint8Array(event.message);
|
||||||
|
const base64challenge = arrayBufferToBase64(uint8Array);
|
||||||
|
if (base64challenge === "CAQ=") {
|
||||||
|
const {
|
||||||
|
device_type, system_id, security_level, host, secret, device_name
|
||||||
|
} = widevineDeviceInfo;
|
||||||
|
remoteCDM = new remoteWidevineCDM(device_type, system_id, security_level, host, secret, device_name);
|
||||||
|
await remoteCDM.openSession();
|
||||||
|
}
|
||||||
|
if (base64challenge.startsWith("CAES") && !injectionSuccess) {
|
||||||
|
if (interceptType === "EME") {
|
||||||
|
injectionSuccess = true;
|
||||||
|
}
|
||||||
|
originalChallenge = base64challenge;
|
||||||
|
if (!remoteCDM) {
|
||||||
|
const {
|
||||||
|
device_type, system_id, security_level, host, secret, device_name
|
||||||
|
} = widevineDeviceInfo;
|
||||||
|
remoteCDM = new remoteWidevineCDM(device_type, system_id, security_level, host, secret, device_name);
|
||||||
|
await remoteCDM.openSession();
|
||||||
|
}
|
||||||
|
await remoteCDM.getChallenge(pssh);
|
||||||
|
if (interceptType === "EME") {
|
||||||
|
const uint8challenge = base64ToUint8Array(remoteCDM.challenge);
|
||||||
|
const challengeBuffer = uint8challenge.buffer;
|
||||||
|
const syntheticEvent = new MessageEvent("message", {
|
||||||
|
data: event.data,
|
||||||
|
origin: event.origin,
|
||||||
|
lastEventId: event.lastEventId,
|
||||||
|
source: event.source,
|
||||||
|
ports: event.ports
|
||||||
|
});
|
||||||
|
Object.defineProperty(syntheticEvent, "message", {
|
||||||
|
get: () => challengeBuffer
|
||||||
|
});
|
||||||
|
session.dispatchEvent(syntheticEvent);
|
||||||
|
console.log("Intercepted EME Challenge and injected custom one.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (injectionSuccess) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
console.log("Message interceptor mounted.");
|
||||||
|
}
|
||||||
|
return generateRequestFunction.call(session, initDataType, initData);
|
||||||
|
}}
|
Loading…
x
Reference in New Issue
Block a user