68 lines
2.6 KiB
JavaScript
68 lines
2.6 KiB
JavaScript
(function () {
|
|
console.clear();
|
|
console.log("%c Starting Magic Garden Traffic Capture... ", "background: #222; color: #bada55; font-size: 20px");
|
|
|
|
// storage for logs
|
|
window.capturedTraffic = [];
|
|
|
|
// Hook WebSocket Constructor to catch NEW connections (Best for full session capture)
|
|
const OriginalWebSocket = window.WebSocket;
|
|
window.WebSocket = function (...args) {
|
|
console.log("%c WS CONNECTING: " + args[0], "color: yellow");
|
|
const socket = new OriginalWebSocket(...args);
|
|
|
|
// Hook incoming messages
|
|
socket.addEventListener('message', (event) => {
|
|
const payload = {
|
|
type: 'INCOMING',
|
|
timestamp: Date.now(),
|
|
data: event.data
|
|
};
|
|
window.capturedTraffic.push(payload);
|
|
// Optional: Log to console to see it live (can be spammy)
|
|
// console.log('%c < IN', 'color: green', event.data);
|
|
});
|
|
|
|
// Hook outgoing messages
|
|
const originalSend = socket.send;
|
|
socket.send = function (data) {
|
|
const payload = {
|
|
type: 'OUTGOING',
|
|
timestamp: Date.now(),
|
|
data: data
|
|
};
|
|
window.capturedTraffic.push(payload);
|
|
console.log('%c > OUT', 'color: cyan', data);
|
|
originalSend.apply(this, arguments);
|
|
};
|
|
|
|
return socket;
|
|
};
|
|
|
|
// Copy prototype to ensure instanceof checks pass
|
|
window.WebSocket.prototype = OriginalWebSocket.prototype;
|
|
Object.keys(OriginalWebSocket).forEach(key => {
|
|
window.WebSocket[key] = OriginalWebSocket[key];
|
|
});
|
|
|
|
// Helper to download the logs
|
|
window.downloadTraffic = function () {
|
|
const json = JSON.stringify(window.capturedTraffic, null, 2);
|
|
const blob = new Blob([json], { type: 'application/json' });
|
|
const url = URL.createObjectURL(blob);
|
|
const a = document.createElement('a');
|
|
a.href = url;
|
|
a.download = `magic_garden_traffic_${Date.now()}.json`;
|
|
document.body.appendChild(a);
|
|
a.click();
|
|
document.body.removeChild(a);
|
|
console.log(`%c Downloaded ${window.capturedTraffic.length} packets.`, "color: #bada55");
|
|
};
|
|
|
|
console.log("%c INSTRUCTIONS:", "font-weight: bold; font-size: 14px");
|
|
console.log("1. The script is now active.");
|
|
console.log("2. IMPORTANT: Refresh the page now to capture the initial connection handshake.");
|
|
console.log("3. Play the game (move, farm, sell).");
|
|
console.log("4. When done, type %c window.downloadTraffic() %c in the console to save the log file.", "background: #eee; color: black; padding: 2px", "");
|
|
})();
|