一点小小的hook
// ==UserScript==
// @name gcc vpn防掉线
// @namespace http://tampermonkey.net/
// @version 1.0
// @description 一点小小的hook
// @author LinXingJun
// @include *://*.vpn.gcc.edu.cn:*/*
// @include *://vpn.gcc.edu.cn/*
// @grant unsafeWindow
// @connect *
// @run-at document-start
// @license MIT
// ==/UserScript==
//修改指纹,防鉴别
function createfinger() {
const toBlob = unsafeWindow.HTMLCanvasElement.prototype.toBlob;
const toDataURL = unsafeWindow.HTMLCanvasElement.prototype.toDataURL;
unsafeWindow.HTMLCanvasElement.prototype.htGfd = function () {
const { width, height } = this;
const context = this.getContext('2d');
const shift = {
'r': Math.floor(Math.random() * 10) - 5,
'g': Math.floor(Math.random() * 10) - 5,
'b': Math.floor(Math.random() * 10) - 5
};
const matt = context.getImageData(0, 0, width, height);
for (let i = 0; i < height; i += 3) {
for (let j = 0; j < width; j += 3) {
const n = ((i * (width * 4)) + (j * 4));
matt.data[n + 0] = matt.data[n + 0] + shift.r;
matt.data[n + 1] = matt.data[n + 1] + shift.g;
matt.data[n + 2] = matt.data[n + 2] + shift.b;
}
}
context.putImageData(matt, 0, 0);
this.htGfd = () => {
top.postMessage('htGfd-called', '*');
};
top.postMessage('htGfd-called', '*');
};
Object.defineProperty(unsafeWindow.HTMLCanvasElement.prototype, 'toBlob', {
value: function () {
if (unsafeWindow.documentElement.dataset.htgfd !== 'false') {
this.htGfd();
}
return toBlob.apply(this, arguments);
}
});
Object.defineProperty(unsafeWindow.HTMLCanvasElement.prototype, 'toDataURL', {
value: function () {
if (unsafeWindow.documentElement.dataset.htgfd !== 'false') {
this.htGfd();
}
return toDataURL.apply(this, arguments);
}
});
unsafeWindow.document.documentElement.dataset.htGfd = true;
if (unsafeWindow.top !== unsafeWindow.self) {
console.log("修改iframe指纹成功")
} else {
console.log("修改自身指纹成功")
}
}
function iframeonload(iframe, src) {
console.log("已加载成功" + src);
setInterval(function () {
if (iframe.contentDocument) {
const buttons = Array.from(iframe.contentDocument.querySelectorAll("*"));
if (buttons.length > 0) {
const randomButton = buttons[Math.floor(Math.random() * buttons.length)];
// 创建mouseenter事件
const event = new Event('mouseenter', {
bubbles: true,
cancelable: true
});
// 触发事件
randomButton.dispatchEvent(event);
}
}
}, 500);
setInterval(function () {
if (iframe.contentDocument) {
const links = Array.from(iframe.contentDocument.querySelectorAll('a[href]'))
.map(link => link.href)
.filter(href => href
&& !href.startsWith('javascript:')
&& !href.startsWith('#')
&& href.endsWith('.html')
&& (async () => {
try {
const response = await new Promise((resolve, reject) => {
GM_xmlhttpRequest({
method: 'HEAD',
url: href,
onload: function(response) {
resolve(response);
},
onerror: function(error) {
reject(error);
}
});
});
return true;
} catch (e) {
return false;
}
})()
);
var randomLink;
if (links.length === 0) {
randomLink = unsafeWindow.location.href;
} else {
const randomIndex = Math.floor(Math.random() * links.length);
randomLink = links[randomIndex];
}
console.log("开始加载" + randomLink);
iframe.remove();
createHiddenIframe(randomLink);
}
}, 5000)
}
// 创建隐藏的iframe
function createHiddenIframe(src) {
const iframe = unsafeWindow.document.createElement('iframe');
iframe.src = src;
iframe.onload = iframeonload(iframe, src);
iframe.style.visibility = 'hidden';
iframe.style.position = 'absolute';
iframe.style.left = '-9999px';
iframe.style.top = '-9999px';
iframe.style.width = '100px';
iframe.style.height = '100px';
iframe.style.border = 'none';
iframe.style.opacity = '0';
iframe.style.zIndex = '-9999';
iframe.sandbox = 'allow-scripts allow-same-origin';
// 添加到页面
unsafeWindow.document.body.appendChild(iframe);
return iframe;
}
(function () {
createfinger();
unsafeWindow.console.clear = function () {
// Do nothing - console won't be cleared
};
unsafeWindow.console.info = function () {
// Do nothing - console won't be cleared
};
unsafeWindow.console.error = function () {
// Do nothing - console won't be cleared
};
if (unsafeWindow.top !== unsafeWindow.self) {
document.addEventListener('click', function (event) {
console.log('劫持到click事件:', event.target);
// 阻止事件继续传播
event.stopPropagation();
event.preventDefault();
}, true);
return;
}
var hiddeniframe;
unsafeWindow.document.addEventListener('DOMContentLoaded', function () {
hiddeniframe = createHiddenIframe(unsafeWindow.location.href);
})
})();