Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- console.log('Loaded Expose')
- var allRules = [{
- hostname: ["agar.io"],
- scriptUriRe: /^http:\/\/agar\.io\/agario\.core\.js/,
- replace: function(m) {
- var succeed = true;
- var verbose = false;
- m.removeNewlines();
- // absolute position
- succeed &= m.replace("var:ctx", /(([\w$]+)=[\w$]+\.getContext\(\"2d\"\);)/i, "if($2.id==='canvas'){$1 window.agar.ctx=$2;}else{$1}");
- succeed &= m.replace("var:minScale", /if\((\+\w\[\w>>3])<1\.0\)\{/i, "if($1<window.agar.minScale){");
- succeed &= m.replace("var:idOffset", /(\w=0;\w=\w\[\w\+(\d+)>>2\]\|0;\w=\w\[(\d+)\]\|0;\w=\w\[\d+\]\|0;)(\w:do)/i, "$1 agar.idOffset=$2; agar.idMemOffset=$3; $4");
- succeed &= m.replace("var:getString", /(function\s*([\w$]+)\(\w\){return\s*[\w$]+\(\w,\w\)})/i, "$1 agar.getString=$2;");
- succeed &= m.replace("var:cellOffset", /(if\(\(\w\[\d+\]\|0\)!=0\?\(\w\[\d+\]\|\w\[(\w)\+\d+>>0\]\)<<24>>24==0:0\))((\w)=\w\[(\w)\+\d+>>2\]\|0;)else/i, "agar.cellMemOffset=$2; $1 if(agar.customSkins){$4=0;}else{$3}else");
- succeed &= m.replace("var:showOthersMass", /(if\(\w<=)(20\.0)(\){\w=\w;return})((if\(!\w\){if\(\(\w\[\d+\]\|0\)!=\(\w\[\d+\]\|0\)\){\w=\w;return}if\(\(\w\[\w\+\d+>>0\]\|0\)!=0\?\(\w\[\w>>0\]\|0\)==0:0\){\w=\w;return}}))/i, "$120.0$3if(!window.agar.showOthersMass) {$5};")
- succeed &= m.replace("var:nameOffset", /(\w=\w\+(\d+)\|0;\w=~~\(\+\w\[\w\+\d+>>2\]\*\.3\);)/i, "$1 agar.nameMemOffset=$2;");
- succeed &= m.replace("hook:beforeDraw", /\w+\(\d+,\w+\[\w+>>2\]\|0,\+\-\+\w\[\w+\+\d+>>3\],\+-\+\w+\[\w\+\d+>>3\]\)\|0;/, "$& if(window.agar.hooks.beforeDraw) window.agar.hooks.beforeDraw();");
- succeed &= m.replace("var:drawGrid", /(\d\.\d;return}function\s*)([\w$]+\(.,.\)){/i, "$1$2{if(!window.agar.drawGrid){return;} ");
- succeed &= m.replace("var:simpleCellDraw", /do\s*if\((\w)\){((\w)=!\((\+\w\[\w>>2\])<=20\.0\);)([\w$]+\(\d+,\w\[\w>>2]\|0\)\|0;[\w$]+\(\d+,\w\[\w>>2]\|0,(\+\(\+\w\[\w>>2\]\)),(\+\(\+\w\[\w>>2\]\)),\+\(\+\w\[\w>>2\])\+5\.0(\),0\.0,6\.283185307179586,0\)\|0;[\w$]+\(\d+,\w\[\w>>2]\|0\)\|0;\w=\w\[\w>>2\]\|0;)if\(\w\){([\w$]+\(\d+,\w\|0,(\w&255\|0),(\w&255\|0),(\w&255\|0)\)\|0;)([\w$]+\(\d+,\w\[\w>>2]\|0\)\|0;)/i, "do if(agar.simpleCellDraw ? ($1 =1 , $1 ): $1){ cellSize=$4;$2 ctx = agar.ctx; if(!$3 && agar.customPellets) {agar.foodCache.push({x:$6,y:$7,size:cellSize});break;}; $5$8 if($3){if(agar.ctx) {agar.ctx.fillStyle='#fff'};$9$13if(window.agar.simpleCellDraw)break;");
- succeed &= m.replace("hook:cellMassTextScale", /((\w)=\(\w\|0\)<20\?20.0:\+\(\w\|0\);)/i, "$1 if(window.agar.hooks.cellMassTextScale) $2=window.agar.hooks.cellMassTextScale($2);");
- succeed &= m.replace("var:calculateOffset", /(\w\[\w\+(\d+)>>3]=(\w);\w\[\w\+(\d+)>>3]=(\w);\w\[\w\+(\d+)>>3]=(\w);\w\[\w\+(\d+)>>3]=(\w);)/i, "$1 function setMapCoords(_0x7444x1,_0x7444x2,_0x7444x3,_0x7444x4,_0x7444x5,_0x7444x6){if(_0x7444x6-_0x7444x5==24){if(_0x7444x3-_0x7444x1>14E3){if(_0x7444x4-_0x7444x2>14E3){window.agar.mapOffsetX=window.agar.mapOffset-_0x7444x3;window.agar.mapOffsetY=window.agar.mapOffset-_0x7444x4;window.agar.mapOffsetFixed=true; window.agar.dimensions = [(-7071 - window.agar.mapOffsetX), (-7071 - window.agar.mapOffsetY), (7071 - window.agar.mapOffsetX), (7071 - window.agar.mapOffsetY)]}}}}; if(setMapCoords){setMapCoords($3,$5,$7,$9,$2,$8);}");
- succeed &= m.replace("var:coords", /([\w$]+\(\d+,\w\[\w>>2\]\|0,(\+\w),(\+\w)\)\|0;[\w$]+\(\d+,\w\[\w>>2\]\|0,\+-(\+\w\[\w\+\d+>>3\]),\+-(\+\w\[\w\+\d+>>3\])\)\|0;)/i, "$1 agar.viewScale=$2; agar.playerX=$4; agar.playerY=$5; if(window.agar.beforeDraw){ window.agar.beforeDraw(); };");
- succeed &= m.replace("var:onCoreLoaded", /if\(h.MC&&h.MC.onAgarioCoreLoaded\)/g, "window.onAgarioCoreLoaded();if(h.MC&&h.MC.onAgarioCoreLoaded)")
- return succeed;
- }
- }, ];
- function makeProperty(name, varname) {
- return "'" + name + "' in window.agar || " +
- "Object.defineProperty( window.agar, '" + name + "', " +
- "{get:function(){return " + varname + "},set:function(){" + varname + "=arguments[0]},enumerable:true})";
- }
- var quit = false;
- if (window.top != window.self)
- quit = true;
- if (!quit)
- if (document.readyState !== 'loading')
- quit = true; //console.error("gbots -- Expose: this script should run at document-start");
- var isFirefox = /Firefox/.test(navigator.userAgent);
- // Stage 1: Find corresponding rule
- var rules;
- for (var i = 0; i < allRules.length; i++)
- if (allRules[i].hostname.indexOf(window.location.hostname) !== -1) {
- rules = allRules[i];
- break;
- }
- if (!rules)
- quit = true; //, console.error("gbots -- Expose: cant find corresponding rule");
- if (!quit) {
- // Stage 2: Search for `main_out.js`
- if (isFirefox) {
- function bse_listener(e) {
- tryReplace(e.target, e);
- }
- window.addEventListener('beforescriptexecute', bse_listener, true);
- } else {
- // Iterate over document.head child elements and look for `main_out.js`
- for (var i = 0; i < document.head.childNodes.length; i++)
- if (tryReplace(document.head.childNodes[i]))
- quit = true;
- // If there are no desired element in document.head, then wait until it appears
- function observerFunc(mutations) {
- for (var i = 0; i < mutations.length; i++) {
- var addedNodes = mutations[i].addedNodes;
- for (var j = 0; j < addedNodes.length; j++) {
- if (tryReplace(addedNodes[j])) {
- return observer.disconnect();
- }
- }
- }
- return null;
- }
- if (!quit) {
- var observer = new MutationObserver(observerFunc);
- observer.observe(document.childNodes[1], {
- childList: true,
- subtree: true
- });
- }
- }
- }
- // Stage 3: Replace found element using rules
- function tryReplace(node, event) {
- var scriptLinked = rules.scriptUriRe && rules.scriptUriRe.test(node.src);
- var scriptEmbedded = rules.scriptTextRe && rules.scriptTextRe.test(node.textContent);
- if (node.tagName != "SCRIPT" || (!scriptLinked && !scriptEmbedded))
- return false; // this is not desired element; get back to stage 2
- var parentNode = node.parentNode;
- //console.log("gbots -- ", "Ghosts are watching the page");
- if (isFirefox) {
- event.preventDefault();
- window.removeEventListener('beforescriptexecute', bse_listener, true);
- }
- var mod = {
- reset: "",
- text: null,
- history: [],
- cellProp: {},
- save: function() {
- this.history.push({
- reset: this.reset,
- text: this.text
- });
- return true;
- },
- restore: function() {
- var state = this.history.pop();
- this.reset = state.reset;
- this.text = state.text;
- return true;
- },
- reset_: function(reset) {
- this.reset += reset;
- return true;
- },
- replace: function(what, from, to, reset) {
- var vars = [],
- hooks = [];
- var splits = what.split(" ");
- for (var sp in splits) {
- var x = splits[sp];
- x = x.split(":");
- x[0] === "var" && vars.push(x[1]);
- x[0] === "hook" && hooks.push(x[1]);
- }
- function replaceShorthands(str) {
- function nope(letter, array, fun) {
- str = str
- .split(new RegExp('\\$' + letter + '([0-9]?)'))
- .map(function(v, n) {
- return n % 2 ? fun(array[v || 0]) : v;
- })
- .join("");
- }
- nope('v', vars, function(name) {
- return "window.agar." + name;
- });
- nope('h', hooks, function(name) {
- return "window.agar.hooks." + name;
- });
- nope('H', hooks, function(name) {
- return "window.agar.hooks." + name + "&&" + "window.agar.hooks." + name;
- });
- return str;
- }
- var newText = this.text.replace(from, replaceShorthands(to));
- if (newText === this.text) {
- //console.error("gbots -- Expose: `" + what + "` replacement failed!");
- return false;
- } else {
- this.text = newText;
- if (reset)
- this.reset += replaceShorthands(reset) + ";";
- //console.log("gbots -- ", "Expose: `" + what + "` replacement succeed!")
- return true;
- }
- },
- removeNewlines: function() {
- this.text = this.text.replace(/([,\/;])\n/mg, "$1");
- },
- get: function() {
- var cellProp = JSON.stringify(this.cellProp);
- return "window.agar={minScale: 1,mapOffset: 7071,drawGrid: true,showOthersMass: false, hooks:{},foodCache: [], cellProp:" + cellProp + "};" +
- this.reset + this.text;
- }
- };
- if (scriptEmbedded) {
- mod.text = node.textContent;
- var replace_succeed = rules.replace(mod);
- if (!replace_succeed) {
- window.replace_completed(true);
- }
- if (isFirefox) {
- parentNode.removeChild(node);
- var script = document.createElement("script");
- if (!is_failed)
- script.textContent = mod.get();
- parentNode.appendChild(script);
- } else {
- if (!is_failed)
- node.textContent = mod.get();
- }
- if (replace_succeed) {
- setTimeout(window.replace_completed, 50);
- } else {
- window.replace_completed(true);
- }
- } else {
- parentNode.removeChild(node);
- var request = new XMLHttpRequest();
- request.onload = function() {
- var script = document.createElement("script");
- mod.text = this.responseText;
- var replace_succeed = rules.replace(mod);
- if (replace_succeed) {
- script.textContent = mod.get();
- } else {
- script.textContent = this.responseText;
- }
- // `main_out.js` should not executed before jQuery was loaded, so we need to wait jQuery
- function insertScript(script) {
- if (typeof jQuery === "undefined") {
- setTimeout(insertScript, 0, script);
- return;
- }
- parentNode.appendChild(script);
- function hookCopy(evt) {
- evt.preventDefault();
- evt.clipboardData.setData('text/plain', script.textContent);
- }
- if (replace_succeed) {
- setTimeout(window.replace_completed, 50);
- } else {
- window.replace_completed(true);
- }
- }
- insertScript(script);
- };
- request.onerror = function() {};
- request.open("get", node.src, true);
- console.log('Test123')
- request.send();
- }
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement