// ==UserScript==
// @name adf.ly && lienscash.com && adfoc.us && bc.vc && sh.st bypasser
// @namespace tag: adfly,lienscash,adfocus,bcvc,shst,bypasser
// @version 1.7
// @description Ignorar links do adf.ly, lienscash.com, adfoc.us, bc.vc e sh.st.
// @grant none
// @include http://q.gs/*
// @include http://9.bb/*
// @include http://u.bb/*
// @include http://j.gs/*
// @include http://adf.ly/*
// @include http://www.lienscash.com/l/*
// @include http://lienscash.com/l/*
// @include http://adfoc.us/*
// @include http://bc.vc/*
// @include http://sh.st/*
// ==/UserScript==
// Current version: check line 4 [@version header]
// Changelog:
// Version 1.7
// - fixed sh.st bypasser.
// Version 1.6.2
// - fixed AGAIN the adf.ly bypasser (really adfly? "hitommy"?)
// Version 1.6.1
// - fixed again the adf.ly bypasser (nice try?)
// Version 1.6
// - reverse engineered new adf.ly protection. Good job, it was /quite/ difficult!
// Version 1.5.1
// - fixed adf.ly bypasser, bimm.in bypasser coming soon...
// Version 1.5
// - fixed adf.ly bypasser. Nice try adf.ly, nice try!
// - fixed bc.vc bypasser.
// Version 1.4.1
// - fixed adfoc.us bypasser
// Version 1.4
// - fixed bc.vc bypasser finally. No more 1 star reviews for me :)
// - fixed the double redirection message.
// Version 1.3
// - fixed a bad typo in bc.vc bypasser, maybe it should fix some problems the users have
// - added a 100% fail safe method for adf.ly bypasser, it should now work for every link!
// - added a small credit string while redirecting, for bad users which do not check for updates! :D
// - added @grant directive as requested by http://wiki.greasespot.net/@grant
// [ not a changelog entry: remember to report any issues to the userscript URL, aka http://userscripts.org/scripts/show/122331 ]
// Version 1.2.1
// - fixed adfly's bypasser bug with urls like adf.ly/number/site.com
// Version 1.2.0
// - bypassed new adfly's protection
// - added new bypasser: bc.vc
// - new script headers added (updating notification?)
// Version 1.1.1
// - small bugfixes
// Version 1.1
// - improvements all around the code
// Version 1.0
// - Initial release
/**
* NOTE: The real and UNIQUE version of this bypasser is located at http://userscripts.org/scripts/show/122331.
* Any other page or script which uses this source OR claims to be this script, it is a fake.
* Please note that the author is named Robertof, and you can check his website at http://r.usr.sh.
* You can PM me on Userscripts if you find any copy.
* The last warning: I'm NOT responsible for ANY damages caused by UNOFFICIAL scripts downloaded from
* websites which aren't http://userscripts.org/scripts/show/122331.
* Enjoy.
* Robertof
*/
(function() {
var loc = document.location.href, interval, secinterval, bypassers = {
adfly: function() {
var tehregxp = /var zzz = ['"]([^'"]+)['"]/,
reg2 = /\/locked(?:\/|\?url=)([a-zA-Z0-9\-_]+)/,
reg3 = /\d+\/(http.+?)$/i,
reg4 = /\d+\/([a-zA-Z\-]+\.[a-zA-Z\-]+.*)/i,
reg5 = /blocked\.php(?:\?t=1)?$/;
if (loc.match (reg2))
{
clearInterval (interval);
var uri = (reg2.exec (loc))[1];
document.title = "** Waiting .. **";
secinterval = setInterval (function() {
if (document.getElementById ("continue").style.display != "none")
bypassers.doRedirect ("http://adf.ly/" + uri);
}, 1000);
}
else if (loc.match (reg3))
{
clearInterval (interval);
bypassers.doRedirect ((reg3.exec (loc))[1]);
}
else if (loc.match (reg4))
{
clearInterval (interval);
bypassers.doRedirect ("http://" + (reg4.exec (loc))[1]);
}
else if (document.head.innerHTML.match (tehregxp))
{
document.title = "** adfly bypasser: Bypassing the link... **";
clearInterval (interval);
bypassers._inject (function() {
// set base64 helper for decoding adfly's base64
// thanks to webtoolkit for the code
var Base64 = {
// private property
_keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
// public method for encoding
encode: function (input) {
var output = "";
var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
var i = 0;
input = Base64._utf8_encode(input);
while (i < input.length) {
chr1 = input.charCodeAt(i++);
chr2 = input.charCodeAt(i++);
chr3 = input.charCodeAt(i++);
enc1 = chr1 >> 2;
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
enc4 = chr3 & 63;
if (isNaN(chr2)) {
enc3 = enc4 = 64;
} else if (isNaN(chr3)) {
enc4 = 64;
}
output = output + this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) + this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
}
return output;
},
// public method for decoding
decode: function (input) {
var output = "";
var chr1, chr2, chr3;
var enc1, enc2, enc3, enc4;
var i = 0;
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
while (i < input.length) {
enc1 = this._keyStr.indexOf(input.charAt(i++));
enc2 = this._keyStr.indexOf(input.charAt(i++));
enc3 = this._keyStr.indexOf(input.charAt(i++));
enc4 = this._keyStr.indexOf(input.charAt(i++));
chr1 = (enc1 << 2) | (enc2 >> 4);
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
chr3 = ((enc3 & 3) << 6) | enc4;
output = output + String.fromCharCode(chr1);
if (enc3 != 64) {
output = output + String.fromCharCode(chr2);
}
if (enc4 != 64) {
output = output + String.fromCharCode(chr3);
}
}
output = Base64._utf8_decode(output);
return output;
},
// private method for UTF-8 encoding
_utf8_encode: function (string) {
string = string.replace(/\r\n/g, "\n");
var utftext = "";
for (var n = 0; n < string.length; n++) {
var c = string.charCodeAt(n);
if (c < 128) {
utftext += String.fromCharCode(c);
} else if ((c > 127) && (c < 2048)) {
utftext += String.fromCharCode((c >> 6) | 192);
utftext += String.fromCharCode((c & 63) | 128);
} else {
utftext += String.fromCharCode((c >> 12) | 224);
utftext += String.fromCharCode(((c >> 6) & 63) | 128);
utftext += String.fromCharCode((c & 63) | 128);
}
}
return utftext;
},
// private method for UTF-8 decoding
_utf8_decode: function (utftext) {
var string = "";
var i = 0;
var c = c1 = c2 = 0;
while (i < utftext.length) {
c = utftext.charCodeAt(i);
if (c < 128) {
string += String.fromCharCode(c);
i++;
} else if ((c > 191) && (c < 224)) {
c2 = utftext.charCodeAt(i + 1);
string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
i += 2;
} else {
c2 = utftext.charCodeAt(i + 1);
c3 = utftext.charCodeAt(i + 2);
string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
i += 3;
}
}
return string;
}
};
// adf.ly updates? Not scaring me! 15/07/13: Take this adfly ^_^
window.onbeforeunload = null;
var neededVar = ysmm;
var __t = neededVar.indexOf ("?");
var __u = neededVar.indexOf ("!HiTommy");
if (__u != -1)
neededVar = neededVar.substr (0, __u);
if (__t != -1)
neededVar = neededVar.substr (0, __t);
/*if (document.head.innerHTML.match (/view6\.js/))
neededVar = ysmm;
else
neededVar = zzz;*/
if (easyUrl == 'true') {
document.head.innerHTML = "<title>** Redirect in progress</title>";
document.body.innerHTML = "Ignorando este link (redirecionando para " + neededVar + "), aguarde...";
window.location = neededVar;
} else {
var f = "", z = "";
for (var l = 0; l < neededVar.length; l++) {
if (l % 2 == 0)
f += neededVar.charAt (l);
else
z = neededVar.charAt (l) + z;
}
var result = f + z;
result = Base64.decode (result);
result = result.substring (result.length - (result.length - 2));
document.head.innerHTML = "<title>** Redirect in progress</title>";
document.body.innerHTML = "Ignorando este link (redirecionando para " + result + "), aguarde...";
window.location = result;
}
});
//bypassers.doRedirect ((tehregxp.exec (document.head.innerHTML))[1]);
}
else if (loc.match (reg5))
{
clearInterval (interval);
var errorMsg = "** ERROR: adf.ly detected our bypassing attempt.\n";
errorMsg += "Please report the problem on the following url: http://userscripts.org/scripts/discuss/122331 and INCLUDE the adfly link.\n";
errorMsg += "Thanks, Robertof (the script author - and note that I'm NOT an Arabian guy or something)";
alert (errorMsg);
}
else {
clearInterval(interval);
alert ("Something went wrong! Please report the problem on the following url: http://userscripts.org/scripts/discuss/122331 and INCLUDE the adfly link!");
}
},
lienscash: function() {
var matches = /<a href="([^"]+)">skip/;
if (document.body.innerHTML.match (matches))
{
clearInterval (interval);
bypassers.doRedirect ((matches.exec (document.body.innerHTML))[1]);
}
},
adfocus: function() {
var regxp = /var click_url = ["']([^"']+)["']/;
if (document.body.innerHTML.match (regxp))
bypassers.doRedirect ( ( regxp.exec (document.body.innerHTML.replace(/\/\/var\sclick_url\s=.+/, "")) )[1] );
//alert(document.body.innerHTML.replace(/\/\/var\sclick_url\s=.+/, ""));
},
shst: function() {
var matches = /<a class="skip-btn" href="([^"]+)" id="skip_button">/;
if (document.body.innerHTML.match (matches))
{
clearInterval (interval);
bypassers.doRedirect ((matches.exec (document.body.innerHTML))[1]);
}
},
bcvc: function() {
// bypassing this site is harder than expected, because
// to get the link it does an AJAX request
// so we should make one too :(
// inject script
bypassers._inject (function() {
// get AJAX data from the page
var ajaxrx = /\{(opt:'make.+)/; //?rgs:\{[^\}+]\})/;
if (document.body.innerHTML.match (ajaxrx))
{
var p = ajaxrx.exec(document.body.innerHTML)[1];
// opt:'make_log',args:{aid:626,lid:1689504,oid:1684,ref: ''}},
p = p.substr (0, (p.length - 1)); // remove final ;
var _a = eval ('({' + p + ')');
//alert(_a.args.aid);
// do request
document.head.innerHTML = "<title>** Bypassing, please wait..</title>";
document.body.innerHTML = "Eu vou ignorar este site ruim, por favor, aguarde alguns segundos...<br /><strong style='font-size:18px;' id='sReplace'>0</strong>";
//alert (_a.opt);
//return;
var gayCallback = function (myself, retShit, count) {
document.getElementById('sReplace').innerHTML = "Try #" + count + ": " + ( count == 1 ? "a few more.." : ( count == 2 ? "just a few tries left.." : ( count == 3 ? "so close.." : ( count == 4 ? "almost done.." : ( count == 5 ? "GOTCHA! (probably)" : (count > 5 ? "wait, what?" : "a moment.." ) ) ) ) ) );
// scumbag bc.vc which changes ajax.fly.php in ajax.fly2.php :>
$.post ("http://bc.vc/fly/ajax.fly2.php", retShit, function (res) {
var jsono = eval ('(' + res + ')');
if (jsono.message) {
document.head.innerHTML = "<title>** Redirect in progress **</title>";
document.body.innerHTML = "Ignorando este link (redirecionando para " + jsono.message.url + "), aguarde...";
window.location = jsono.message.url;
return;
}
else
setTimeout (function(){myself (myself, retShit, ++count);}, 1000);
});
};
gayCallback (gayCallback, _a, 0);
// old code kept for debugging reasons
/*_a.opt = 'check_log';
var _intAu = setInterval (function () {
$.post ('http://bc.vc/fly/ajax.fly.php', _a, function (res) {
var sonOf = eval ('(' + res + ')');
if (!sonOf.message)
return;
clearInterval (_intAu);
_a.opt = 'make_log';
$.post ('http://bc.vc/fly/ajax.fly.php', _a, function (r) {
var _j = eval ('(' + r + ')');
if (_j.message) {
document.head.innerHTML = "<title>** Redirect in progress **</title>";
document.body.innerHTML = "Ignorando este link (redirecionando para " + _j.message.url + "), aguarde...";
document.body.innerHTML += "<br />Multiple bad-sites bypasser is brought to you by Robertof. Always check <a href='http://userscripts.org/scripts/show/122331'>this link</a> for updates and to report issues!";
window.location = _j.message.url;
}
else {
document.body.innerHTML = "bc.vc denied our request, waiting a bit and then reloading..";
alert (JSON.stringify (_j));
setTimeout (function() { window.location = document.location.href; }, 3000);
}
});
});
}, 1000);*/
}
});
},
doRedirect: function (uri) {
document.head.innerHTML = "<title>** Redirect in progress **</title>";
document.body.innerHTML = "Ignorando este link (redirecionando para " + uri + "), agurade...";
window.location = uri;
},
_inject: function (fn) {
// inject a script into the webpage
var _scr = document.createElement ("script");
_scr.appendChild (document.createTextNode ("(" + fn + ")();"));
(document.body || document.head || document.documentElement).appendChild (_scr);
}
};
if (loc.indexOf ("adf.ly") !== -1 || loc.indexOf ("q.gs") !== -1 || loc.indexOf("9.bb") !== -1 || loc.indexOf ("u.bb") !== -1 || loc.indexOf ("j.gs") !== -1)
interval = setInterval (bypassers.adfly, 1000);
else if (loc.indexOf ("lienscash.com") !== -1)
interval = setInterval (bypassers.lienscash, 1000);
else if (loc.indexOf ("bc.vc") !== -1)
bypassers.bcvc();
else if (loc.indexOf ("sh.st") !== -1)
bypassers.shst();
else
bypassers.adfocus();
})();