Exploits debugging capabilities in the Powerline.io server to grant infinite score and length
- // ==UserScript==
- // @name Powerline.io infinite score and length
- // @namespace http://tampermonkey.net/
- // @version 1
- // @description Exploits debugging capabilities in the Powerline.io server to grant infinite score and length
- // @author ww
- // @match http://powerline.io/*
- // @grant unsafeWindow
- // ==/UserScript==
- (() => {
- var _WebSocket = unsafeWindow.WebSocket; // Copy the WebSocket constructor (to be hooked)
- let ws = null, // Current WebSocket the client is connected to
- handshakeCompleted = false; // whether or not the initial client handshake is complete
- unsafeWindow.WebSocket = function(address, protocol) {
- ws = new _WebSocket(address, protocol);
- var _send = ws.send; // Copy native send method
- ws.send = function() { // Intercept outgoing traffic
- const msg = new Uint8Array(arguments[0]);
- if (msg[0] == 1) { // If the first byte of the packet is 1, the packet is a handshake packet
- msg[0] = 171; // Change the byte to '171' which is the byte needed to enable debugging server-side
- console.log('Modified handshake packet and enabled debugging.');
- handshakeCompleted = true;
- arguments[0] = msg.buffer; // Re-encode Uint8Array to ArrayBuffer
- }
- return _send.apply(this, arguments); // Call native send method within the context of this WebSocket.
- }
- console.log('Modified WebSocket with address', address);
- return ws;
- }
- setInterval(() => {
- if (ws && handshakeCompleted) { // If the WebSocket exists and the handshake is completed
- /*
- To increase your score, length, and speed as a debug client
- all that's needed is to send a one-byte packet that consists of 0x9
- */
- const packet = new Uint8Array([0x9]).buffer;
- ws.send(packet); // Send the packet
- }
- }, 100); // 100ms to unite network performance and score generation
- })();