您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
在网页加载后自动修改加密后的网址检查网址
当前为
// ==UserScript== // @name 禁用VIKACG网址安全检查 // @version 1.1 // @description 在网页加载后自动修改加密后的网址检查网址 // @author xsap // @match https://www.vikacg.com/p/* // @grant none // @namespace NoVikUrlBlock // @license MIT // ==/UserScript== (function() { 'use strict'; // --- 内置极简 CryptoJS AES CBC Pkcs7 实现 --- const CryptoJS = (function() { // Base64解码 function base64ToBytes(base64) { const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; let str = base64.replace(/=+$/, ''); let bytes = []; for (let bc = 0, bs, buffer, idx = 0; buffer = str.charAt(idx++); ~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer, bc++ % 4) ? bytes.push(255 & bs >> (-2 * bc & 6)) : 0) buffer = chars.indexOf(buffer); return bytes; } // Utf8编码/解码 const Utf8 = { parse: str => new TextEncoder().encode(str), stringify: bytes => new TextDecoder().decode(bytes) }; // AES-CBC 解密 async function aesCbcDecrypt(base64, key, iv) { const data = new Uint8Array(base64ToBytes(base64)); const cryptoKey = await crypto.subtle.importKey( "raw", key, { name: "AES-CBC" }, false, ["decrypt"] ); const decrypted = await crypto.subtle.decrypt( { name: "AES-CBC", iv: iv }, cryptoKey, data ); return new Uint8Array(decrypted); } return { enc: { Utf8 }, AES: { decrypt: aesCbcDecrypt } }; })(); // 解密函数 async function decrypt(encryptedUrl) { try { const key = CryptoJS.enc.Utf8.parse("7R75R3JZE2PZUTHH"); const iv = CryptoJS.enc.Utf8.parse("XWO76NCVZM2X1UCU"); const hex = encryptedUrl.match(/.{1,2}/g).map(byte => parseInt(byte, 16)); const base64 = btoa(String.fromCharCode.apply(null, hex)); const decryptedBytes = await CryptoJS.AES.decrypt(base64, key, iv); return new TextDecoder().decode(decryptedBytes).replace(/\x00+$/, ''); } catch (e) { console.error('解密失败:', e); return encryptedUrl; } } // 更新所有匹配的链接 async function updateLinks() { const links = document.querySelectorAll('a[href^="/external?e="]'); for (const link of links) { const encryptedUrl = new URL(link.href, window.location.origin).searchParams.get('e'); if (encryptedUrl) { const decryptedUrl = await decrypt(encryptedUrl); if (decryptedUrl.startsWith('http')) link.href = decryptedUrl; } } } // 初次执行 + 监听DOM变化 updateLinks(); const observer = new MutationObserver(updateLinks); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['href'] }); })();