您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
伪装成微信+伪造指纹罢了
// ==UserScript== // @name csdn风控绕过 // @namespace http://tampermonkey.net/ // @version 1.0 // @description 伪装成微信+伪造指纹罢了 // @author You // @match *://*.csdn.net/* // @grant none // @run-at document-start // @license MIT // ==/UserScript== (async function () { 'use strict'; document.addEventListener('DOMContentLoaded', function () { const pageText = document.body.innerText || document.body.textContent; const hasKeyword = pageText.toLowerCase().includes("很抱歉,您访问的网站已开启安全防御,请完成 “安全验证” 后继续访问"); if (hasKeyword) { location.reload(); } }); if (document instanceof XMLDocument) { return; } const toBlob = HTMLCanvasElement.prototype.toBlob; const toDataURL = HTMLCanvasElement.prototype.toDataURL; 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 = () => { window.top.postMessage('htGfd-called', '*'); }; window.top.postMessage('htGfd-called', '*'); }; Object.defineProperty(HTMLCanvasElement.prototype, 'toBlob', { value: function () { if (document.documentElement.dataset.htgfd !== 'false') { this.htGfd(); } return toBlob.apply(this, arguments); } }); Object.defineProperty(HTMLCanvasElement.prototype, 'toDataURL', { value: function () { if (document.documentElement.dataset.htgfd !== 'false') { this.htGfd(); } return toDataURL.apply(this, arguments); } }); document.documentElement.dataset.htGfd = true; // 固定的值 const FIXED_USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36 NetType/WIFI MicroMessenger/7.0.20.1781(0x6700143B) WindowsWechat(0x63090a13) UnifiedPCWindowsWechat(0xf2540615) XWEB/16133 Flue'; // 保存原始的 navigator 对象 const originalNavigator = navigator; // 创建一个新的 navigator 对象代理 const navigatorProxy = new Proxy(originalNavigator, { get: function (target, prop) { // 拦截 userAgent 属性 if (prop === 'userAgent') { return FIXED_USER_AGENT; } // 拦截其他属性 const value = target[prop]; if (typeof value === 'function') { return value.bind(target); } return value; } }); // 通过 Object.defineProperty 重新定义 navigator try { Object.defineProperty(window, 'navigator', { value: navigatorProxy, writable: false, configurable: false }); } catch (e) { console.warn('无法重新定义 navigator:', e); } // 重写 Navigator.prototype 的相关属性 try { Object.defineProperty(Navigator.prototype, 'userAgent', { get: function () { return FIXED_USER_AGENT; }, configurable: false, enumerable: true }); } catch (e) { console.warn('无法修改 Navigator.prototype:', e); } // 拦截 Intl 对象的相关方法 try { const originalResolvedOptions = Intl.DateTimeFormat.prototype.resolvedOptions; Intl.DateTimeFormat.prototype.resolvedOptions = function () { const result = originalResolvedOptions.call(this); return result; }; } catch (e) { console.warn('无法修改 Intl.DateTimeFormat:', e); } // 创建一个更全面的代理对象来处理可能的检测 const handler = { get: function (target, prop) { if (prop === 'navigator') { return navigatorProxy; } return target[prop]; } }; // 尝试代理 window 对象 try { const windowProxy = new Proxy(window, handler); // 这里不直接替换 window,因为可能会导致问题 // 而是通过其他方式增强检测绕过 } catch (e) { console.warn('无法创建 window 代理:', e); } console.log(' User-Agent 修改完成'); console.log('当前 User-Agent:', navigator.userAgent); })();