Added DRM override

This commit is contained in:
TPD94 2025-06-01 17:38:07 -04:00
parent 033bf72151
commit 96c850c878
7 changed files with 186 additions and 4 deletions

View File

@ -67,6 +67,14 @@ chrome.runtime.onInstalled.addListener((details) => {
} }
}); });
chrome.storage.local.set({ drm_override: "DISABLED" }, () => {
if (chrome.runtime.lastError) {
console.error("Error setting DRM Override type:", chrome.runtime.lastError);
} else {
console.log("DRM Override type set to DISABLED on first install.");
}
});
chrome.storage.local.set({ cdrm_instance: null }, () => { chrome.storage.local.set({ cdrm_instance: null }, () => {
if (chrome.runtime.lastError) { if (chrome.runtime.lastError) {
console.error("Error setting CDRM instance:", chrome.runtime.lastError); console.error("Error setting CDRM instance:", chrome.runtime.lastError);

View File

@ -58,4 +58,19 @@ window.addEventListener("message", function(event) {
); );
}); });
} }
if (event.data.type === "__GET_DRM_OVERRIDE__") {
console.log("Received request for DRM override");
chrome.storage.local.get("drm_override", (result) => {
const drmOverride = result.drm_override || "DISABLED";
window.postMessage(
{
type: "__DRM_OVERRIDE__",
drmOverride
},
"*"
);
});
}
}); });

View File

@ -3,12 +3,16 @@ import hamburgerIcon from "../assets/hamburger.svg";
function TopNav({ onMenuClick }) { function TopNav({ onMenuClick }) {
const [injectionType, setInjectionType] = useState("LICENSE"); const [injectionType, setInjectionType] = useState("LICENSE");
const [drmOverride, setDrmOverride] = useState("LICENSE");
useEffect(() => { useEffect(() => {
chrome.storage.local.get("injection_type", (result) => { chrome.storage.local.get(["injection_type", "drm_override"], (result) => {
if (result.injection_type) { if (result.injection_type) {
setInjectionType(result.injection_type); setInjectionType(result.injection_type);
} }
if (result.drm_override) {
setDrmOverride(result.drm_override);
}
}); });
}, []); }, []);
@ -26,6 +30,17 @@ function TopNav({ onMenuClick }) {
}); });
}; };
const handleDrmOverrideChange = (type) => {
chrome.storage.local.set({ drm_override: type }, () => {
if (chrome.runtime.lastError) {
console.error("Error updating drm_override:", chrome.runtime.lastError);
} else {
setDrmOverride(type);
console.log(`DRM Override updated to ${type}`);
}
});
};
return ( return (
<div className="w-full h-full flex flex-row"> <div className="w-full h-full flex flex-row">
<img <img
@ -34,6 +49,35 @@ function TopNav({ onMenuClick }) {
className="h-full w-16 p-2 flex items-center cursor-pointer" className="h-full w-16 p-2 flex items-center cursor-pointer"
onClick={onMenuClick} onClick={onMenuClick}
/> />
<div className="flex flex-row h-full justify-center items-center ml-auto mr-2">
<p className="text-white text-lg p-2 mr-2 border-r-2 border-r-white text-nowrap">
DRM Override:
</p>
<button
onClick={() => handleDrmOverrideChange("WIDEVINE")}
className={`text-white text-lg p-2 rounded-md m-1 cursor-pointer ${
drmOverride === "WIDEVINE" ? "bg-green-500/70" : "bg-black"
}`}
>
Widevine
</button>
<button
onClick={() => handleDrmOverrideChange("PLAYREADY")}
className={`text-white text-lg p-2 rounded-md m-1 cursor-pointer ${
drmOverride === "PLAYREADY" ? "bg-sky-500/70" : "bg-black"
}`}
>
PlayReady
</button>
<button
onClick={() => handleDrmOverrideChange("DISABLED")}
className={`text-white text-lg p-2 rounded-md m-1 cursor-pointer ${
drmOverride === "DISABLED" ? "bg-red-500/70" : "bg-black"
}`}
>
Disabled
</button>
</div>
<div className="flex flex-row h-full justify-center items-center ml-auto mr-2"> <div className="flex flex-row h-full justify-center items-center ml-auto mr-2">
<p className="text-white text-lg p-2 mr-2 border-r-2 border-r-white text-nowrap"> <p className="text-white text-lg p-2 mr-2 border-r-2 border-r-white text-nowrap">
Injection Type: Injection Type:

View File

@ -10,6 +10,17 @@ let interceptType = "DISABLED"; // Default to LICENSE, can be changed to 'EME' f
let originalChallenge = null; let originalChallenge = null;
let widevineDeviceInfo = null; let widevineDeviceInfo = null;
let playreadyDeviceInfo = null; let playreadyDeviceInfo = null;
let drmOveride = "DISABLED"
window.postMessage({ type: "__GET_DRM_OVERRIDE__" }, "*");
window.addEventListener("message", function(event) {
if (event.source !== window) return;
if (event.data.type === "__DRM_OVERRIDE__") {
drmOveride = event.data.drmOverride || "DISABLED";
console.log("DRM Override set to:", drmOveride);
}
});
window.postMessage({ type: "__GET_INJECTION_TYPE__" }, "*"); window.postMessage({ type: "__GET_INJECTION_TYPE__" }, "*");
@ -542,7 +553,7 @@ MediaKeySession.prototype.generateRequest = async function(initDataType, initDat
playReadyPssh = getPlayReadyPssh(initData); playReadyPssh = getPlayReadyPssh(initData);
playReadyAttempted = !!playReadyPssh; playReadyAttempted = !!playReadyPssh;
if (playReadyPssh) { if (playReadyPssh && drmOveride !== "WIDEVINE") {
console.log("[PlayReady PSSH] Found:", playReadyPssh); console.log("[PlayReady PSSH] Found:", playReadyPssh);
const drmType = { const drmType = {
type: "__DRM_TYPE__", type: "__DRM_TYPE__",
@ -579,7 +590,7 @@ MediaKeySession.prototype.generateRequest = async function(initDataType, initDat
// === Fallback to Widevine === // === Fallback to Widevine ===
if (!playReadySucceeded) { if (!playReadySucceeded) {
widevinePssh = getWidevinePssh(initData); widevinePssh = getWidevinePssh(initData);
if (widevinePssh) { if (widevinePssh && drmOveride !== "PLAYREADY") {
console.log("[Widevine PSSH] Found:", widevinePssh); console.log("[Widevine PSSH] Found:", widevinePssh);
const drmType = { const drmType = {
type: "__DRM_TYPE__", type: "__DRM_TYPE__",

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -4,7 +4,7 @@
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>CDRM Decryption Extension</title> <title>CDRM Decryption Extension</title>
<script type="module" crossorigin src="./assets/index-DwE1Hrng.js"></script> <script type="module" crossorigin src="./assets/index-BnIE4uKp.js"></script>
<link rel="stylesheet" crossorigin href="./assets/index-DyrP80vq.css"> <link rel="stylesheet" crossorigin href="./assets/index-DyrP80vq.css">
</head> </head>
<body class="min-w-full min-h-full w-full h-full"> <body class="min-w-full min-h-full w-full h-full">