// ==UserScript==
// @name AdsBypasser
// @namespace AdsBypasser
// @description Bypass Ads
// @copyright 2012+, Wei-Cheng Pan (legnaleurc)
// @version 5.73.0
// @license BSD
// @homepageURL https://adsbypasser.github.io/
// @supportURL https://github.com/adsbypasser/adsbypasser/issues
// @icon https://raw.githubusercontent.com/adsbypasser/adsbypasser/v5.73.0/img/logo.png
// @grant unsafeWindow
// @grant GM_xmlhttpRequest
// @grant GM_addStyle
// @grant GM_getResourceText
// @grant GM_getResourceURL
// @grant GM_getValue
// @grant GM_openInTab
// @grant GM_registerMenuCommand
// @grant GM_setValue
// @run-at document-start
// @resource alignCenter https://raw.githubusercontent.com/adsbypasser/adsbypasser/v5.73.0/css/align_center.css
// @resource scaleImage https://raw.githubusercontent.com/adsbypasser/adsbypasser/v5.73.0/css/scale_image.css
// @resource bgImage https://raw.githubusercontent.com/adsbypasser/adsbypasser/v5.73.0/img/imagedoc-darknoise.png
// @include http://*
// @include https://*
// @connect *
// @downloadURL https://update.greasyfork.icu/scripts/4881/AdsBypasser.user.js
// @updateURL https://update.greasyfork.icu/scripts/4881/AdsBypasser.meta.js
// ==/UserScript==
(function (context, factory) {
if (typeof module === 'object' && typeof module.exports === 'object') {
module.exports = factory(context, Promise);
} else {
var P = null;
if (context.unsafeWindow.Future) {
P = function (fn) {
return context.unsafeWindow.Future.call(this, function (fr) {
fn(fr.resolve.bind(fr), fr.reject.bind(fr));
});
};
} else if (context.PromiseResolver) {
P = function (fn) {
return new context.Promise(function (pr) {
fn(pr.resolve.bind(pr), pr.reject.bind(pr));
});
};
} else if (typeof context.Promise === 'function') {
P = context.Promise;
} else {
P = this.Promise;
}
factory(context, P);
}
}(this, function (context, Promise) {
'use strict';
var _ = context._ = {};
function setupStack () {
if (Error.captureStackTrace) {
Error.captureStackTrace(this, this.constructor);
} else if (!this.hasOwnProperty('stack')) {
var stack = (new Error()).stack.split('\n').slice(2);
var e = stack[0].match(/^.*@(.*):(\d*)$/);
this.fileName = e[1];
this.lineNumber = parseInt(e[2], 10);
this.stack = stack.join('\n');
}
}
function AdsBypasserError (message) {
setupStack.call(this);
this.message = message;
}
AdsBypasserError.prototype = Object.create(Error.prototype);
AdsBypasserError.prototype.constructor = AdsBypasserError;
AdsBypasserError.prototype.name = 'AdsBypasserError';
AdsBypasserError.extend = function (protoProps, staticProps) {
var parent = this, child = function () {
setupStack.call(this);
protoProps.constructor.apply(this, arguments);
};
extend(child, parent, staticProps);
child.prototype = Object.create(parent.prototype);
extend(child.prototype, protoProps);
child.prototype.constructor = child;
child.super = parent.prototype;
return child;
};
AdsBypasserError.super = null;
_.AdsBypasserError = AdsBypasserError;
function any (c, fn) {
if (c.some) {
return c.some(fn);
}
if (typeof c.length === 'number') {
return Array.prototype.some.call(c, fn);
}
return Object.keys(c).some(function (k) {
return fn(c[k], k, c);
});
}
function all (c, fn) {
if (c.every) {
return c.every(fn);
}
if (typeof c.length === 'number') {
return Array.prototype.every.call(c, fn);
}
return Object.keys(c).every(function (k) {
return fn(c[k], k, c);
});
}
function each (c, fn) {
if (c.forEach) {
c.forEach(fn);
} else if (typeof c.length === 'number') {
Array.prototype.forEach.call(c, fn);
} else {
Object.keys(c).forEach(function (k) {
fn(c[k], k, c);
});
}
}
function map (c, fn) {
if (c.map) {
return c.map(fn);
}
if (typeof c.length === 'number') {
return Array.prototype.map.call(c, fn);
}
return Object.keys(c).map(function (k) {
return fn(c[k], k, c);
});
}
function extend(c) {
Array.prototype.slice.call(arguments, 1).forEach(function (source) {
if (!source) {
return;
}
_.C(source).each(function (v, k) {
c[k] = v;
});
});
return c;
}
function CollectionProxy (collection) {
this._c = collection;
}
CollectionProxy.prototype.size = function () {
if (typeof this._c.length === 'number') {
return this._c.length;
}
return Object.keys(c).length;
};
CollectionProxy.prototype.at = function (k) {
return this._c[k];
};
CollectionProxy.prototype.each = function (fn) {
each(this._c, fn);
return this;
};
CollectionProxy.prototype.find = function (fn) {
var result;
any(this._c, function (value, index, self) {
var tmp = fn(value, index, self);
if (tmp !== _.none) {
result = {
key: index,
value: value,
payload: tmp,
};
return true;
}
return false;
});
return result;
};
CollectionProxy.prototype.all = function (fn) {
return all(this._c, fn);
};
CollectionProxy.prototype.map = function (fn) {
return map(this._c, fn);
};
_.C = function (collection) {
return new CollectionProxy(collection);
};
_.T = function (s) {
if (typeof s === 'string') {
} else if (s instanceof String) {
s = s.toString();
} else {
throw new AdsBypasserError('template must be a string');
}
var T = {
'{{': '{',
'}}': '}',
};
return function () {
var args = Array.prototype.slice.call(arguments);
var kwargs = args[args.length-1];
return s.replace(/\{\{|\}\}|\{([^\}]+)\}/g, function (m, key) {
if (T.hasOwnProperty(m)) {
return T[m];
}
if (args.hasOwnProperty(key)) {
return args[key];
}
if (kwargs.hasOwnProperty(key)) {
return kwargs[key];
}
return m;
});
};
};
_.P = function (fn) {
if (typeof fn !== 'function') {
throw new _.AdsBypasserError('must give a function');
}
var slice = Array.prototype.slice;
var args = slice.call(arguments, 1);
return function () {
return fn.apply(this, args.concat(slice.call(arguments)));
};
};
_.D = function (fn) {
return new Promise(fn);
};
_.parseJSON = function (json) {
try {
return JSON.parse(json);
} catch (e) {
_.warn(e, json);
}
return _.none;
};
_.isString = function (value) {
return (typeof value === 'string') || (value instanceof String);
};
_.nop = function () {
};
_.none = _.nop;
_.wait = function (msDelay) {
return _.D(function (resolve, reject) {
setTimeout(resolve, msDelay);
});
};
_.try = function (msInterval, fn) {
return _.D(function (resolve, reject) {
var handle = setInterval(function () {
var result = fn();
if (result !== _.none) {
clearInterval(handle);
resolve(result);
}
}, msInterval);
});
};
function log (method, args) {
if (_._quiet) {
return;
}
args = Array.prototype.slice.call(args);
if (_.isString(args[0])) {
args[0] = 'AdsBypasser: ' + args[0];
} else {
args.unshift('AdsBypasser:');
}
var f = console[method];
if (typeof f === 'function') {
f.apply(console, args);
}
}
_._quiet = false;
_.info = function () {
log('info', arguments);
};
_.warn = function () {
log('warn', arguments);
};
return _;
}));
(function (context, factory) {
if (typeof module === 'object' && typeof module.exports === 'object') {
module.exports = function (context) {
var core = require('./core.js');
return factory(context, core);
};
} else {
context.$ = factory(context, context._);
}
}(this, function (context, _) {
'use strict';
var window = context.window;
var document = window.document;
var DomNotFoundError = _.AdsBypasserError.extend({
name: 'DomNotFoundError',
constructor: function (selector) {
DomNotFoundError.super.constructor.call(this, _.T('`{0}` not found')(selector));
},
});
var $ = function (selector, context) {
if (!context || !context.querySelector) {
context = document;
}
var n = context.querySelector(selector);
if (!n) {
throw new DomNotFoundError(selector);
}
return n;
};
$.$ = function (selector, context) {
try {
return $(selector, context);
} catch (e) {
return null;
}
};
$.$$ = function (selector, context) {
if (!context || !context.querySelectorAll) {
context = document;
}
var ns = context.querySelectorAll(selector);
return _.C(ns);
};
$.toDOM = function(rawHTML) {
try {
var parser = new DOMParser();
var DOMHTML = parser.parseFromString(rawHTML, "text/html");
return DOMHTML;
} catch (e) {
throw new _.AdsBypasserError('could not parse HTML to DOM');
}
};
$.removeNodes = function (selector, context) {
$.$$(selector, context).each(function (e) {
e.parentNode.removeChild(e);
});
};
function searchScriptsByRegExp (pattern, context) {
var m = $.$$('script', context).find(function (s) {
var m = s.innerHTML.match(pattern);
if (!m) {
return _.none;
}
return m;
});
if (!m) {
return null;
}
return m.payload;
}
function searchScriptsByString (pattern, context) {
var m = $.$$('script', context).find(function (s) {
var m = s.innerHTML.indexOf(pattern);
if (m < 0) {
return _.none;
}
return m;
});
if (!m) {
return null;
}
return m.value.innerHTML;
}
$.searchScripts = function (pattern, context) {
if (pattern instanceof RegExp) {
return searchScriptsByRegExp(pattern, context);
} else if (_.isString(pattern)) {
return searchScriptsByString(pattern, context);
} else {
return null;
}
};
return $;
}));
(function (context, factory) {
if (typeof module === 'object' && typeof module.exports === 'object') {
module.exports = function (context, GM) {
var core = require('./core.js');
return factory(context, GM, core);
};
} else {
factory(context, {
xmlhttpRequest: GM_xmlhttpRequest,
}, context._);
}
}(this, function (context, GM, _) {
'use strict';
var window = context.window;
var document = window.document;
var $ = context.$ || {};
function deepJoin (prefix, object) {
return _.C(object).map(function (v, k) {
var key = _.T('{0}[{1}]')(prefix, k);
if (typeof v === 'object') {
return deepJoin(key, v);
}
return _.T('{0}={1}').apply(this, [key, v].map(encodeURIComponent));
}).join('&');
}
function toQuery (data) {
var type = typeof data;
if (data === null || (type !== 'string' && type !== 'object')) {
return '';
}
if (type === 'string') {
return data;
}
if (data instanceof String) {
return data.toString();
}
return _.C(data).map(function (v, k) {
if (typeof v === 'object') {
return deepJoin(k, v);
}
return _.T('{0}={1}').apply(this, [k, v].map(encodeURIComponent));
}).join('&');
}
function ajax (method, url, data, headers) {
var l = document.createElement('a');
l.href = url;
var reqHost = l.hostname;
var overrideHeaders = {
Host: reqHost || window.location.host,
Origin: window.location.origin,
Referer: window.location.href,
'X-Requested-With': 'XMLHttpRequest',
};
_.C(overrideHeaders).each(function (v, k, c) {
if (headers[k] === _.none) {
delete headers[k];
} else {
headers[k] = v;
}
});
if (data) {
if (headers['Content-Type'].indexOf('json') >= 0) {
data = JSON.stringify(data);
} else {
data = toQuery(data);
}
headers['Content-Length'] = data.length;
}
var xhr = null;
var promise = _.D(function (resolve, reject) {
xhr = GM.xmlhttpRequest({
method: method,
url: url,
data: data,
headers: headers,
onload: function (response) {
response = (typeof response.responseText !== 'undefined') ? response : this;
if (response.status !== 200) {
reject(response.responseText);
} else {
resolve(response.responseText);
}
},
onerror: function (response) {
response = (typeof response.responseText !== 'undefined') ? response : this;
reject(response.responseText);
},
});
});
promise.abort = function () {
xhr.abort();
};
return promise;
}
$.get = function (url, data, headers) {
data = toQuery(data);
data = data ? '?' + data : '';
headers = headers || {};
return ajax('GET', url + data, '', headers);
};
$.post = function (url, data, headers) {
var h = {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
};
if (headers) {
_.C(headers).each(function (v, k) {
h[k] = v;
});
}
return ajax('POST', url, data, h);
};
return $;
}));
(function (context, factory) {
if (typeof module === 'object' && typeof module.exports === 'object') {
module.exports = function (context) {
var core = require('./core.js');
return factory(context, core);
};
} else {
factory(context, context._);
}
}(this, function (context, _) {
'use strict';
var window = context.window;
var document = window.document;
var $ = context.$ || {};
$.setCookie = function (key, value) {
var now = new Date();
now.setTime(now.getTime() + 3600 * 1000);
var tpl = _.T('{0}={1};path={2};');
document.cookie = tpl(key, value, window.location.pathname, now.toUTCString());
};
$.getCookie = function (key) {
var c = _.C(document.cookie.split(';')).find(function (v) {
var k = v.replace(/^\s*([a-zA-Z0-9-_]+)=.+$/, '$1');
if (k !== key) {
return _.none;
}
});
if (!c) {
return null;
}
c = c.value.replace(/^\s*[a-zA-Z0-9-_]+=([^;]+).?$/, '$1');
if (!c) {
return null;
}
return c;
};
$.resetCookies = function () {
var a = document.domain;
var b = document.domain.replace(/^www\./, '');
var c = document.domain.replace(/^(\w+\.)+?(\w+\.\w+)$/, '$2');
var d = (new Date(1e3)).toUTCString();
_.C(document.cookie.split(';')).each(function (v) {
var k = v.replace(/^\s*(\w+)=.+$/, '$1');
document.cookie = _.T('{0}=;expires={1};')(k, d);
document.cookie = _.T('{0}=;path=/;expires={1};')(k, d);
var e = _.T('{0}=;path=/;domain={1};expires={2};');
document.cookie = e(k, a, d);
document.cookie = e(k, b, d);
document.cookie = e(k, c, d);
});
};
return $;
}));
(function (context, factory) {
if (typeof module === 'object' && typeof module.exports === 'object') {
module.exports = function (context) {
var core = require('./core.js');
return factory(context, core);
};
} else {
factory(context, context._);
}
}(this, function (context, _) {
'use strict';
var window = context.window;
var document = window.document;
var $ = context.$ || {};
var patterns = [];
$.register = function (pattern) {
patterns.push(pattern);
};
function dispatchByObject (rule, url_6) {
var matched = {};
var passed = _.C(rule).all(function (pattern, part) {
if (pattern instanceof RegExp) {
matched[part] = url_6[part].match(pattern);
} else if (pattern instanceof Array) {
var r = _.C(pattern).find(function (p) {
var m = url_6[part].match(p);
return m || _.none;
});
matched[part] = r ? r.payload : null;
}
return !!matched[part];
});
return passed ? matched : null;
}
function dispatchByRegExp (rule, url_1) {
return url_1.match(rule);
}
function dispatchByArray (rules, url_1, url_3, url_6) {
var tmp = _.C(rules).find(function (rule) {
var m = dispatch(rule, url_1, url_3, url_6);
if (!m) {
return _.none;
}
return m;
});
return tmp ? tmp.payload : null;
}
function dispatchByString (rule, url_3) {
var scheme = /\*|https?|file|ftp|chrome-extension/;
var host = /\*|(\*\.)?([^\/*]+)/;
var path = /\/.*/;
var up = new RegExp(_.T('^({scheme})://({host})?({path})$')({
scheme: scheme.source,
host: host.source,
path: path.source,
}));
var matched = rule.match(up);
if (!matched) {
return null;
}
scheme = matched[1];
host = matched[2];
var wc = matched[3];
var sd = matched[4];
path = matched[5];
if (scheme === '*' && !/https?/.test(url_3.scheme)) {
return null;
} else if (scheme !== url_3.scheme) {
return null;
}
if (scheme !== 'file' && host !== '*') {
if (wc) {
up = url_3.host.indexOf(sd);
if (up < 0 || up + sd.length !== url_3.host.length) {
return null;
}
} else if (host !== url_3.host) {
return null;
}
}
path = new RegExp(_.T('^{0}$')(path.replace(/[*.\[\]?+#]/g, function (c) {
if (c === '*') {
return '.*';
}
return '\\' + c;
})));
if (!path.test(url_3.path)) {
return null;
}
return url_3;
}
function dispatchByFunction (rule, url_1, url_3, url_6) {
return rule(url_1, url_3, url_6);
}
function dispatch (rule, url_1, url_3, url_6) {
if (rule instanceof Array) {
return dispatchByArray(rule, url_1, url_3, url_6);
}
if (typeof rule === 'function') {
return dispatchByFunction(rule, url_1, url_3, url_6);
}
if (rule instanceof RegExp) {
return dispatchByRegExp(rule, url_1);
}
if (_.isString(rule)) {
return dispatchByString(rule, url_3);
}
return dispatchByObject(rule, url_6);
}
$._findHandler = function () {
var url_1 = window.location.toString();
var url_3 = {
scheme: window.location.protocol.slice(0, -1),
host: window.location.host,
path: window.location.pathname + window.location.search + window.location.hash,
};
var url_6 = {
scheme: window.location.protocol,
host: window.location.hostname,
port: window.location.port,
path: window.location.pathname,
query: window.location.search,
hash: window.location.hash,
};
var pattern = _.C(patterns).find(function (pattern) {
var m = dispatch(pattern.rule, url_1, url_3, url_6);
if (!m) {
return _.none;
}
return m;
});
if (!pattern) {
return null;
}
var matched = pattern.payload;
pattern = pattern.value;
if (!pattern.start && !pattern.ready) {
return null;
}
return {
start: pattern.start ? _.P(pattern.start, matched) : _.nop,
ready: pattern.ready ? _.P(pattern.ready, matched) : _.nop,
};
};
return $;
}));
(function (context, factory) {
if (typeof module === 'object' && typeof module.exports === 'object') {
module.exports = function (context) {
var core = require('./core.js');
return factory(context, core);
};
} else {
factory(context, context._);
}
}(this, function (context, _) {
'use strict';
var window = context.window;
var document = window.document;
var $ = context.$ || {};
function prepare (e) {
if (!document.body) {
document.body = document.createElement('body');
}
document.body.appendChild(e);
return _.wait(0);
}
function get (url) {
var a = document.createElement('a');
a.href = url;
var clicked = false;
a.addEventListener('click', function (event) {
event.stopPropagation();
clicked = true;
});
prepare(a).then(() => {
a.click();
var tick = setInterval(function () {
if (clicked) {
_.info('already clicked');
clearInterval(tick);
return;
}
_.info('try again');
a.click();
}, 50);
});
}
function post (path, params) {
params = params || {};
var form = document.createElement('form');
form.method = 'post';
form.action = path;
_.C(params).each(function (value, key) {
var input = document.createElement('input');
input.type = 'hidden';
input.name = key;
input.value = value;
form.appendChild(input);
});
prepare(form);
form.submit();
}
$.openLink = function (to, options) {
if (!_.isString(to) && !to) {
_.warn('false URL');
return;
}
options = options || {};
var withReferer = typeof options.referer === 'undefined' ? true : options.referer;
var postData = options.post;
var from = window.location.toString();
_.info(_.T('{0} -> {1}')(from, to));
if (postData) {
post(to, postData);
return;
}
if (withReferer) {
get(to);
return;
}
window.top.location.replace(to);
};
return $;
}));
(function (context, factory) {
if (typeof module === 'object' && typeof module.exports === 'object') {
module.exports = function (context) {
var core = require('./core.js');
var ajax = require('./ajax.js');
var $ = ajax(context);
return factory(context, core, $);
};
} else {
factory(context, context._, context.$);
}
}(this, function (context, _, $) {
'use strict';
var window = context.window;
var unsafeWindow = context.unsafeWindow || (0, eval)('this').window;
var document = window.document;
$.removeAllTimer = function () {
var handle = window.setInterval(_.nop, 10);
while (handle > 0) {
window.clearInterval(handle--);
}
handle = window.setTimeout(_.nop, 10);
while (handle > 0) {
window.clearTimeout(handle--);
}
};
$.nuke = function (url) {
try {
$.window.document.write('nuked by AdsBypasser, leading to ...
');
} catch (e) {
_.warn('nuke failed', e);
}
var a = document.createElement('a');
a.href = url;
a.textContent = url;
document.body.appendChild(a);
};
$.generateRandomIP = function () {
return [0,0,0,0].map(function () {
return Math.floor(Math.random() * 256);
}).join('.');
};
$.captcha = function (imgSrc, cb) {
if (!$.config.externalServerSupport) {
return;
}
var a = document.createElement('canvas');
var b = a.getContext('2d');
var c = new Image();
c.src = imgSrc;
c.onload = function () {
a.width = c.width;
a.height = c.height;
b.drawImage(c, 0, 0);
var d = a.toDataURL();
var e = d.substr(d.indexOf(',') + 1);
$.post('http://www.wcpan.info/cgi-bin/captcha.cgi', {
i: e,
}, cb);
};
};
function clone (safe) {
if (safe === null || !(safe instanceof Object)) {
return safe;
}
if (safe === unsafeWindow) {
return safe;
}
if (safe instanceof String) {
return safe.toString();
}
if (safe instanceof Function) {
return exportFunction(safe, unsafeWindow, {
allowCrossOriginArguments: true,
});
}
if (safe instanceof Array) {
var unsafe = new unsafeWindow.Array();
for (var i = 0; i < safe.length; ++i) {
unsafe.push(clone(safe[i]));
}
return unsafe;
}
var unsafe = new unsafeWindow.Object();
_.C(safe).each(function (v, k) {
unsafe[k] = clone(v);
});
return unsafe;
}
var MAGIC_KEY = '__adsbypasser_reverse_proxy__';
$.window = (function () {
var isFirefox = typeof InstallTrigger !== 'undefined';
if (!isFirefox) {
return unsafeWindow;
}
var decorator = {
set: function (target, key, value) {
if (key === MAGIC_KEY) {
return false;
}
if (target === unsafeWindow && key === 'open') {
var d = Object.getOwnPropertyDescriptor(target, key);
d.value = clone(function () {
var rv = value();
return cloneInto(rv, unsafeWindow);
});
Object.defineProperty(target, key, d);
} else {
target[key] = clone(value);
}
return true;
},
get: function (target, key) {
if (key === MAGIC_KEY) {
return target;
}
var value = target[key];
var type = typeof value;
if (value === null || (type !== 'function' && type !== 'object')) {
return value;
}
return new Proxy(value, decorator);
},
apply: function (target, self, args) {
args = Array.prototype.slice.call(args);
if (target === unsafeWindow.Object.defineProperty) {
args[0] = args[0][MAGIC_KEY];
}
if (target === unsafeWindow.Function.apply) {
self = self[MAGIC_KEY];
args[1] = Array.prototype.slice.call(args[1]);
}
if (target === unsafeWindow.document.querySelector) {
self = self[MAGIC_KEY];
}
if (target === unsafeWindow.document.write) {
self = self[MAGIC_KEY];
}
var usargs = clone(args);
return target.apply(self, usargs);
},
construct: function (target, args) {
args = Array.prototype.slice.call(args);
args.unshift(undefined);
var usargs = clone(args);
var bind = unsafeWindow.Function.prototype.bind;
return new (bind.apply(target, usargs));
},
};
return new Proxy(unsafeWindow, decorator);
})();
return $;
}));
(function (context, factory) {
if (typeof module === 'object' && typeof module.exports === 'object') {
module.exports = function (context, GM) {
var _ = require('lodash');
var core = require('./core.js');
var misc = require('./misc.js');
var dispatcher = require('./dispatcher.js');
var modules = [misc, dispatcher].map(function (v) {
return v.call(null, context, GM);
});
var $ = _.assign.apply(null, modules);
return factory(context, GM, core, $);
};
} else {
factory(context, {
getValue: GM_getValue,
setValue: GM_setValue,
}, context._, context.$);
}
}(this, function (context, GM, _, $) {
'use strict';
var MANIFEST = [
{
name: 'version',
key: 'version',
default_: 0,
verify: function (v) {
return typeof v === 'number' && v >= 0;
},
normalize: toNumber,
},
{
name: 'alignCenter',
key: 'align_center',
default_: true,
verify: isBoolean,
normalize: toBoolean,
},
{
name: 'changeBackground',
key: 'change_background',
default_: true,
verify: isBoolean,
normalize: toBoolean,
},
{
name: 'externalServerSupport',
key: 'external_server_support',
default_: false,
verify: isBoolean,
normalize: toBoolean,
},
{
name: 'redirectImage',
key: 'redirect_image',
default_: true,
verify: isBoolean,
normalize: toBoolean,
},
{
name: 'scaleImage',
key: 'scale_image',
default_: true,
verify: isBoolean,
normalize: toBoolean,
},
{
name: 'logLevel',
key: 'log_level',
default_: 1,
verify: function (v) {
return typeof v === 'number' && v >= 0 && v <= 2;
},
normalize: toNumber,
},
];
var PATCHES = [
function (c) {
var ac = typeof c.alignCenter === 'boolean';
if (typeof c.changeBackground !== 'boolean') {
c.changeBackground = ac ? c.alignCenter : true;
}
if (typeof c.scaleImage !== 'boolean') {
c.scaleImage = ac ? c.alignCenter : true;
}
if (!ac) {
c.alignCenter = true;
}
if (typeof c.redirectImage !== 'boolean') {
c.redirectImage = true;
}
},
function (c) {
if (typeof c.externalServerSupport !== 'boolean') {
c.externalServerSupport = false;
}
},
function (c) {
if (typeof c.logLevel !== 'number') {
c.logLevel = 1;
}
},
];
var window = context.window;
function isBoolean (v) {
return typeof v === 'boolean';
}
function toBoolean (v) {
return !!v;
}
function toNumber (v) {
return parseInt(v, 10);
}
function createConfig () {
var c = {};
_.C(MANIFEST).each(function (m) {
Object.defineProperty(c, m.name, {
configurable: true,
enumerable: true,
get: function () {
return GM.getValue(m.key, m.default_);
},
set: function (v) {
GM.setValue(m.key, v);
var nv = GM.getValue(m.key, m.default_);
if (nv !== v) {
var s = _.T('failed to write config, key: {0}, value: {1}, new: {2}');
throw new _.AdsBypasserError(s(s.key, nv, v));
}
},
});
});
return c;
}
function senityCheck (c) {
var ok = _.C(MANIFEST).all(function (m) {
return m.verify(c[m.name]);
});
if (!ok) {
c.version = 0;
}
return c;
}
function migrate (c) {
if (typeof c.version !== 'number' || c.version < 0) {
throw new _.AdsBypasserError('wrong config version: ' + c.version);
}
while (c.version < PATCHES.length) {
PATCHES[c.version](c);
++c.version;
}
return c;
}
$.config = migrate(senityCheck(createConfig()));
$.register({
rule: {
host: /^adsbypasser\.github\.io$/,
path: /^\/configure\.html$/,
},
ready: function () {
$.window.commit = function (data) {
data.version = $.config.version;
_.C(data).each(function (v, k) {
$.config[k] = v;
});
};
$.window.render({
version: $.config.version,
options: {
alignCenter: {
type: 'checkbox',
value: $.config.alignCenter,
label: 'Align Center',
help: 'Align image to the center if possible. (default: enabled)',
},
changeBackground: {
type: 'checkbox',
value: $.config.changeBackground,
label: 'Change Background',
help: 'Use Firefox-like image background if possible. (default: enabled)',
},
redirectImage: {
type: 'checkbox',
value: $.config.redirectImage,
label: 'Redirect Image',
help: [
'Directly open image link if possible. (default: enabled)',
'If disabled, redirection will only works on link shortener sites.',
].join('
\n'),
},
scaleImage: {
type: 'checkbox',
value: $.config.scaleImage,
label: 'Scale Image',
help: 'When image loaded, scale it to fit window if possible. (default: enabled)',
},
externalServerSupport: {
type: 'checkbox',
value: $.config.externalServerSupport,
label: 'External Server Support',
help: [
'Send URL information to external server to enhance features (e.g.: captcha resolving). (default: disabled)',
'Affected sites:',
'setlinks.us (captcha)',
].join('
\n'),
},
logLevel: {
type: 'select',
value: $.config.logLevel,
menu: [
[0, '0 (quiet)'],
[1, '1 (default)'],
[2, '2 (verbose)'],
],
label: 'Log Level',
help: [
'Log level in developer console. (default: 1)',
'0 will not print anything in console.',
'1 will only print logs on affected sites.',
'2 will print on any sites.',
].join('
\n'),
},
},
});
},
});
return $;
}));
$.register({
rule: {
host: /^01\.nl$/,
},
ready: function () {
'use strict';
var f = $('iframe#redirectframe');
$.openLink(f.src);
},
});
$.register({
rule: {
host: /^10co\.(biz|xyz|co|me)$/,
},
ready: function () {
'use strict';
var d = $('.go');
$.openLink(d.dataset.href);
},
});
$.register({
rule: {
host: /^(www\.)?1be\.biz$/,
path: /^\/s\.php$/,
query: /^\?(.+)/,
},
start: function (m) {
'use strict';
$.openLink(m.query[1]);
},
});
$.register({
rule: {
host: /^(www\.)?1tiny\.net$/,
path: /\/\w+/
},
ready: function () {
'use strict';
var directUrl = $.searchScripts(/window\.location='([^']+)';/);
if (!directUrl) {
throw new _.AdsBypasserError('script content changed');
}
$.openLink(directUrl[1]);
},
});
$.register({
rule: {
host: /^2ty\.cc$/,
path: /^\/.+/,
},
ready: function () {
'use strict';
$.removeNodes('iframe');
var a = $('#close');
$.openLink(a.href);
},
});
$.register({
rule: {
host: /^(www\.)?3ra\.be$/,
},
ready: function () {
'use strict';
$.removeNodes('iframe');
var f = $.window.fc;
if (!f) {
throw new _.AdsBypasserError('window.fc is undefined');
}
f = f.toString();
f = f.match(/href="([^"]*)/);
if (!f) {
throw new _.AdsBypasserError('url pattern outdated');
}
$.openLink(f[1]);
},
});
$.register({
rule: {
host: /^(www\.)?4fun\.tw$/,
},
ready: function () {
'use strict';
var i = $('#original_url');
$.openLink(i.value);
},
});
$.register({
rule: {
host: /^ad2links\.com$/,
path: /^\/\w-.+$/,
},
ready: function () {
'use strict';
$.removeNodes('iframe');
$.openLinkByPost(window.location.toString(), {
post: {
image: 'Skip Ad.',
},
});
},
});
$.register({
rule: {
host: /^ad4\.fr$/,
},
ready: function () {
'use strict';
$.removeNodes('iframe');
var s = $.searchScripts(/"src", "([^"]+)"/);
if (!s) {
_.warn('changed');
return;
}
$.openLink(s[1]);
},
});
(function () {
'use strict';
$.register({
rule: {
host: /^ad7\.biz$/,
path: /^\/\d+\/(.*)$/,
},
start: function (m) {
$.removeNodes('iframe');
var redirectLink = m.path[1];
if (!redirectLink.match(/^https?:\/\//)) {
redirectLink = "http://" + redirectLink;
}
$.openLink(redirectLink);
},
});
$.register({
rule: {
host: /^ad7\.biz$/,
path: /^\/\w+$/,
},
ready: function () {
$.removeNodes('iframe');
var script = $.searchScripts('var r_url');
var url = script.match(/&url=([^&]+)/);
url = url[1];
$.openLink(url);
},
});
})();
(function () {
'use strict';
$.register({
rule: {
host: [
/^(www\.)?adb\.ug$/,
/^(www\.)?lynk\.my$/,
/^adyou\.me$/,
],
path: /^(?!\/(?:privacy|terms|contact(\/.*)?|#.*)?$).*$/
},
ready: function () {
'use strict';
$.removeNodes('iframe');
var m = $.searchScripts(/top\.location\.href="([^"]+)"/);
if (m) {
$.openLink(m[1]);
return;
}
getArguments().then(function (args) {
tryLink(args);
});
},
});
function getArguments () {
var PATTERN = /\{\s*_args[^}]+\}[^}]+\}/;
return _.D(function (resolve, reject) {
var m = $.searchScripts(PATTERN);
if (m) {
resolve(m);
return;
}
var observer = new MutationObserver(function (mutations) {
mutations.forEach(function (mutation) {
mutation.addedNodes.forEach(function (node) {
if (node.localName === 'script') {
var m = node.textContent.match(PATTERN);
if (m) {
resolve(m);
observer.disconnect();
}
}
});
});
});
observer.observe(document.body, {
childList: true,
});
}).then(function (m) {
return eval('(' + m[0] + ')');
});
}
function tryLink (args) {
var url = window.location.pathname + '/skip_timer';
var i = setInterval(function () {
$.post(url, args).then(function (text) {
var jj = _.parseJSON(text);
if (!jj.errors && jj.messages) {
clearInterval(i);
$.openLink(jj.messages.url);
}
});
}, 1000);
}
})();
(function () {
'use strict';
function getTokenFromRocketScript () {
var a = $.searchScripts(/var eu = '(?!false)(.*)'/);
return a ? a[1] : null;
}
$.register({
rule: {
host: /^adf\.ly$/,
path: /^\/redirecting\/(.+)$/,
},
start: function (m) {
var url = atob(m.path[1]);
$.openLink(url);
},
});
$.register({
rule: {
path: /\/locked$/,
query: /url=([^&]+)/,
},
start: function (m) {
$.resetCookies();
var url = decodeURIComponent(m.query[1]);
if (url.match(/^http/)) {
$.openLink(url);
} else {
$.openLink('/' + url);
}
},
});
$.register({
rule: function () {
var h = $.$('html[id="main_html"]');
if (h) {
return true;
} else {
return null;
}
},
start: function () {
$.window.document.write = _.nop;
$.window.btoa = _.nop;
waitToken().then(function (token) {
var url = decodeToken(token);
$.openLink(url);
}).catch(function (e) {
_.warn(e);
});
},
ready: function () {
var h = $.$('#main_html'), b = $.$('#home');
if (!h || !b || h.nodeName !== 'HTML' || b.nodeName !== 'BODY') {
return;
}
$.removeNodes('iframe');
$.window.cookieCheck = _.nop;
h = getTokenFromRocketScript();
if (!h) {
h = $('#adfly_bar');
$.window.close_bar();
return;
}
h = decodeToken(h);
$.openLink(h);
},
});
function waitToken () {
return _.D(function (resolve) {
var o = new MutationObserver(function (mutations) {
mutations.forEach(function (mutation) {
_.C(mutation.addedNodes).each(function (node) {
if (node.localName === 'script') {
var m = node.textContent.match(/var ysmm = '([^']+)'/);
if (m) {
o.disconnect();
resolve(m[1]);
}
}
});
});
});
o.observe(document.head, {
childList: true,
});
});
}
function decodeToken (token) {
var a = token.indexOf('!HiTommy');
if (a >= 0) {
token = token.substring(0, a);
}
a = '';
var b = '';
for (var i = 0; i < token.length; ++i) {
if (i % 2 === 0) {
a = a + token.charAt(i);
} else {
b = token.charAt(i) + b;
}
}
token = atob(a + b);
token = token.substr(2);
if (location.hash) {
token += location.hash;
}
return token;
}
})();
$.register({
rule: {
host: /^(www\.)?adfe\.es$/,
path: /^\/\w+$/,
},
ready: function () {
'use strict';
var f = $('#frmvideo');
if (!f.STEP4) {
return;
}
f.submit();
},
});
$.register({
rule: 'http://adfoc.us/*',
ready: function () {
'use strict';
var root = document.body;
var observer = new MutationObserver(function (mutations) {
var o = $.$('#showSkip');
if (o) {
observer.disconnect();
o = o.querySelector('a');
$.openLink(o.href);
}
});
observer.observe(root, {
childList: true,
subtree: true,
});
},
});
$.register({
rule: {
host: /^(www\.)?adjet\.biz$/,
},
ready: function () {
'use strict';
var m = $.searchScripts(/href=(\S+)/);
if (!m) {
throw new _.AdsBypasserError('site changed');
}
$.openLink(m[1]);
},
});
(function () {
'use strict';
$.register({
rule: {
host: [
/^adlink\.guru$/,
/^cypt\.ga$/,
/^(filesbucks|tmearn|cut-urls)\.com$/,
/^elink\.link$/,
/^(payurl|urlst)\.me$/,
/^url\.ht$/,
/^urle\.co$/,
/^(hashe|trlink|adshort)\.in$/,
/^www\.worldhack\.net$/,
/^123link\.top$/,
/^pir\.im$/,
/^bol\.tl$/,
/^(tl|adfly)\.tc$/,
/^(adfu|linkhits)\.us$/,
/^short\.pastewma\.com$/,
/^linkfly\.gaosmedia\.com$/,
],
},
ready: function () {
$.removeNodes('iframe', '.BJPPopAdsOverlay');
firstStage().then(function (page) {
return secondStage(page);
}).then(function (url) {
$.nuke(url);
$.openLink(url);
}).catch(function (e) {
_.warn(e);
});
},
});
function firstStage () {
return _.D(function (resolve, reject) {
var f = $.$('#link-view');
if (!f) {
resolve(document);
return;
}
var args = extractArgument(f);
var url = f.getAttribute('action');
var p = $.post(url, args).then(function (data) {
return $.toDOM(data);
});
resolve(p);
});
}
function secondStage (page) {
var f = $('#go-link', page);
var args = extractArgument(f);
var url = f.getAttribute('action');
return $.post(url, args).then(function (data) {
data = JSON.parse(data);
if (data && data.url) {
return data.url;
}
throw new _.AdsBypasserError('wrong data');
});
}
function extractArgument (form) {
var args = {};
$.$$('input', form).each(function (v) {
args[v.name] = v.value;
});
return args;
}
})();
$.register({
rule: {
host: /^adlock\.org$/,
},
ready: function () {
'use strict';
var a = $.$('#xre a.xxr, #downloadButton1');
if (a) {
$.openLink(a.href);
return;
}
a = $.window.fileLocation;
if (a) {
$.openLink(a);
}
},
});
$.register({
rule: {
host: /^(www\.)?adlot\.us$/,
},
ready: function () {
'use strict';
$.removeNodes('iframe');
var script = $.searchScripts('form');
var p = /name='([^']+)' value='([^']+)'/g;
var opt = {
image: ' ',
};
var tmp = null;
while (tmp = p.exec(script)) {
opt[tmp[1]] = tmp[2];
}
$.openLink('', {
path: opt,
});
},
});
$.register({
rule: {
host: /^admy\.link$/,
},
ready: function () {
'use strict';
var f = $('form.edit_link');
f.submit();
},
});
$.register({
rule: {
host: /^(www\.)?ah-informatique\.com$/,
path: /^\/ZipUrl/,
},
ready: function () {
'use strict';
var a = $('#zip3 a');
$.openLink(a.href);
},
});
(function () {
'use strict';
function decodeScript (encoded) {
var a = encoded.match(/^\s*;eval\((.+)\);\s*$/);
a = a[1];
var b = a.match(/^(.+)\('([^']+)','([^']+)','([^']+)','([^']+)'\)$/);
var c = eval('(' + b[1] + ')');
return c(b[2], b[3], b[4], b[5]);
}
$.register({
rule: {
host: /^ah\.pe$/,
},
ready: function () {
var script = $.searchScripts('eval');
script = decodeScript(script);
script = decodeScript(script);
script = decodeScript(script);
var path = script.match(/([^;= ]+)=([^+ ;]+)\+"\."\+([^+ ]+)\+"\."\+([^; ]+);/);
if (!path) {
throw new _.AdsBypasserError('script changed');
}
if (typeof $.window[path[2]] === 'undefined') {
_.info('recaptcha');
return;
}
path = _.T('{0}.{1}.{2}')($.window[path[2]], $.window[path[3]], $.window[path[4]]);
$.openLink(path);
},
});
})();
$.register({
rule: {
host: /^aka\.gr$/
},
ready: function () {
'use strict';
var l = $('iframe#yourls-frame');
$.openLink(l.src);
},
});
$.register({
rule: {
host: [
/^al\.ly$/,
/^ally\.sh$/,
],
},
ready: function () {
'use strict';
var i = $.$('body > section > iframe');
if (i) {
i.src = 'about:blank';
_.wait(3000).then(function () {
var a = $('a.redirect');
a.click();
});
return;
}
i = $.searchScripts(/"href","([^"]+)"\)\.remove/);
if (!i) {
_.warn('site changed');
return;
}
i = i[1];
$.openLink(i);
},
});
$.register({
rule: {
host: [
/^(www\.)?allkeyshop\.com$/,
/^cshort\.org$/,
],
},
ready: function (m) {
'use strict';
var matches = $.searchScripts(/window\.location\.href = "([^"]+)"/);
matches = matches[1];
$.nuke(matches);
$.openLink(matches);
},
});
$.register({
rule: {
host: /^anonymbucks\.com$/,
},
ready: function () {
'use strict';
var a = $('#boton-continuar');
a.click();
},
});
(function () {
'use strict';
var ajaxPattern = /\$.post\('([^']*)'[^{]+(\{\s*opt:\s*'make_log'[^}]+\}\s*\}),/i;
$.register({
rule: {
host: [
/^bc\.vc$/,
/^linc\.ml$/,
],
path: /^.+(https?:\/\/.+)$/,
},
start: function (m) {
$.openLink(m.path[1] + document.location.search + document.location.hash);
},
});
function decompress (script, unzip) {
if (!unzip) {
return script;
}
var matches = script.match(/eval(.*)/);
if (!matches) {
throw new _.AdsBypasserError('no script matches /eval(.*)/');
}
matches = matches[1];
script = eval(matches);
return script;
}
function searchScript (unzip) {
var content = $.searchScripts('make_log');
if (content) {
return {
direct: false,
script: decompress(content, unzip),
};
}
content = $.searchScripts('click_log');
if (content) {
return {
direct: true,
script: decompress(content, unzip),
};
}
throw new _.AdsBypasserError('script changed');
}
function knockServer (script, dirtyFix) {
var matches = script.match(ajaxPattern);
if (!matches) {
throw new _.AdsBypasserError('(in knock server) no script matches $.post');
}
var make_url = matches[1];
var make_opts = eval('(' + matches[2] + ')');
var i = setInterval(function () {
$.post(make_url, make_opts).then(function (text) {
if (dirtyFix) {
text = text.match(/\{.+\}/)[0];
}
var jj = _.parseJSON(text);
if (jj.message) {
clearInterval(i);
$.openLink(jj.message.url);
}
});
}, 1000);
}
$.register({
rule: {
host: /^bc\.vc$/,
path: /^\/.+/,
},
ready: function () {
$.removeNodes('iframe');
var token = findAJAXToken();
var time = fakeAJAXToken();
var url = _.T('/fly/ajax.php?wds={0}&time={1}');
url = url(token.wds, time);
_.wait(5000).then(function () {
return $.post(url, {
xdf: {
afg: $.window.tZ,
bfg: $.window.cW,
cfg: $.window.cH,
jki: token.jki,
dfg: $.window.sW,
efg: $.window.sH,
},
ojk: token.ojk,
});
}).then(function (rv) {
rv = JSON.parse(rv);
if (rv.error) {
throw new _.AdsBypasserError('auth error');
}
$.openLink(rv.message.url);
}).catch(function (e) {
_.warn('ajax error', e);
});
},
});
function run (dirtyFix) {
$.removeNodes('iframe');
var result = searchScript(true);
if (!result.direct) {
knockServer(result.script,dirtyFix);
} else {
result = result.script.match(/top\.location\.href='([^']+)'/);
if (!result) {
throw new _.AdsBypasserError('script changed');
}
result = result[1];
$.openLink(result);
}
}
$.register({
rule: {
host: /^adcrun\.ch$/,
path: /^\/\w+$/,
},
ready: function () {
$.removeNodes('.user_content');
var rSurveyLink = /http\.open\("GET", "api_ajax\.php\?sid=\d*&ip=[^&]*&longurl=([^"]+)" \+ first_time, (?:true|false)\);/;
var l = $.searchScripts(rSurveyLink);
if (l) {
$.openLink(l[1]);
return;
}
run(true);
},
});
$.register({
rule: {
host: [
/^(1tk|hit|adbla|tl7|mylink)\.us$/,
/^gx\.si$/,
/^adwat\.ch$/,
/^(fly2url|urlwiz|xafox)\.com$/,
/^(zpoz|ultry)\.net$/,
/^(wwy|myam)\.me$/,
/^(ssl|srk)\.gs$/,
/^shortit\.in$/,
/^www\.adjet\.eu$/,
/^cun\.bz$/,
/^miniurl\.tk$/,
/^vizzy\.es$/,
/^kazan\.vc$/,
/^linkcash\.ml$/,
],
path: /^\/.+/,
},
ready: run,
});
$.register({
rule: {
host: [
/^adtr\.im$/,
/^ysear\.ch$/,
/^xip\.ir$/,
],
path: /^\/.+/,
},
ready: function () {
var a = $.$('div.fly_head a.close');
var f = $.$('iframe.fly_frame');
if (a && f) {
$.openLink(f.src);
} else {
run();
}
},
});
$.register({
rule: {
host: /^ad5\.eu$/,
path: /^\/[^.]+$/,
},
ready: function() {
$.removeNodes('iframe');
var s = searchScript(true);
var m = s.script.match(/(