Advertisement
Guest User

Untitled

a guest
Dec 10th, 2016
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.31 KB | None | 0 0
  1. console.log('Loaded Expose')
  2. var allRules = [{
  3. hostname: ["agar.io"],
  4. scriptUriRe: /^http:\/\/agar\.io\/agario\.core\.js/,
  5. replace: function(m) {
  6. var succeed = true;
  7. var verbose = false;
  8. m.removeNewlines();
  9.  
  10. // absolute position
  11.  
  12. succeed &= m.replace("var:ctx", /(([\w$]+)=[\w$]+\.getContext\(\"2d\"\);)/i, "if($2.id==='canvas'){$1 window.agar.ctx=$2;}else{$1}");
  13. succeed &= m.replace("var:minScale", /if\((\+\w\[\w>>3])<1\.0\)\{/i, "if($1<window.agar.minScale){");
  14. 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");
  15. succeed &= m.replace("var:getString", /(function\s*([\w$]+)\(\w\){return\s*[\w$]+\(\w,\w\)})/i, "$1 agar.getString=$2;");
  16. 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");
  17. 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};")
  18. succeed &= m.replace("var:nameOffset", /(\w=\w\+(\d+)\|0;\w=~~\(\+\w\[\w\+\d+>>2\]\*\.3\);)/i, "$1 agar.nameMemOffset=$2;");
  19. 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();");
  20. succeed &= m.replace("var:drawGrid", /(\d\.\d;return}function\s*)([\w$]+\(.,.\)){/i, "$1$2{if(!window.agar.drawGrid){return;} ");
  21. 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;");
  22. 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);");
  23. 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);}");
  24. 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(); };");
  25. succeed &= m.replace("var:onCoreLoaded", /if\(h.MC&&h.MC.onAgarioCoreLoaded\)/g, "window.onAgarioCoreLoaded();if(h.MC&&h.MC.onAgarioCoreLoaded)")
  26. return succeed;
  27. }
  28. }, ];
  29.  
  30. function makeProperty(name, varname) {
  31. return "'" + name + "' in window.agar || " +
  32. "Object.defineProperty( window.agar, '" + name + "', " +
  33. "{get:function(){return " + varname + "},set:function(){" + varname + "=arguments[0]},enumerable:true})";
  34. }
  35.  
  36. var quit = false;
  37.  
  38. if (window.top != window.self)
  39. quit = true;
  40.  
  41. if (!quit)
  42. if (document.readyState !== 'loading')
  43. quit = true; //console.error("gbots -- Expose: this script should run at document-start");
  44.  
  45. var isFirefox = /Firefox/.test(navigator.userAgent);
  46.  
  47. // Stage 1: Find corresponding rule
  48. var rules;
  49. for (var i = 0; i < allRules.length; i++)
  50. if (allRules[i].hostname.indexOf(window.location.hostname) !== -1) {
  51. rules = allRules[i];
  52. break;
  53. }
  54. if (!rules)
  55. quit = true; //, console.error("gbots -- Expose: cant find corresponding rule");
  56.  
  57.  
  58. if (!quit) {
  59. // Stage 2: Search for `main_out.js`
  60. if (isFirefox) {
  61. function bse_listener(e) {
  62. tryReplace(e.target, e);
  63. }
  64. window.addEventListener('beforescriptexecute', bse_listener, true);
  65. } else {
  66. // Iterate over document.head child elements and look for `main_out.js`
  67. for (var i = 0; i < document.head.childNodes.length; i++)
  68. if (tryReplace(document.head.childNodes[i]))
  69. quit = true;
  70. // If there are no desired element in document.head, then wait until it appears
  71.  
  72. function observerFunc(mutations) {
  73. for (var i = 0; i < mutations.length; i++) {
  74. var addedNodes = mutations[i].addedNodes;
  75. for (var j = 0; j < addedNodes.length; j++) {
  76. if (tryReplace(addedNodes[j])) {
  77. return observer.disconnect();
  78. }
  79. }
  80. }
  81. return null;
  82. }
  83. if (!quit) {
  84. var observer = new MutationObserver(observerFunc);
  85. observer.observe(document.childNodes[1], {
  86. childList: true,
  87. subtree: true
  88. });
  89. }
  90. }
  91. }
  92.  
  93. // Stage 3: Replace found element using rules
  94. function tryReplace(node, event) {
  95.  
  96. var scriptLinked = rules.scriptUriRe && rules.scriptUriRe.test(node.src);
  97. var scriptEmbedded = rules.scriptTextRe && rules.scriptTextRe.test(node.textContent);
  98. if (node.tagName != "SCRIPT" || (!scriptLinked && !scriptEmbedded))
  99. return false; // this is not desired element; get back to stage 2
  100.  
  101. var parentNode = node.parentNode;
  102. //console.log("gbots -- ", "Ghosts are watching the page");
  103. if (isFirefox) {
  104. event.preventDefault();
  105. window.removeEventListener('beforescriptexecute', bse_listener, true);
  106. }
  107.  
  108. var mod = {
  109. reset: "",
  110. text: null,
  111. history: [],
  112. cellProp: {},
  113. save: function() {
  114. this.history.push({
  115. reset: this.reset,
  116. text: this.text
  117. });
  118. return true;
  119. },
  120. restore: function() {
  121. var state = this.history.pop();
  122. this.reset = state.reset;
  123. this.text = state.text;
  124. return true;
  125. },
  126. reset_: function(reset) {
  127. this.reset += reset;
  128. return true;
  129. },
  130. replace: function(what, from, to, reset) {
  131. var vars = [],
  132. hooks = [];
  133. var splits = what.split(" ");
  134. for (var sp in splits) {
  135. var x = splits[sp];
  136.  
  137. x = x.split(":");
  138. x[0] === "var" && vars.push(x[1]);
  139. x[0] === "hook" && hooks.push(x[1]);
  140. }
  141.  
  142. function replaceShorthands(str) {
  143. function nope(letter, array, fun) {
  144. str = str
  145. .split(new RegExp('\\$' + letter + '([0-9]?)'))
  146. .map(function(v, n) {
  147. return n % 2 ? fun(array[v || 0]) : v;
  148. })
  149. .join("");
  150. }
  151. nope('v', vars, function(name) {
  152. return "window.agar." + name;
  153. });
  154. nope('h', hooks, function(name) {
  155. return "window.agar.hooks." + name;
  156. });
  157. nope('H', hooks, function(name) {
  158. return "window.agar.hooks." + name + "&&" + "window.agar.hooks." + name;
  159. });
  160. return str;
  161. }
  162. var newText = this.text.replace(from, replaceShorthands(to));
  163. if (newText === this.text) {
  164. //console.error("gbots -- Expose: `" + what + "` replacement failed!");
  165. return false;
  166. } else {
  167. this.text = newText;
  168. if (reset)
  169. this.reset += replaceShorthands(reset) + ";";
  170. //console.log("gbots -- ", "Expose: `" + what + "` replacement succeed!")
  171. return true;
  172. }
  173. },
  174. removeNewlines: function() {
  175. this.text = this.text.replace(/([,\/;])\n/mg, "$1");
  176. },
  177. get: function() {
  178. var cellProp = JSON.stringify(this.cellProp);
  179. return "window.agar={minScale: 1,mapOffset: 7071,drawGrid: true,showOthersMass: false, hooks:{},foodCache: [], cellProp:" + cellProp + "};" +
  180. this.reset + this.text;
  181. }
  182. };
  183.  
  184. if (scriptEmbedded) {
  185. mod.text = node.textContent;
  186. var replace_succeed = rules.replace(mod);
  187. if (!replace_succeed) {
  188. window.replace_completed(true);
  189. }
  190. if (isFirefox) {
  191. parentNode.removeChild(node);
  192. var script = document.createElement("script");
  193. if (!is_failed)
  194. script.textContent = mod.get();
  195. parentNode.appendChild(script);
  196. } else {
  197. if (!is_failed)
  198. node.textContent = mod.get();
  199. }
  200.  
  201. if (replace_succeed) {
  202. setTimeout(window.replace_completed, 50);
  203. } else {
  204. window.replace_completed(true);
  205. }
  206. } else {
  207. parentNode.removeChild(node);
  208. var request = new XMLHttpRequest();
  209. request.onload = function() {
  210. var script = document.createElement("script");
  211. mod.text = this.responseText;
  212. var replace_succeed = rules.replace(mod);
  213. if (replace_succeed) {
  214. script.textContent = mod.get();
  215. } else {
  216. script.textContent = this.responseText;
  217. }
  218. // `main_out.js` should not executed before jQuery was loaded, so we need to wait jQuery
  219.  
  220. function insertScript(script) {
  221. if (typeof jQuery === "undefined") {
  222. setTimeout(insertScript, 0, script);
  223. return;
  224. }
  225. parentNode.appendChild(script);
  226.  
  227. function hookCopy(evt) {
  228. evt.preventDefault();
  229. evt.clipboardData.setData('text/plain', script.textContent);
  230. }
  231. if (replace_succeed) {
  232. setTimeout(window.replace_completed, 50);
  233. } else {
  234. window.replace_completed(true);
  235. }
  236. }
  237. insertScript(script);
  238. };
  239. request.onerror = function() {};
  240. request.open("get", node.src, true);
  241. console.log('Test123')
  242. request.send();
  243. }
  244.  
  245. return true;
  246. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement