Kiwi Extensions!

This commit is contained in:
XMYSTERlOUSX 2022-10-05 07:27:06 +05:30
parent f7d24b273b
commit 38c699ae14
38 changed files with 0 additions and 1310 deletions

BIN
Aha Capture.zip Normal file

Binary file not shown.

View File

@ -1,128 +0,0 @@
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});
console.log("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};
}
});

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

View File

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

BIN
Altbalaji Capture.zip Normal file

Binary file not shown.

View File

@ -1,130 +0,0 @@
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});
console.log("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.

Before

Width:  |  Height:  |  Size: 7.9 KiB

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 21 KiB

View File

@ -1,60 +0,0 @@
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});
console.log("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

@ -1,21 +0,0 @@
(() => {
"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

@ -1,30 +0,0 @@
(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);
});
})();

View File

@ -1,34 +0,0 @@
{
"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"
]
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

@ -1,124 +0,0 @@
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});
console.log("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"]
);

View File

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

BIN
Learnyst Capture.zip Normal file

Binary file not shown.

View File

@ -1,122 +0,0 @@
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});
console.log("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

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

View File

@ -1,11 +0,0 @@
{
"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"
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 8.5 KiB

View File

@ -1,130 +0,0 @@
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});
console.log("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"]
);

View File

@ -1,11 +0,0 @@
{
"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"
}

BIN
PSSH Capture.zip Normal file

Binary file not shown.

View File

@ -1,140 +0,0 @@
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});
console.log("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

@ -1,21 +0,0 @@
(() => {
"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

@ -1,25 +0,0 @@
(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);
});
})();

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.3 KiB

View File

@ -1,35 +0,0 @@
{
"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"
]
}

BIN
Voot Capture.zip Normal file

Binary file not shown.

View File

@ -1,124 +0,0 @@
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});
console.log("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"]
);

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View File

@ -1,102 +0,0 @@
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});
console.log("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"]
);

View File

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