From 4a000459ab1ca419b0c3f839c414929a39d81913 Mon Sep 17 00:00:00 2001 From: gorhill Date: Wed, 23 Dec 2015 07:23:09 -0500 Subject: [PATCH] redirect-resources.txt to be used for more than just redirection --- assets/checksums.txt | 3 +- assets/ublock/resources.txt | 237 ++++++++++++++++++++++++++++++++++ src/js/contentscript-start.js | 2 +- src/js/storage.js | 4 +- 4 files changed, 242 insertions(+), 4 deletions(-) create mode 100644 assets/ublock/resources.txt diff --git a/assets/checksums.txt b/assets/checksums.txt index e056c4313..94f4daeaa 100644 --- a/assets/checksums.txt +++ b/assets/checksums.txt @@ -4,7 +4,8 @@ 9bcc718383fec8b2ce0f9c379f45da9a assets/ublock/filters.txt 146704ad1c0393e342afdb416762c183 assets/ublock/badware.txt 5baa90e2da7cd6a73edff2010557ee57 assets/ublock/redirect.txt -045bc19b802a2bed6cd31ac83524b1d6 assets/ublock/experimental.txt +b5e3ffc73ffce5c671b1eb9edd466241 assets/ublock/experimental.txt +62111a29f0a5cb361ba8dbae92054adb assets/ublock/resources.txt 6c9d89c5dc6db345de36c8c966fff575 assets/ublock/filter-lists.json 50573388b525ede1a920cd4b4ee7fbf0 assets/thirdparties/easylist-downloads.adblockplus.org/easyprivacy.txt 61cc16cf02e034370f0f47bc17c46551 assets/thirdparties/easylist-downloads.adblockplus.org/easylist.txt diff --git a/assets/ublock/resources.txt b/assets/ublock/resources.txt new file mode 100644 index 000000000..93a5b3cf0 --- /dev/null +++ b/assets/ublock/resources.txt @@ -0,0 +1,237 @@ +# Resources to be used as redirect destinations. +# +# - Each distinct resource entry is separated by an empty line. +# - The first line in a resource entry is: token mime-type[;encoding] +# - All following lines are the data. An empty line signals the end of the +# data. +# +# If the encoding is absent, the data will be converted to base64, and the +# encoding will be set to `;base64`. + + +# http://probablyprogramming.com/2009/03/15/the-tiniest-gif-ever +1x1-transparent.gif image/gif;base64 +R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw== + + +2x2-transparent.png image/png;base64 +iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAC0lEQVQI12NgQAcAABIAAe+JVKQAAAAASUVORK5CYII= + + +# Obsolete: to be removed -- need to stick to sensible resource names +handtinytrans.gif image/gif;base64 +R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw== + + +noopcss text/css + + +noopjs application/javascript +(function() { + ; +})(); + + +noopframe text/html + + + + + + + +hd-main.js application/javascript +var L = (function(){ + var l = {}; + var noopfn = function() { + ; + }; + var props = ["pf", "ed", "Qe", "fd", "xh", "Uc", "ef", "zd", "Ad", "Qc", "Ri", "Wc", "Vc", "Xc", "Wg", "rd", "qd", "sd", "Pe", "Id", "Hd", "Jd", "fg", "Fd", "Ed", "Gd", "ek", "Cd", "Bd", "Dd", "Nj", "Sc", "Rc", "Tc", "wg", "xd", "wd", "yd", "fh", "ld", "md", "nd", "Re", "cd", "Pc", "ke", "Yc", "Xg", "jd", "kd", "oh", "ad", "bd", "mi", "gd", "hd", "ae", "dd", "fk", "ij", "ud", "td", "vd", "ig", "od", "pd", "Yd", "$j", "Oc", "bf"]; + for (var i = 0; i < props.length; i++) { + l[props[i]] = noopfn; + } + return l; +})(); + + +fuckadblock.js-3.2.0 application/javascript +(function() { + var noopfn = function() { + ; + }; + // + var Fab = function() {}; + Fab.prototype.check = noopfn; + Fab.prototype.clearEvent = noopfn; + Fab.prototype.emitEvent = noopfn; + Fab.prototype.on = function(a, b) { + if ( !a ) { b(); } + }; + Fab.prototype.onDetected = function() { + return this; + }; + Fab.prototype.onNotDetected = function(a) { + a(); + return this; + }; + Fab.prototype.setOption = noopfn; + window.FuckAdBlock = Fab; + // + window.fuckAdBlock = new Fab(); +})(); + + +antiAdBlock.js application/javascript +(function() { + window.antiAdBlock = { + onDetected: function() { + ; + }, + onNotDetected: function(a) { + a(); + } + }; +})(); + + +# To neutralize GA scripts. The goal is to provide the minimal API +# expected by clients of these scripts so that the end users are able +# to wholly block GA while minimizing risks of page breakage. +# Test cases (need way more): +# - https://github.com/chrisaljoudi/uBlock/issues/119 + +www.google-analytics.com/ga.js application/javascript +(function() { + var noopfn = function() { + ; + }; + // + var Gaq = function() { + ; + }; + Gaq.prototype.Na = noopfn; + Gaq.prototype.O = noopfn; + Gaq.prototype.Sa = noopfn; + Gaq.prototype.Ta = noopfn; + Gaq.prototype.Va = noopfn; + Gaq.prototype._createAsyncTracker = noopfn; + Gaq.prototype._getAsyncTracker = noopfn; + Gaq.prototype._getPlugin = noopfn; + Gaq.prototype.push = function(a) { + if ( typeof a === 'function' ) { + a(); + } + }; + // + var tracker = function() {}; + tracker._getLinkerUrl = function(a) { + return a; + }; + // + var tracker = { + _initData: noopfn, + _trackPageview: noopfn + }; + // + var Gat = function() { + ; + }; + Gat.prototype._anonymizeIP = noopfn; + Gat.prototype._createTracker = noopfn; + Gat.prototype._forceSSL = noopfn; + Gat.prototype._getPlugin = noopfn; + Gat.prototype._getTracker = function() { + return tracker; + }; + Gat.prototype._getTrackerByName = function() { + return tracker; + }; + Gat.prototype._getTrackers = noopfn; + Gat.prototype.aa = noopfn; + Gat.prototype.ab = noopfn; + Gat.prototype.hb = noopfn; + Gat.prototype.la = noopfn; + Gat.prototype.oa = noopfn; + Gat.prototype.pa = noopfn; + Gat.prototype.u = noopfn; + var gat = new Gat(); + window._gat = gat; + // + var gaq = new Gaq(); + (function() { + var aa = window._gaq || []; + if ( Array.isArray(aa) ) { + while ( aa[0] ) { + gaq.push(aa.shift()); + } + } + })(); + window._gaq = gaq.qf = gaq; +})(); + + +# Ubiquitous googletagservices.com: not blocked by EasyPrivacy. +# "Tags are tiny bits of website code that let you measure traffic and +# "visitor behavior" +googletagservices.com/gpt.js application/javascript +(function() { + var noopfn = function() { + ; + }; + // + var gpt = window.googletag || {}; + gpt._vars_ = gpt._vars_ || {}; + gpt.cmd = gpt.cmd || []; + gpt.getVersion = gpt.getVersion || noopfn; + // + window.googletag = gpt; +})(); + + +# https://forums.lanik.us/viewtopic.php?f=91&t=27188 +i.ligatus.com/*/angular-tag.js application/javascript +(function() { + self.adProtect = true; +})(); + + +# Yavli ads. These are blocked using an inline script tag filter, but this +# works only on Firefox. So we side-load the following script using whatever +# script is normally blocked on the site. +yavli-defuser.js application/javascript +(function() { + try { + Object.defineProperty(window, '__durl', { + set: function() { + ; + }, + get: function() { + return ''; + } + }); + Object.defineProperty(window, '__lsurl', { + set: function() { + ; + }, + get: function() { + return ''; + } + }); + Object.defineProperty(window, '__lturl', { + set: function() { + ; + }, + get: function() { + return ''; + } + }); + } catch (ex) { + } +})(); + + +# Addefend defuser +uabinject-defuser.js application/javascript +(function() { + window.uabpdl = window.uabInject = window.uabDetect = true; +})(); diff --git a/src/js/contentscript-start.js b/src/js/contentscript-start.js index 4e9ef27c8..e99233305 100644 --- a/src/js/contentscript-start.js +++ b/src/js/contentscript-start.js @@ -139,7 +139,7 @@ var netFilters = function(details) { // redirection resources: Sometimes it is useful to use these resources as // standalone scriptlets. // Library of redirection resources: -// https://github.com/gorhill/uBlock/blob/master/assets/ublock/redirect-resources.txt +// https://github.com/gorhill/uBlock/blob/master/assets/ublock/resources.txt var injectScripts = function(dataURIs) { var parent = document.head || document.documentElement; diff --git a/src/js/storage.js b/src/js/storage.js index 5bd1b01cd..d55889d00 100644 --- a/src/js/storage.js +++ b/src/js/storage.js @@ -669,7 +669,7 @@ callback(); }; - this.assets.get('assets/ublock/redirect-resources.txt', onResourcesLoaded); + this.assets.get('assets/ublock/resources.txt', onResourcesLoaded); }; /******************************************************************************/ @@ -854,7 +854,7 @@ assets[location] = true; } assets[µb.pslPath] = true; - assets['assets/ublock/redirect-resources.txt'] = true; + assets['assets/ublock/resources.txt'] = true; callback(assets); };