Greasy Fork is available in English.

§
Publicado: 20/04/2024

// ==UserScript// ==UserScript==
// @name ! PungHax
// @namespace http://tampermonkey.net/
// @version 0.1
// @description Everything done on client go brr
// @author XxcoolGamerZILL
// @match *://pung.io/*
// @grant none
// @run-at document-start
// ==/UserScript==
// Keys:
// F2: Toggle speedhack
// F3: Toggle lagswitch (Sent packets)
// F4: Toggle lagswitch (Recieved packets)
// F6: Add 2 billion coins

(function() {

// Change this to change your name!
var nickname = "person";
// Change this to change your name!

var _WebSocket = window.WebSocket;
var _send = _WebSocket.prototype.send;
var _addEventListener = _WebSocket.prototype.addEventListener;
var log;
var logctx;
var logtext = "none";
var bottext = "Bots: 0";
var toggle = ["Off", "On"];
var botmodes = ["Nothing", "Mirror actions"];
var bottoggle = 0;
var botmode = 0;
var lagswitch = 0;
var lagswitch2 = 0;
var lastSentTime = Date.now();
var startSpeedHackTime = Date.now();
var startSpeedHackPerformance = performance.now();
var extraTime = 0;
var extraPerformance = 0;
var speedhack = 0;
var speedmulti = 4;
var queue = [];
var client = undefined;
var xhrAuth = "";
var realID = "291243291243291243";
var oldWarn = window.console.warn;
window.console.warn = function(txt) {
if (txt.substr(0, 8) != "Received") {
oldWarn.apply(console, arguments);
}
}
window.client = undefined;
window.xhrAuth = undefined;
window.addEventListener("keydown", keys);
window.addEventListener("keyup", keys);
window.addEventListener('load', function() {
log = document.createElement("CANVAS");
logctx = log.getContext("2d");
document.body.appendChild(log);
log.style.all = "unset";
log.width = window.innerWidth;
log.height = window.innerHeight;
log.style.zIndex = "2000000000";
log.style.pointerEvents = "none";
log.style.position = "fixed";
log.style.top = "0px";
log.style.left = "0px";
log.style.bottom = "0px";
log.style.right = "0px";
log.style.width = "100%";
log.style.height = "100%";
log.style.border = "none";
log.style.margin = "0";
log.style.padding = "0";
log.style.overflow = "hidden";
logctx.fillStyle = "#FFFFFF";
logctx.font = "20px Arial";
logctx.fillText(logtext + " | " + bottext, 20, log.height - 40);
});
var xmlOpen = XMLHttpRequest.prototype.open;
var xmlSend = XMLHttpRequest.send;
function ab2str(buf) {
return String.fromCharCode.apply(null, new Uint8Array(buf));
}
function str2ab(str) {
var buf = new ArrayBuffer(str.length);
var bufView = new Uint8Array(buf);
for (var i=0, strLen=str.length; i 0) {
playFab.apply(null, queue[0]);
queue.splice(0, 1);
}
}, 333);
window.addEventListener('resize', function() {
if (log) {
log.width = window.innerWidth;
log.height = window.innerHeight;
logctx.fillStyle = "#FFFFFF";
logctx.font = "20px Arial";
logctx.fillText(logtext + " | " + bottext, 20, log.height - 40);
}
});
function inlineWorker(e) {
var r = URL.createObjectURL(new Blob(["(", e.toString(), ")()"], {
type: "application/javascript"
})),
t = new Worker(r);
URL.revokeObjectURL(r);
return t
};
function sendData(data) {
if (client && client.readyState == 1) {
client.send(data);
}
}
function adminMoment() {
var responses = 0;
var heroData = [];
var skillData = [];
addCoins(2000000000);
playFab("https://fad59.playfabapi.com/Client/GetCatalogItems", {CatalogVersion: "hero"}, function(txt) {
var data = JSON.parse(txt);
heroData = data.data.Catalog;
responses++;
if (responses == 2) {
run();
}
});
playFab("https://fad59.playfabapi.com/Client/GetCatalogItems", {CatalogVersion: "skill"}, function(txt) {
var data = JSON.parse(txt);
skillData = data.data.Catalog;
responses++;
if (responses == 2) {
run();
}
});
function run() {
for (let i = 0; i < heroData.length; i++) {
queue.push(["https://fad59.playfabapi.com/Client/PurchaseItem", {CatalogVersion: heroData[i].CatalogVersion, ItemId: heroData[i].ItemId, Price: heroData[i].VirtualCurrencyPrices.GG, VirtualCurrency: "GG"}]);
}
for (let i = 0; i < skillData.length; i++) {
queue.push(["https://fad59.playfabapi.com/Client/PurchaseItem", {CatalogVersion: skillData[i].CatalogVersion, ItemId: skillData[i].ItemId, Price: skillData[i].VirtualCurrencyPrices.GG, VirtualCurrency: "GG"}]);
}
}
}
window.adminMoment = adminMoment;
function playFab(url, data, cb) {
if (xhrAuth != undefined) {
var xhr = new XMLHttpRequest();
xhr.open("POST", url, true);
xhr.setRequestHeader("X-Authorization", xhrAuth);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.onload = function() {
if (cb != undefined && xhr.readyState === xhr.DONE) {
cb(xhr.responseText);
}
}
xhr.send(JSON.stringify(data));
}
}
function addCoins(coins) {
playFab("https://fad59.playfabapi.com/Client/AddUserVirtualCurrency", {Amount: coins, VirtualCurrency: "GG"});
}
window.playFab = playFab;
var worker = new inlineWorker(function() {
var botlimit = 4;
var bots = [];
var active = 0;
var url = undefined;
var togglebots = 0;
var botmode = 0;
var botloop = undefined;
var botloading = 0;
// Functions
function botconnect() {
try {
if (!botloading && bots.length < botlimit) {
bots.push(new WebSocket(url));
botloading++;
bots[bots.length - 1].connected = 0;
bots[bots.length - 1].onclose = function() {
var bot = this;
if (!bot.connected) {
botloading--;
}
bots.splice(bots.indexOf(bot), 1);
if (bot.connected) {
active--;
}
if (bot.connected && togglebots) {
self.postMessage([0, "Bots: " + active]);
}
}
bots[bots.length - 1].onopen = function() {
var bot = this;
botloading--;
active++;
bot.connected++;
self.postMessage([0, "Bots: " + active]);
}
}
} catch (err) { console.error(err) }
}
self.onmessage = function(e) {
switch (e.data[0]) {
case 0:
switch (e.data[1]) {
case "f4444444444":
togglebots++;
if (togglebots > 1) {
togglebots = 0;
clearInterval(botloop);
botloop = undefined;
self.postMessage([0, "Bots: 0"]);
for (let i = 0; i < bots.length; i++) {
bots[i].forceExit = 1;
bots[i].close();
}
} else {
botloop = setInterval(botconnect, 50);
}
break;
case "f666666666":
botmode++;
botmode %= 2;
break;
}
break;
case 1: // Broadcast to all active bots
for (let i = 0; i < bots.length; i++) {
if (bots[i] && bots[i].readyState == 1) {
bots[i].send(e.data[1]);
}
}
break;
case 2: // Handle server change
url = e.data[1];
break;
}
}
});
worker.onmessage = function(e) {
switch (e.data[0]) {
case 0: // Print to In-Game console
bottext = e.data[1];
print();
break;
}
}
function print() {
if (logctx) {
logctx.clearRect(0, 0, log.width, log.height);
logctx.fillStyle = "#FFFFFF";
logctx.font = "20px Arial";
logctx.fillText(logtext + " | " + bottext, 20, log.height - 40);
}
}
function MutableMessageEvent (o) {
this.bubbles = o.bubbles || false;
this.cancelBubble = o.cancelBubble || false;
this.cancelable = o.cancelable || false;
this.currentTarget = o.currentTarget || null;
this.data = o.data || null;
this.defaultPrevented = o.defaultPrevented || false;
this.eventPhase = o.eventPhase || 0;
this.lastEventId = o.lastEventId || '';
this.origin = o.origin || '';
this.path = o.path || new Array(0);
this.ports = o.parts || new Array(0);
this.returnValue = o.returnValue || true;
this.source = o.source || null;
this.srcElement = o.srcElement || null;
this.target = o.target || null;
this.timeStamp = o.timeStamp || null;
this.type = o.type || 'message';
this.prototype = o.prototype || MessageEvent.prototype;
}
window.WebSocket = function(url, protocol) {
if (new.target) {
var socket = new _WebSocket(...arguments);
if (new URL(url).port == "19091") { // In game
client = socket;
window.client = socket;
}
worker.postMessage([2, url]);
socket.addEventListener('close', function () {
if (client && socket.url == client.url) {
client = undefined;
window.client = undefined;
}
});
socket.addEventListener('open', function () {
// Code here
});
return socket;
} else {
throw new TypeError("Failed to construct 'WebSocket': Please use the 'new' operator, this DOM object constructor cannot be called as a function.");
}
};
function intercept(e) {
if (client && e.currentTarget.url == client.url) {
var data = new Uint8Array(e.data);
var cancel = false;
if (lagswitch2 && (data[0] != 243 || data[1] != 7)) {
cancel = true;
}
}
if (!cancel) {
return e;
}
}
function keys(e) {
if (e.type == "keydown") {
var key = e.key.toLowerCase();
worker.postMessage([0, key]);
switch (key) {
case "+":
e.preventDefault();
speedhack++;
speedhack %= 2;
logtext = "Speed Hack: " + toggle[speedhack];
print();
if (speedhack) {
startSpeedHackTime = oldDateNow();
startSpeedHackPerformance = oldPerformanceNow.call(performance);
} else {
extraTime += (oldDateNow() - startSpeedHackTime) * speedmulti;
extraPerformance += (oldPerformanceNow.call(performance) - startSpeedHackPerformance) * speedmulti;
}
break;
case "f4":
e.preventDefault();
lagswitch2++;
lagswitch2 %= 2;
logtext = "Lag Switch (Recieve): " + toggle[lagswitch2];
print();
break;
case "f3":
e.preventDefault();
lagswitch++;
lagswitch %= 2;
logtext = "Lag Switch (Send): " + toggle[lagswitch];
print();
break;
case "f1":
e.preventDefault();
break;
case "f44444444444":
e.preventDefault();
bottoggle++;
bottoggle %= 2;
logtext = "Bots: " + toggle[bottoggle];
print();
break;
case "f66666666666":
e.preventDefault();
botmode++;
botmode %= 2;
logtext = "Bot mode: " + botmodes[botmode];
print();
break;
case "f6":
e.preventDefault();
if (xhrAuth != undefined) {
logtext = "Added 2 billion coins!";
addCoins(2000000000);
print();
}
break;
}
}
}
var oldDateNow = Date.now;
var oldPerformanceNow = performance.now;
Date.now = function(){
return oldDateNow() + extraTime + ((oldDateNow() - startSpeedHackTime) * (speedhack ? speedmulti : 0));
};
performance.now = function(){
return oldPerformanceNow.call(performance) + extraPerformance + ((oldPerformanceNow.call(performance) - startSpeedHackPerformance) * (speedhack ? speedmulti : 0));
};
Object.assign(window.WebSocket, _WebSocket);
window.WebSocket.prototype = _WebSocket.prototype;
Object.defineProperty(window.WebSocket.prototype, 'onmessage', {
'set': function (func) {
var socket = this;
var onMessage = function (event) {
event = new MutableMessageEvent(event);
event = intercept(event);
if (event == undefined) { return };
func.call(socket, event);
}
_addEventListener.apply(socket, ['message', onMessage]);
}
});
window.WebSocket.prototype.addEventListener = function (type, func) {
var socket = this;
if (type == "message") {
var _func = func;
func = function eventHook(event) {
event = new MutableMessageEvent(event);
event = intercept(event);
if (event == undefined) { return };
_func.call(socket, event);
};
}
_addEventListener.call(socket, type, func);
}
window.WebSocket.prototype.send = function(data) {
var socket = this;
var canSend = true;
if (client && socket.url == client.url) {
data = new Uint8Array(data);
if (lagswitch && data[1] != 6) {
canSend = false;
}
}
if (canSend) {
_send.call(socket, data);
if (client && socket.url == client.url) {
//console.log("Uint8Array(" + data.length + ") " + data.toString().replaceAll(",", " "));
}
}
if (botmode == 1) {
worker.postMessage([1, data]);
}
}
})();

Publicar resposta

Faça o login para publicar uma resposta.