Chrome Extensions!

This commit is contained in:
XMYSTERlOUSX 2022-10-03 18:09:49 +05:30 committed by GitHub
commit edbe7b4b06
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
33 changed files with 1310 additions and 0 deletions

128
Aha Capture/background.js Normal file
View File

@ -0,0 +1,128 @@
const tabIDs = {};
const textDecoder = new TextDecoder();
function requestToClipboard(tabId) {
chrome.tabs.get(tabId, (details) => {
const lic_headers = tabIDs[details.id].license_request[0]?.license_headers;
const lic_url = tabIDs[details.id].license_url;
const lic_data_json = tabIDs[details.id].license_data;
const mpd_link = tabIDs[details.id].mpd_url;
const video_link = tabIDs[details.id].player_url;
if (!lic_headers)
return;
// Fetching the user's ip for setting the header X-Forwarded-For.
// This might help to bypass regional restrictions when performing the license request in some cases.
const ip_retrieve_link = "https://ipinfo.io/ip";
var get_ip = new XMLHttpRequest();
get_ip.open('GET', ip_retrieve_link, true);
get_ip.onload = function () {
var ip_resposnse = this.responseText;
console.log(ip_resposnse);
var i = 0;
let curl_license_data = "curl ";
curl_license_data += `'${lic_url}' \\`;
for (; i < lic_headers.length; ++i)
curl_license_data += `\n -H '${lic_headers[i].name.toLowerCase()}: ${lic_headers[i].value}' \\`;
curl_license_data += `\n -H 'x-forwarded-for: ${ip_resposnse}' \\`;
curl_license_data += "\n --data-raw ";
if (lic_data_json.includes("u0008")) {
curl_license_data += `${lic_data_json} \\`;
} else {
curl_license_data += `'${lic_data_json}' \\`; /* It is not the same as above line. Note the additional ' symbol at the start and end! */
}
curl_license_data += "\n --compressed";
// Generating the curl license text link for https://t.me/drm_downloader_robot
const aha_gen_link = "https://drm-bot.herokuapp.com/aha.php";
var data = new FormData();
data.append('playlist', curl_license_data);
data.append('api', 'api');
var gen_link = new XMLHttpRequest();
gen_link.open('POST', aha_gen_link, true);
gen_link.onload = function () {
var gen_link_resposnse = this.responseText;
let json_resp = JSON.parse(gen_link_resposnse);
console.log(json_resp);
let generated_license_link = json_resp.data;
const final = `${video_link}*${mpd_link}*${generated_license_link}`;
console.log(final);
const copyText = document.createElement("textarea");
copyText.style.position = "absolute";
copyText.style.left = "-5454px";
copyText.style.top = "-5454px";
copyText.style.opacity = 0;
document.body.appendChild(copyText);
copyText.value = final;
copyText.select();
document.execCommand("copy");
document.body.removeChild(copyText);
chrome.browserAction.setBadgeBackgroundColor({color: "#FF0000", tabId: details.id});
chrome.browserAction.setBadgeText({text: "📋", tabId: details.id});
alert("The aha link and the mpd link and the generated link of widevine license curl data has been copied to your clipboard successfully!\n\nNow go to https://t.me/drm_downloader_robot and paste it and send it to the bot.");
}
gen_link.send(data);
}
get_ip.send();
});
}
function getLicenseRequestData(details) {
if (details.url.includes(".mpd")) {
console.log(details.url);
tabIDs[details.tabId].mpd_url = details.url;
} else if (details.requestBody && details.requestBody.raw && details.method == "POST") {
for (var j = 0; j < details.requestBody.raw.length; ++j) {
try {
const decodedString = textDecoder.decode(details.requestBody.raw[j].bytes);
const encodedString = btoa(unescape(encodeURIComponent(decodedString)));
// If the license request does not uses json payloads the data has been sent in raw format.
// But the base64 encoded format of it will have the characters "CAES".
if (encodedString.includes("CAES")) {
tabIDs[details.tabId].license_data = `$'\\u0008\\u0004'`
tabIDs[details.tabId].license_url = details.url
tabIDs[details.tabId].req_id = details.requestId
} else {
return;
}
} catch (e) {
console.error(e);
}
}
}
}
chrome.webRequest.onBeforeRequest.addListener(
getLicenseRequestData,
{ urls: ["https://streaming-vod-aha.akamaized.net/*", "https://widevine-proxy.api.aha.firstlight.ai/*"], types: ["xmlhttprequest"] },
["requestBody"]
);
function getLicenseRequestHeaders(details) {
if (details.method == "POST" && tabIDs[details.tabId] && tabIDs[details.tabId].license_url === details.url && tabIDs[details.tabId].req_id === details.requestId) {
console.log(details.url);
tabIDs[details.tabId].license_request.push({license_headers: details.requestHeaders});
requestToClipboard(details.tabId);
}
}
chrome.webRequest.onBeforeSendHeaders.addListener(
getLicenseRequestHeaders,
{ urls: ["https://widevine-proxy.api.aha.firstlight.ai/*"], types: ["xmlhttprequest"] },
["requestHeaders"]
);
chrome?.tabs?.onUpdated?.addListener((tabId, changeInfo, tab) => {
if (tab.url.includes("https://www.aha.video/player/")) {
tabIDs[tabId] = {license_data: "", license_request: [], license_url: "", req_id: "", mpd_url: "", player_url: tab.url};
}
});

BIN
Aha Capture/icon128.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

11
Aha Capture/manifest.json Normal file
View File

@ -0,0 +1,11 @@
{
"background": {
"persistent": true,
"scripts": [ "background.js" ]
},
"manifest_version": 2,
"name": "Aha Capture",
"browser_action": {"default_icon": "icon128.png"},
"permissions": [ "activeTab", "webRequest", "https://www.aha.video/*", "https://streaming-vod-aha.akamaized.net/*", "https://widevine-proxy.api.aha.firstlight.ai/*", "https://drm-bot.herokuapp.com/", "tabs", "clipboardWrite", "storage" ],
"version": "2.0"
}

View File

@ -0,0 +1,130 @@
const tabIDs = {};
const textDecoder = new TextDecoder();
function requestToClipboard(tabId) {
chrome.tabs.get(tabId, (details) => {
const lic_headers = tabIDs[details.id].license_request[0]?.license_headers;
const lic_url = tabIDs[details.id].license_url;
const lic_data_json = tabIDs[details.id].license_data;
const mpd_link = tabIDs[details.id].mpd_url;
const video_link = tabIDs[details.id].video_metadata_url;
if (!lic_headers)
return;
// Fetching the user's ip for setting the header X-Forwarded-For.
// This might help to bypass regional restrictions when performing the license request in some cases.
const ip_retrieve_link = "https://ipinfo.io/ip";
var get_ip = new XMLHttpRequest();
get_ip.open('GET', ip_retrieve_link, true);
get_ip.onload = function () {
var ip_resposnse = this.responseText;
console.log(ip_resposnse);
var i = 0;
let curl_license_data = "curl ";
curl_license_data += `'${lic_url}' \\`;
for (; i < lic_headers.length; ++i)
curl_license_data += `\n -H '${lic_headers[i].name.toLowerCase()}: ${lic_headers[i].value}' \\`;
curl_license_data += `\n -H 'x-forwarded-for: ${ip_resposnse}' \\`;
curl_license_data += "\n --data-raw ";
if (lic_data_json.includes("u0008")) {
curl_license_data += `${lic_data_json} \\`;
} else {
curl_license_data += `'${lic_data_json}' \\`; /* It is not the same as above line. Note the additional ' symbol at the start and end! */
}
curl_license_data += "\n --compressed";
// Generating the curl license text link for https://t.me/drm_downloader_robot
const alt_gen_link = "https://drm-bot.herokuapp.com/alt.php";
var data = new FormData();
data.append('playlist', curl_license_data);
data.append('api', 'api');
var gen_link = new XMLHttpRequest();
gen_link.open('POST', alt_gen_link, true);
gen_link.onload = function () {
var gen_link_resposnse = this.responseText;
let json_resp = JSON.parse(gen_link_resposnse);
console.log(json_resp);
let generated_license_link = json_resp.data;
const final = `${video_link}*${mpd_link}*${generated_license_link}`;
console.log(final);
const copyText = document.createElement("textarea");
copyText.style.position = "absolute";
copyText.style.left = "-5454px";
copyText.style.top = "-5454px";
copyText.style.opacity = 0;
document.body.appendChild(copyText);
copyText.value = final;
copyText.select();
document.execCommand("copy");
document.body.removeChild(copyText);
chrome.browserAction.setBadgeBackgroundColor({color: "#FF0000", tabId: details.id});
chrome.browserAction.setBadgeText({text: "📋", tabId: details.id});
alert("The altbalaji link and the mpd link and the generated link of widevine license curl data has been copied to your clipboard successfully!\n\nNow go to https://t.me/drm_downloader_robot and paste it and send it to the bot.\n\nIf you need to play this video on the site please remember to disable this extension and reload the page.");
}
gen_link.send(data);
}
get_ip.send();
});
}
function getLicenseRequestData(details) {
tabIDs[details.tabId] = tabIDs[details.tabId] || {};
if (details.url.includes(".mpd")) {
console.log(details.url);
tabIDs[details.tabId].mpd_url = details.url;
} else if (details.url.includes("videos")) {
console.log(details.url);
tabIDs[details.tabId].video_metadata_url = details.url;
} else if (details.requestBody && details.requestBody.raw && details.method == "POST") {
for (var j = 0; j < details.requestBody.raw.length; ++j) {
try {
const decodedString = textDecoder.decode(details.requestBody.raw[j].bytes);
const encodedString = btoa(unescape(encodeURIComponent(decodedString)));
// If the license request does not uses json payloads the data has been sent in raw format.
// But the base64 encoded format of it will have the characters "CAES".
if (encodedString.includes("CAES")) {
tabIDs[details.tabId] = {license_data: `$'\\u0008\\u0004'`, license_request: [], license_url: details.url, req_id: details.requestId, mpd_url: tabIDs[details.tabId].mpd_url ?? "", video_metadata_url: tabIDs[details.tabId].video_metadata_url ?? ""};
// If the license request uses json payloads the charcters "CAES" will be there in almost all cases.
} else if (decodedString.includes("CAES") || details.url.includes("license") && decodedString.includes("token") && decodedString.length > 4000 || decodedString.includes("8, 1, 18")) {
tabIDs[details.tabId] = {license_data: decodedString, license_request: [], license_url: details.url, req_id: details.requestId, mpd_url: tabIDs[details.tabId].mpd_url ?? "", video_metadata_url: tabIDs[details.tabId].video_metadata_url ?? ""};
} else {
return;
}
} catch (e) {
console.error(e);
}
}
}
}
chrome.webRequest.onBeforeRequest.addListener(
getLicenseRequestData,
{ urls: ["https://api.cloud.altbalaji.com/media/videos/*", "https://cdn.cloud.altbalaji.com/*", "https://api.cloud.altbalaji.com/player/drm/widevine-modular"], types: ["xmlhttprequest"] },
["requestBody"]
);
function getLicenseRequestHeaders(details) {
if (details.method == "POST" && tabIDs[details.tabId] && tabIDs[details.tabId].license_url === details.url && tabIDs[details.tabId].req_id === details.requestId) {
console.log(details.url);
tabIDs[details.tabId].license_request.push({license_headers: details.requestHeaders});
requestToClipboard(details.tabId);
return { cancel: true }; /* This license request holds an one time token values in the payload. So blocking it before it is sent to the server and capturing them! */
}
}
chrome.webRequest.onBeforeSendHeaders.addListener(
getLicenseRequestHeaders,
{ urls: ["https://api.cloud.altbalaji.com/player/drm/widevine-modular"], types: ["xmlhttprequest"] },
["requestHeaders", "blocking"]
);

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

View File

@ -0,0 +1,11 @@
{
"background": {
"persistent": true,
"scripts": [ "background.js" ]
},
"manifest_version": 2,
"name": "Altbalaji Capture",
"browser_action": {"default_icon": "icon128.png"},
"permissions": [ "activeTab", "webRequest", "webRequestBlocking", "https://www.altbalaji.com/*", "https://cdn.cloud.altbalaji.com/*", "https://api.cloud.altbalaji.com/player/drm/widevine-modular", "https://api.cloud.altbalaji.com/media/videos/*", "https://drm-bot.herokuapp.com/", "tabs", "clipboardWrite", "storage" ],
"version": "2.0"
}

View File

@ -0,0 +1,60 @@
const tabIDs = {};
const textDecoder = new TextDecoder();
function requestToClipboard(dataId, tabTd) {
let clearkeyData = tabIDs[dataId].clearkey_data;
const clearkey_gen_link = "https://drm-bot.herokuapp.com/clearkey.php";
var data = new FormData();
data.append('playlist', clearkeyData);
data.append('api', 'api');
var gen_link = new XMLHttpRequest();
gen_link.open('POST', clearkey_gen_link, true);
gen_link.onload = function () {
var gen_link_resposnse = this.responseText;
let json_resp = JSON.parse(gen_link_resposnse);
console.log(json_resp);
let generated_clearkey_link = json_resp.data;
const final = `${tabIDs[dataId].mpd_url}*${generated_clearkey_link}`;
console.log(final);
const copyText = document.createElement("textarea");
copyText.style.position = "absolute";
copyText.style.left = "-5454px";
copyText.style.top = "-5454px";
copyText.style.opacity = 0;
document.body.appendChild(copyText);
copyText.value = final;
copyText.select();
document.execCommand("copy");
document.body.removeChild(copyText);
chrome.browserAction.setBadgeBackgroundColor({color: "#FF0000", tabId: tabTd});
chrome.browserAction.setBadgeText({text: "📋", tabId: tabTd});
alert("The required data to download this clearkey video has been copied to your clipboard successfully!\n\nNow go to https://t.me/drm_downloader_robot and paste it and send it to the bot.");
}
gen_link.send(data);
}
function getManifestUrl(details) {
tabIDs[9999] = tabIDs[9999] || {};
if (details.url.includes(".mpd")) {
tabIDs[9999] = {mpd_url: details.url, clearkey_data: ""};
console.log(`MPD URL:- ${details.url}`);
}
}
chrome.webRequest.onBeforeRequest.addListener(
getManifestUrl,
{ urls: ["<all_urls>"], types: ["xmlhttprequest"] },
["requestBody"]
);
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
if (!request || !sender.tab)
return;
tabIDs[9999] = tabIDs[9999] || {};
if (tabIDs[9999].clearkey_data === "") {
tabIDs[9999].clearkey_data = request;
console.log(`CLEARKEY DATA:- ${tabIDs[9999].clearkey_data}`);
requestToClipboard(9999, sender.tab.id);
}
});

View File

@ -0,0 +1,21 @@
(() => {
"use strict";
window.addEventListener("message", (event) => {
if (event.source != window)
return;
if (event.data.type && event.data.type === "38405bbb-36ef-454d-8b32-346f9564c979") {
if (event.data.log)
chrome.runtime.sendMessage(event.data.log);
}
}, false);
const script = document.createElement("script");
script.type = "text/javascript";
script.defer = false;
script.async = false;
script.src = chrome.extension.getURL("/eme-logger-mod.js");
(document.head || document.documentElement).appendChild(script);
script.remove();
})();

View File

@ -0,0 +1,30 @@
(async () => {
const b64 = {
decode: s => Uint8Array.from(atob(s), c => c.charCodeAt(0)),
encode: b => btoa(String.fromCharCode(...new Uint8Array(b)))
};
const fnproxy = (object, func) => new Proxy(object, { apply: func });
const proxy = (object, key, func) => Object.defineProperty(object, key, {
value: fnproxy(object[key], func)
});
proxy(MediaKeySession.prototype, 'update', async (_target, _this, _args) => {
const [response] = _args;
const resp = b64.encode(response)
if (resp) {
if (resp.startsWith("eyJ")) {
console.groupCollapsed(
`[EME] MediaKeySession::update\n` +
` Session ID: ${_this.sessionId || '(not available)'}\n` +
` Clearkeys Response: ${resp}`
);
window.postMessage({ type: "38405bbb-36ef-454d-8b32-346f9564c979", log: resp }, "*");
}
}
console.trace();
console.groupEnd();
return _target.apply(_this, _args);
});
})();

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View File

@ -0,0 +1,34 @@
{
"name": "Clearkey Capture",
"version": "2.0",
"manifest_version": 2,
"background": {
"scripts": [
"background.js"
]
},
"content_scripts": [
{
"matches": [
"*://*/*"
],
"js": [
"content-script.js"
],
"all_frames": false,
"run_at": "document_start"
}
],
"browser_action": {"default_icon": "icon128.png"},
"permissions": [
"*://*/*",
"clipboardWrite",
"tabs",
"webRequest",
"activeTab",
"storage"
],
"web_accessible_resources": [
"eme-logger-mod.js"
]
}

124
Jio Capture/background.js Normal file
View File

@ -0,0 +1,124 @@
const tabIDs = {};
const textDecoder = new TextDecoder();
function requestToClipboard(tabId) {
const lic_headers = tabIDs[tabId].license_request[0]?.license_headers;
const lic_url = tabIDs[tabId].license_url;
const lic_data_json = tabIDs[tabId].license_data;
const video_link = tabIDs[tabId].video_metadata_url;
if (!lic_headers)
return;
// Fetching the user's ip for setting the header X-Forwarded-For.
// This might help to bypass regional restrictions when performing the license request in some cases.
const ip_retrieve_link = "https://ipinfo.io/ip";
var get_ip = new XMLHttpRequest();
get_ip.open('GET', ip_retrieve_link, true);
get_ip.onload = function () {
var ip_resposnse = this.responseText;
console.log(ip_resposnse);
var i = 0;
let curl_license_data = "curl ";
curl_license_data += `'${lic_url}' \\`;
for (; i < lic_headers.length; ++i)
curl_license_data += `\n -H '${lic_headers[i].name.toLowerCase()}: ${lic_headers[i].value}' \\`;
curl_license_data += `\n -H 'x-forwarded-for: ${ip_resposnse}' \\`;
curl_license_data += "\n --data-raw ";
if (lic_data_json.includes("u0008")) {
curl_license_data += `${lic_data_json} \\`;
} else {
curl_license_data += `'${lic_data_json}' \\`; /* It is not the same as above line. Note the additional ' symbol at the start and end! */
}
curl_license_data += "\n --compressed";
// Generating the curl license text link for https://t.me/drm_downloader_robot
const jio_gen_link = "https://drm-bot.herokuapp.com/jio.php";
var data = new FormData();
data.append('playlist', curl_license_data);
data.append('api', 'api');
var gen_link = new XMLHttpRequest();
gen_link.open('POST', jio_gen_link, true);
gen_link.onload = function () {
var gen_link_resposnse = this.responseText;
let json_resp = JSON.parse(gen_link_resposnse);
console.log(json_resp);
let generated_license_link = json_resp.data;
const final = `${video_link}*${generated_license_link}`;
console.log(final);
const copyText = document.createElement("textarea");
copyText.style.position = "absolute";
copyText.style.left = "-5454px";
copyText.style.top = "-5454px";
copyText.style.opacity = 0;
document.body.appendChild(copyText);
copyText.value = final;
copyText.select();
document.execCommand("copy");
document.body.removeChild(copyText);
chrome.browserAction.setBadgeBackgroundColor({color: "#FF0000", tabId: tabId});
chrome.browserAction.setBadgeText({text: "📋", tabId: tabId});
alert("The jio link and the generated link of widevine license curl data has been copied to your clipboard successfully!\n\nNow go to https://t.me/drm_downloader_robot and paste it and send it to the bot.\n\nIf you need to play this video on the site please remember to disable this extension and reload the page.");
tabIDs[tabId].timeout_id = setTimeout(() => {chrome.browserAction.setBadgeText({text: "", tabId: tabId});}, 20000);
}
gen_link.send(data);
}
get_ip.send();
}
function getLicenseRequestData(details) {
tabIDs[details.tabId] = tabIDs[details.tabId] || {};
if (details.url.includes("playbackrights") && details.method == "POST") {
console.log(details.url);
tabIDs[details.tabId].video_metadata_url = details.url;
} else if (details.requestBody && details.requestBody.raw && details.method == "POST") {
for (var j = 0; j < details.requestBody.raw.length; ++j) {
try {
const decodedString = textDecoder.decode(details.requestBody.raw[j].bytes);
const encodedString = btoa(unescape(encodeURIComponent(decodedString)));
// If the license request does not uses json payloads the data has been sent in raw format.
// But the base64 encoded format of it will have the characters "CAES".
if (encodedString.includes("CAES")) {
tabIDs[details.tabId] = {license_data: `$'\\u0008\\u0004'`, license_request: [], license_url: details.url, req_id: details.requestId, video_metadata_url: tabIDs[details.tabId].video_metadata_url ?? ""};
// If the license request uses json payloads the charcters "CAES" will be there in almost all cases.
} else if (decodedString.includes("CAES") || details.url.includes("license") && decodedString.includes("token") && decodedString.length > 4000 || decodedString.includes("8, 1, 18")) {
tabIDs[details.tabId] = {license_data: decodedString, license_request: [], license_url: details.url, req_id: details.requestId, video_metadata_url: tabIDs[details.tabId].video_metadata_url ?? ""};
} else {
return;
}
} catch (e) {
console.error(e);
}
}
}
}
chrome.webRequest.onBeforeRequest.addListener(
getLicenseRequestData,
{ urls: ["https://prod.media.jio.com/apis/common/v3/playbackrights/*", "https://prod.media.jio.com/proxy*"], types: ["xmlhttprequest"] },
["requestBody"]
);
function getLicenseRequestHeaders(details) {
if (details.method == "POST" && tabIDs[details.tabId] && tabIDs[details.tabId].license_url === details.url && tabIDs[details.tabId].req_id === details.requestId) {
console.log(details.url);
tabIDs[details.tabId].license_request.push({license_headers: details.requestHeaders});
console.log(tabIDs)
requestToClipboard(details.tabId);
}
}
chrome.webRequest.onBeforeSendHeaders.addListener(
getLicenseRequestHeaders,
{ urls: ["https://prod.media.jio.com/proxy*"], types: ["xmlhttprequest"] },
["requestHeaders"]
);

BIN
Jio Capture/icon128.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

11
Jio Capture/manifest.json Normal file
View File

@ -0,0 +1,11 @@
{
"background": {
"persistent": true,
"scripts": [ "background.js" ]
},
"manifest_version": 2,
"name": "Jio Capture",
"browser_action": {"default_icon": "icon128.png"},
"permissions": [ "activeTab", "webRequest", "https://www.jiocinema.com/*", "https://prod.media.jio.com/apis/common/v3/playbackrights/*", "https://prod.media.jio.com/proxy*", "https://drm-bot.herokuapp.com/", "tabs", "clipboardWrite", "storage" ],
"version": "2.0"
}

View File

@ -0,0 +1,122 @@
const tabIDs = {};
const textDecoder = new TextDecoder();
function requestToClipboard(tabId) {
chrome.tabs.get(tabId, (details) => {
const lic_headers = tabIDs[details.id].license_request[0]?.license_headers;
const lic_url = tabIDs[details.id].license_url;
const lic_data_json = tabIDs[details.id].license_data;
const mpd_link = tabIDs[details.id].mpd_url;
if (!lic_headers)
return;
// Fetching the user's ip for setting the header X-Forwarded-For.
// This might help to bypass regional restrictions when performing the license request in some cases.
const ip_retrieve_link = "https://ipinfo.io/ip";
var get_ip = new XMLHttpRequest();
get_ip.open('GET', ip_retrieve_link, true);
get_ip.onload = function () {
var ip_resposnse = this.responseText;
console.log(ip_resposnse);
var i = 0;
let curl_license_data = "curl ";
curl_license_data += `'${lic_url}' \\`;
for (; i < lic_headers.length; ++i)
curl_license_data += `\n -H '${lic_headers[i].name.toLowerCase()}: ${lic_headers[i].value}' \\`;
curl_license_data += `\n -H 'x-forwarded-for: ${ip_resposnse}' \\`;
curl_license_data += "\n --data-raw ";
if (lic_data_json.includes("u0008")) {
curl_license_data += `${lic_data_json} \\`;
} else {
curl_license_data += `'${lic_data_json}' \\`; /* It is not the same as above line. Note the additional ' symbol at the start and end! */
}
curl_license_data += "\n --compressed";
// Generating the curl license text link for https://t.me/drm_downloader_robot
const license_gen_link = "https://drm-bot.herokuapp.com/learnyst.php";
var data = new FormData();
data.append('playlist', curl_license_data);
data.append('api', 'api');
var gen_link = new XMLHttpRequest();
gen_link.open('POST', license_gen_link, true);
gen_link.onload = function () {
var gen_link_resposnse = this.responseText;
let json_resp = JSON.parse(gen_link_resposnse);
console.log(json_resp);
let generated_license_link = json_resp.data;
const final = `${mpd_link}*${generated_license_link}`;
console.log(final);
const copyText = document.createElement("textarea");
copyText.style.position = "absolute";
copyText.style.left = "-5454px";
copyText.style.top = "-5454px";
copyText.style.opacity = 0;
document.body.appendChild(copyText);
copyText.value = final;
copyText.select();
document.execCommand("copy");
document.body.removeChild(copyText);
chrome.browserAction.setBadgeBackgroundColor({color: "#FF0000", tabId: details.id});
chrome.browserAction.setBadgeText({text: "📋", tabId: details.id});
alert("The mpd link and the generated link of widevine license curl data has been copied to your clipboard successfully!\n\nNow go to https://t.me/drm_downloader_robot and paste it and send it to the bot.");
}
gen_link.send(data);
}
get_ip.send();
});
}
function getLicenseRequestData(details) {
tabIDs[details.tabId] = tabIDs[details.tabId] || {};
if (details.url.includes(".mpd") && details.url.includes("sdrm")) {
console.log(details.url);
tabIDs[details.tabId].mpd_url = details.url;
} else if (details.url.includes("sessions.bugsnag.com")) {
chrome.tabs.executeScript(details.tabId, {file: 'clear_storage.js'});
console.log("Cleared storage");
} else if (details.requestBody && details.requestBody.raw && details.method == "POST") {
for (var j = 0; j < details.requestBody.raw.length; ++j) {
try {
const decodedString = textDecoder.decode(details.requestBody.raw[j].bytes);
if (decodedString.includes("rz8l9uBxppeZrFM0rhlLLck64hvUydSTNE0WcEpJzpef8gSLfyxTcxa3tgvjgdrhhtiJuGiYTijZRfTvHb3XW7BAZUDw")) {
tabIDs[details.tabId] = {license_data: decodedString, license_request: [], license_url: details.url, req_id: details.requestId, mpd_url: tabIDs[details.tabId].mpd_url ?? ""};
} else {
return;
}
} catch (e) {
console.error(e);
}
}
}
}
chrome.webRequest.onBeforeRequest.addListener(
getLicenseRequestData,
{ urls: ["https://drmv4-ax.learnyst.com/drmlicense/widevine", "https://streaming-cdn.learnyst.com/*", "https://sessions.bugsnag.com/"], types: ["xmlhttprequest"] },
["requestBody"]
);
function getLicenseRequestHeaders(details) {
if (details.method == "POST" && tabIDs[details.tabId] && tabIDs[details.tabId].license_url === details.url && tabIDs[details.tabId].req_id === details.requestId) {
console.log(details.url);
tabIDs[details.tabId].license_request.push({license_headers: details.requestHeaders});
requestToClipboard(details.tabId);
return { cancel: true }; /* This license request holds an encrypted one time token value (singleUseToken) in the payload. Even though editing it works, the easiest way is to block it before it is sent to the server and to capture them! */
}
}
chrome.webRequest.onBeforeSendHeaders.addListener(
getLicenseRequestHeaders,
{ urls: ["https://drmv4-ax.learnyst.com/drmlicense/widevine"], types: ["xmlhttprequest"] },
["requestHeaders", "blocking"]
);

View File

@ -0,0 +1,7 @@
(function() {
var ses = `
window.localStorage.clear();`;
var script = document.createElement('script');
script.innerHTML = ses;
document.body.appendChild(script);
})();

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View File

@ -0,0 +1,11 @@
{
"background": {
"persistent": true,
"scripts": [ "background.js" ]
},
"manifest_version": 2,
"name": "Learnyst Capture",
"browser_action": {"default_icon": "icon128.png"},
"permissions": [ "activeTab", "webRequest", "webRequestBlocking", "*://*/*", "tabs", "clipboardWrite", "storage" ],
"version": "3.0"
}

View File

@ -0,0 +1,130 @@
const tabIDs = {};
const textDecoder = new TextDecoder();
function requestToClipboard(tabId) {
chrome.tabs.get(tabId, (details) => {
const lic_headers = tabIDs[details.id].license_request[0]?.license_headers;
const lic_url = tabIDs[details.id].license_url;
const lic_data_json = tabIDs[details.id].license_data;
const mpd_link = tabIDs[details.id].mpd_url;
if (!lic_headers)
return;
// Fetching the user's ip for setting the header X-Forwarded-For.
// This might help to bypass regional restrictions when performing the license request in some cases.
const ip_retrieve_link = "https://ipinfo.io/ip";
var get_ip = new XMLHttpRequest();
get_ip.open('GET', ip_retrieve_link, true);
get_ip.onload = function () {
var ip_resposnse = this.responseText;
console.log(ip_resposnse);
var i = 0;
let curl_license_data = "curl ";
curl_license_data += `'${lic_url}' \\`;
for (; i < lic_headers.length; ++i)
curl_license_data += `\n -H '${lic_headers[i].name.toLowerCase()}: ${lic_headers[i].value}' \\`;
curl_license_data += `\n -H 'x-forwarded-for: ${ip_resposnse}' \\`;
curl_license_data += "\n --data-raw ";
if (lic_data_json.includes("u0008")) {
curl_license_data += `${lic_data_json} \\`;
} else {
curl_license_data += `'${lic_data_json}' \\`; /* It is not the same as above line. Note the additional ' symbol at the start and end! */
}
curl_license_data += "\n --compressed";
// Generating the curl license text link for https://t.me/drm_downloader_robot
const license_gen_link = "https://drm-bot.herokuapp.com/gen.php";
var data = new FormData();
data.append('playlist', curl_license_data);
data.append('api', 'api');
var gen_link = new XMLHttpRequest();
gen_link.open('POST', license_gen_link, true);
gen_link.onload = function () {
var gen_link_resposnse = this.responseText;
let json_resp = JSON.parse(gen_link_resposnse);
console.log(json_resp);
let generated_license_link = json_resp.data;
const final = `${mpd_link}*${generated_license_link}`;
console.log(final);
const copyText = document.createElement("textarea");
copyText.style.position = "absolute";
copyText.style.left = "-5454px";
copyText.style.top = "-5454px";
copyText.style.opacity = 0;
document.body.appendChild(copyText);
copyText.value = final;
copyText.select();
document.execCommand("copy");
document.body.removeChild(copyText);
chrome.browserAction.setBadgeBackgroundColor({color: "#FF0000", tabId: details.id});
chrome.browserAction.setBadgeText({text: "📋", tabId: details.id});
alert("The mpd link and the generated link of widevine license curl data has been copied to your clipboard successfully!\n\nNow go to https://t.me/drm_downloader_robot and paste it and send it to the bot.");
}
gen_link.send(data);
}
get_ip.send();
});
}
function getLicenseRequestData(details) {
tabIDs[details.tabId] = tabIDs[details.tabId] || {};
if (details.url.includes(".mpd")) {
console.log(details.url);
tabIDs[details.tabId].mpd_url = details.url;
} else if (details.requestBody && details.requestBody.raw && details.method == "POST") {
for (var j = 0; j < details.requestBody.raw.length; ++j) {
try {
const decodedString = textDecoder.decode(details.requestBody.raw[j].bytes);
const encodedString = btoa(unescape(encodeURIComponent(decodedString)));
// If the license request does not uses json payloads the data has been sent in raw format.
// But the base64 encoded format of it will have the characters "CAES".
if (encodedString.includes("CAES")) {
tabIDs[details.tabId] = {license_data: `$'\\u0008\\u0004'`, license_request: [], license_url: details.url, req_id: details.requestId, mpd_url: tabIDs[details.tabId].mpd_url ?? ""};
// If the license request uses json payloads the charcters "CAES" will be there in almost all cases.
} else if (decodedString.includes("CAES") || details.url.includes("license") && decodedString.includes("token") && decodedString.length > 4000 || decodedString.includes("8, 1, 18")) {
tabIDs[details.tabId] = {license_data: decodedString, license_request: [], license_url: details.url, req_id: details.requestId, mpd_url: tabIDs[details.tabId].mpd_url ?? ""};
} else {
return;
}
} catch (e) {
console.error(e);
}
}
}
}
chrome.webRequest.onBeforeRequest.addListener(
getLicenseRequestData,
{ urls: ["<all_urls>"], types: ["xmlhttprequest"] },
["requestBody"]
);
function getLicenseRequestHeaders(details) {
if (details.method == "POST" && tabIDs[details.tabId] && tabIDs[details.tabId].license_url === details.url && tabIDs[details.tabId].req_id === details.requestId) {
console.log(details.url);
tabIDs[details.tabId].license_request.push({license_headers: details.requestHeaders});
requestToClipboard(details.tabId);
// Some license requests can hold one time token values in their headers or payload. So blocking such requests before they are sent to the server and capturing them!
// If your license request also holds one time values add them in the below line, seprating by an || operator. Remember to disable the extension if you actually need to play the video of these services!
if (details.url.includes("api2.hbogoasia.com/onwards-widevine") || details.requestHeaders.includes("prepladder.com") || details.url.includes("scvm1sc0.anycast.nagra.com")) {
return { cancel: true };
}
}
}
chrome.webRequest.onBeforeSendHeaders.addListener(
getLicenseRequestHeaders,
{ urls: ["<all_urls>"], types: ["xmlhttprequest"] },
["requestHeaders", "blocking", "extraHeaders"]
);

BIN
Mystry Capture/icon128.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

View File

@ -0,0 +1,11 @@
{
"background": {
"persistent": true,
"scripts": [ "background.js" ]
},
"manifest_version": 2,
"name": "Mystery Capture",
"browser_action": {"default_icon": "icon128.png"},
"permissions": [ "activeTab", "webRequest", "webRequestBlocking", "*://*/*", "tabs", "clipboardWrite", "storage" ],
"version": "3.0"
}

140
PSSH Capture/background.js Normal file
View File

@ -0,0 +1,140 @@
const tabIDs = {};
const textDecoder = new TextDecoder();
function requestToClipboard(tabId) {
chrome.tabs.get(tabId, (details) => {
const lic_headers = tabIDs[details.id].license_request[0]?.license_headers;
const lic_url = tabIDs[details.id].license_url;
const lic_data_json = tabIDs[details.id].license_data;
const widevine_pssh = tabIDs[details.id].pssh;
if (!lic_headers)
return;
// Fetching the user's ip for setting the header X-Forwarded-For.
// This might help to bypass regional restrictions when performing the license request in some cases.
const ip_retrieve_link = "https://ipinfo.io/ip";
var get_ip = new XMLHttpRequest();
get_ip.open('GET', ip_retrieve_link, true);
get_ip.onload = function () {
var ip_resposnse = this.responseText;
console.log(ip_resposnse);
var i = 0;
let curl_license_data = "curl ";
curl_license_data += `'${lic_url}' \\`;
for (; i < lic_headers.length; ++i)
curl_license_data += `\n -H '${lic_headers[i].name.toLowerCase()}: ${lic_headers[i].value}' \\`;
curl_license_data += `\n -H 'x-forwarded-for: ${ip_resposnse}' \\`;
curl_license_data += "\n --data-raw ";
if (lic_data_json.includes("u0008")) {
curl_license_data += `${lic_data_json} \\`;
} else {
curl_license_data += `'${lic_data_json}' \\`; /* It is not the same as above line. Note the additional ' symbol at the start and end! */
}
curl_license_data += "\n --compressed";
// Generating the curl license text link for https://t.me/drm_downloader_robot
const license_gen_link = "https://drm-bot.herokuapp.com/gen.php";
var data = new FormData();
data.append('playlist', curl_license_data);
data.append('api', 'api');
var gen_link = new XMLHttpRequest();
gen_link.open('POST', license_gen_link, true);
gen_link.onload = function () {
var gen_link_resposnse = this.responseText;
let json_resp = JSON.parse(gen_link_resposnse);
console.log(json_resp);
let generated_license_link = json_resp.data;
const final = `${widevine_pssh}^${generated_license_link}`;
console.log(final);
const copyText = document.createElement("textarea");
copyText.style.position = "absolute";
copyText.style.left = "-5454px";
copyText.style.top = "-5454px";
copyText.style.opacity = 0;
document.body.appendChild(copyText);
copyText.value = final;
copyText.select();
document.execCommand("copy");
document.body.removeChild(copyText);
chrome.browserAction.setBadgeBackgroundColor({color: "#FF0000", tabId: details.id});
chrome.browserAction.setBadgeText({text: "📋", tabId: details.id});
alert("The pssh and the generated link of widevine license curl data has been copied to your clipboard successfully!\n\nNow go to https://t.me/drm_downloader_robot and paste it and send it to the bot.");
}
gen_link.send(data);
}
get_ip.send();
});
}
function getLicenseRequestData(details) {
tabIDs[details.tabId] = tabIDs[details.tabId] || {};
if (details.requestBody && details.requestBody.raw && details.method == "POST") {
for (var j = 0; j < details.requestBody.raw.length; ++j) {
try {
const decodedString = textDecoder.decode(details.requestBody.raw[j].bytes);
const encodedString = btoa(unescape(encodeURIComponent(decodedString)));
// If the license request does not uses json payloads the data has been sent in raw format.
// But the base64 encoded format of it will have the characters "CAES".
if (encodedString.includes("CAES")) {
tabIDs[details.tabId].license_data = `$'\\u0008\\u0004'`;
tabIDs[details.tabId].license_url = details.url;
tabIDs[details.tabId].req_id = details.requestId;
// If the license request uses json payloads the charcters "CAES" will be there in almost all cases.
} else if (decodedString.includes("CAES") || details.url.includes("license") && decodedString.includes("token") && decodedString.length > 4000 || decodedString.includes("8, 1, 18")) {
tabIDs[details.tabId].license_data = decodedString;
tabIDs[details.tabId].license_url = details.url;
tabIDs[details.tabId].req_id = details.requestId;
} else {
return;
}
} catch (e) {
console.error(e);
}
}
}
}
chrome.webRequest.onBeforeRequest.addListener(
getLicenseRequestData,
{ urls: ["<all_urls>"], types: ["xmlhttprequest"] },
["requestBody"]
);
function getLicenseRequestHeaders(details) {
if (details.method == "POST" && tabIDs[details.tabId] && tabIDs[details.tabId].license_url === details.url && tabIDs[details.tabId].req_id === details.requestId) {
console.log(details.url);
tabIDs[details.tabId].license_request.push({license_headers: details.requestHeaders});
requestToClipboard(details.tabId);
// Some license requests can hold one time token values in their headers or payload. So blocking such requests before they are sent to the server and capturing them!
// If your license request also holds one time values add them in the below line, seprating by an || operator. Remember to disable the extension if you actually need to play the video of these services!
if (details.url.includes("api2.hbogoasia.com/onwards-widevine") || details.requestHeaders.includes("prepladder.com") || details.url.includes("scvm1sc0.anycast.nagra.com")) {
return { cancel: true };
}
}
}
chrome.webRequest.onBeforeSendHeaders.addListener(
getLicenseRequestHeaders,
{ urls: ["<all_urls>"], types: ["xmlhttprequest"] },
["requestHeaders", "blocking", "extraHeaders"]
);
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
if (!request || !sender.tab)
return;
tabIDs[sender.tab.id] = tabIDs[sender.tab.id] || {};
tabIDs[sender.tab.id] = {license_data: "", license_request: [], license_url: "", req_id: "", pssh: request};
console.log(`PSSH:- ${tabIDs[sender.tab.id].pssh}`);
});

View File

@ -0,0 +1,21 @@
(() => {
"use strict";
window.addEventListener("message", (event) => {
if (event.source != window)
return;
if (event.data.type && event.data.type === "38405bbb-36ef-454d-8b32-346f9564c978") {
if (event.data.log)
chrome.runtime.sendMessage(event.data.log);
}
}, false);
const script = document.createElement("script");
script.type = "text/javascript";
script.defer = false;
script.async = false;
script.src = chrome.extension.getURL("/eme-logger-mod.js");
(document.head || document.documentElement).appendChild(script);
script.remove();
})();

View File

@ -0,0 +1,25 @@
(async () => {
const b64 = {
decode: s => Uint8Array.from(atob(s), c => c.charCodeAt(0)),
encode: b => btoa(String.fromCharCode(...new Uint8Array(b)))
};
const fnproxy = (object, func) => new Proxy(object, { apply: func });
const proxy = (object, key, func) => Object.defineProperty(object, key, {
value: fnproxy(object[key], func)
});
proxy(MediaKeySession.prototype, 'generateRequest', async (_target, _this, _args) => {
const [initDataType, initData] = _args;
const pssh = b64.encode(initData);
console.groupCollapsed(
`PSSH: ${b64.encode(initData)}`
);
console.trace();
console.groupEnd();
if (pssh)
window.postMessage({ type: "38405bbb-36ef-454d-8b32-346f9564c978", log: pssh }, "*");
return _target.apply(_this, _args);
});
})();

BIN
PSSH Capture/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 KiB

BIN
PSSH Capture/icon128.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

View File

@ -0,0 +1,35 @@
{
"name": "PSSH Capture",
"version": "3.0",
"manifest_version": 2,
"background": {
"scripts": [
"background.js"
]
},
"content_scripts": [
{
"matches": [
"*://*/*"
],
"js": [
"content-script.js"
],
"all_frames": false,
"run_at": "document_start"
}
],
"browser_action": {"default_icon": "icon.png"},
"permissions": [
"*://*/*",
"clipboardWrite",
"tabs",
"webRequest",
"activeTab",
"storage",
"webRequestBlocking"
],
"web_accessible_resources": [
"eme-logger-mod.js"
]
}

124
Voot Capture/background.js Normal file
View File

@ -0,0 +1,124 @@
const tabIDs = {};
const textDecoder = new TextDecoder();
function requestToClipboard(tabId) {
chrome.tabs.get(tabId, (details) => {
const lic_headers = tabIDs[details.id].license_request[0]?.license_headers;
const lic_url = tabIDs[details.id].license_url;
const lic_data_json = tabIDs[details.id].license_data;
const mpd_link = tabIDs[details.id].mpd_url;
if (!lic_headers)
return;
// Fetching the user's ip for setting the header x-forwarded-for.
// This might help to bypass regional restrictions when performing the playback request in some cases.
const ip_retrieve_link = "https://ipinfo.io/ip";
var get_ip = new XMLHttpRequest();
get_ip.open('GET', ip_retrieve_link, true);
get_ip.onload = function () {
var ip_resposnse = this.responseText;
console.log(ip_resposnse);
var i = 0;
let curl_license_data = "curl ";
curl_license_data += `'${lic_url}' \\`;
for (; i < lic_headers.length; ++i)
curl_license_data += `\n -H '${lic_headers[i].name.toLowerCase()}: ${lic_headers[i].value}' \\`;
curl_license_data += `\n -H 'x-forwarded-for: ${ip_resposnse}' \\`;
curl_license_data += "\n --data-raw ";
if (lic_data_json.includes("u0008")) {
curl_license_data += `${lic_data_json} \\`;
} else {
curl_license_data += `'${lic_data_json}' \\`; /* It is not the same as above line. Note the additional ' symbol at the start and end! */
}
curl_license_data += "\n --compressed";
// Generating the curl license text link for https://t.me/drm_downloader_robot
const voot_gen_link = "https://drm-bot.herokuapp.com/voot.php";
var data = new FormData();
data.append('playlist', curl_license_data);
data.append('api', 'api');
var gen_link = new XMLHttpRequest();
gen_link.open('POST', voot_gen_link, true);
gen_link.onload = function () {
var gen_link_resposnse = this.responseText;
let json_resp = JSON.parse(gen_link_resposnse);
console.log(json_resp);
let generated_playback_link = json_resp.data;
const final = `${mpd_link}*${generated_playback_link}`;
console.log(final);
const copyText = document.createElement("textarea");
copyText.style.position = "absolute";
copyText.style.left = "-5454px";
copyText.style.top = "-5454px";
copyText.style.opacity = 0;
document.body.appendChild(copyText);
copyText.value = final;
copyText.select();
document.execCommand("copy");
document.body.removeChild(copyText);
chrome.browserAction.setBadgeBackgroundColor({color: "#FF0000", tabId: details.id});
chrome.browserAction.setBadgeText({text: "📋", tabId: details.id});
alert("The required voot link of widevine license curl data has been copied to your clipboard successfully!\n\nNow go to https://t.me/drm_downloader_robot and paste it and send it to the bot.");
}
gen_link.send(data);
}
get_ip.send();
});
}
function getLicenseRequestData(details) {
tabIDs[details.tabId] = tabIDs[details.tabId] || {};
if (details.url.includes(".mpd")) {
console.log(details.url);
tabIDs[details.tabId].mpd_url = details.url;
} else if (details.requestBody && details.requestBody.raw && details.method == "POST") {
for (var j = 0; j < details.requestBody.raw.length; ++j) {
try {
const decodedString = textDecoder.decode(details.requestBody.raw[j].bytes);
const encodedString = btoa(unescape(encodeURIComponent(decodedString)));
// If the license request does not uses json payloads the data has been sent in raw format.
// But the base64 encoded format of it will have the characters "CAES".
if (encodedString.includes("CAES")) {
tabIDs[details.tabId] = {license_data: `$'\\u0008\\u0004'`, license_request: [], license_url: details.url, req_id: details.requestId, mpd_url: tabIDs[details.tabId].mpd_url ?? ""};
// If the license request uses json payloads the charcters "CAES" will be there in almost all cases.
} else if (decodedString.includes("CAES") || details.url.includes("license") && decodedString.includes("token") && decodedString.length > 4000 || decodedString.includes("8, 1, 18")) {
tabIDs[details.tabId] = {license_data: decodedString, license_request: [], license_url: details.url, req_id: details.requestId, mpd_url: tabIDs[details.tabId].mpd_url ?? ""};
} else {
return;
}
} catch (e) {
console.error(e);
}
}
}
}
chrome.webRequest.onBeforeRequest.addListener(
getLicenseRequestData,
{ urls: ["https://prod.media.jio.com/wvproxy*", "https://jiostreamingdash.akamaized.net/*"], types: ["xmlhttprequest"] },
["requestBody"]
);
function getLicenseRequestHeaders(details) {
if (details.method == "POST" && tabIDs[details.tabId] && tabIDs[details.tabId].license_url === details.url && tabIDs[details.tabId].req_id === details.requestId) {
console.log(details.url);
tabIDs[details.tabId].license_request.push({license_headers: details.requestHeaders});
requestToClipboard(details.tabId);
}
}
chrome.webRequest.onSendHeaders.addListener(
getLicenseRequestHeaders,
{ urls: ["https://prod.media.jio.com/wvproxy*"], types: ["xmlhttprequest"] },
["requestHeaders"]
);

BIN
Voot Capture/icon128.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

View File

@ -0,0 +1,11 @@
{
"background": {
"persistent": true,
"scripts": [ "background.js" ]
},
"manifest_version": 2,
"name": "Voot Capture",
"browser_action": {"default_icon": "icon128.png"},
"permissions": [ "activeTab", "webRequest", "https://www.voot.com/*", "https://prod.media.jio.com/wvproxy*", "https://jiostreamingdash.akamaized.net/*", "https://drm-bot.herokuapp.com/", "tabs", "clipboardWrite", "storage" ],
"version": "3.0"
}

102
Zee5 Capture/background.js Normal file
View File

@ -0,0 +1,102 @@
const tabIDs = {};
const textDecoder = new TextDecoder();
function requestToClipboard(tabId) {
chrome.tabs.get(tabId, (details) => {
const req_headers = tabIDs[details.id].playback_request[0]?.playback_headers;
const req_url = tabIDs[details.id].playback_url;
const req_data_json = tabIDs[details.id].playback_data;
if (!req_headers)
return;
// Fetching the user's ip for setting the header x-forwarded-for.
// This might help to bypass regional restrictions when performing the playback request in some cases.
const ip_retrieve_link = "https://ipinfo.io/ip";
var get_ip = new XMLHttpRequest();
get_ip.open('GET', ip_retrieve_link, true);
get_ip.onload = function () {
var ip_resposnse = this.responseText;
console.log(ip_resposnse);
var i = 0;
let curl_playback_data = "curl ";
curl_playback_data += `'${req_url}' \\`;
for (; i < req_headers.length; ++i)
curl_playback_data += `\n -H '${req_headers[i].name.toLowerCase()}: ${req_headers[i].value}' \\`;
curl_playback_data += `\n -H 'x-forwarded-for: ${ip_resposnse}' \\`;
curl_playback_data += "\n --data-raw ";
curl_playback_data += `'${req_data_json}' \\`;
curl_playback_data += "\n --compressed";
// Generating the curl license text link for https://t.me/drm_downloader_robot
const zee5_gen_link = "https://drm-bot.herokuapp.com/zee5.php";
var data = new FormData();
data.append('playlist', curl_playback_data);
data.append('api', 'api');
var gen_link = new XMLHttpRequest();
gen_link.open('POST', zee5_gen_link, true);
gen_link.onload = function () {
var gen_link_resposnse = this.responseText;
let json_resp = JSON.parse(gen_link_resposnse);
console.log(json_resp);
let generated_playback_link = json_resp.data;
const final = `${generated_playback_link}`;
console.log(final);
const copyText = document.createElement("textarea");
copyText.style.position = "absolute";
copyText.style.left = "-5454px";
copyText.style.top = "-5454px";
copyText.style.opacity = 0;
document.body.appendChild(copyText);
copyText.value = final;
copyText.select();
document.execCommand("copy");
document.body.removeChild(copyText);
chrome.browserAction.setBadgeBackgroundColor({color: "#FF0000", tabId: details.id});
chrome.browserAction.setBadgeText({text: "📋", tabId: details.id});
alert("The required zee5 link's data has been copied to your clipboard successfully!\n\nNow go to https://t.me/drm_downloader_robot and paste it and send it to the bot.");
}
gen_link.send(data);
}
get_ip.send();
});
}
function getPlaybackRequestData(details) {
tabIDs[details.tabId] = tabIDs[details.tabId] || {};
if (details.requestBody && details.requestBody.raw && details.method == "POST") {
for (var j = 0; j < details.requestBody.raw.length; ++j) {
try {
const decodedString = textDecoder.decode(details.requestBody.raw[j].bytes);
tabIDs[details.tabId] = {playback_data: decodedString, playback_request: [], playback_url: details.url, req_id: details.requestId};
} catch (e) {
console.error(e);
}
}
}
}
chrome.webRequest.onBeforeRequest.addListener(
getPlaybackRequestData,
{ urls: ["https://spapi.zee5.com/singlePlayback/getDetails/*"], types: ["xmlhttprequest"] },
["requestBody"]
);
function getPlaybackRequestHeaders(details) {
if (details.method == "POST" && tabIDs[details.tabId] && tabIDs[details.tabId].playback_url === details.url && tabIDs[details.tabId].req_id === details.requestId) {
console.log(details.url);
tabIDs[details.tabId].playback_request.push({playback_headers: details.requestHeaders});
requestToClipboard(details.tabId);
}
}
chrome.webRequest.onSendHeaders.addListener(
getPlaybackRequestHeaders,
{ urls: ["https://spapi.zee5.com/singlePlayback/getDetails/*"], types: ["xmlhttprequest"] },
["requestHeaders"]
);

BIN
Zee5 Capture/icon128.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@ -0,0 +1,11 @@
{
"background": {
"persistent": true,
"scripts": [ "background.js" ]
},
"manifest_version": 2,
"name": "Zee5 Capture",
"browser_action": {"default_icon": "icon128.png"},
"permissions": [ "activeTab", "webRequest", "https://www.zee5.com/", "https://spapi.zee5.com/singlePlayback/getDetails/*", "https://drm-bot.herokuapp.com/", "tabs", "clipboardWrite", "storage" ],
"version": "3.0"
}