// ==UserScript== // @name 银狐病毒网址拦截 // @namespace https://github.com/security/silverfox-blocker // @version 1.2.3 // @description 自动拦截银狐病毒常见伪装域名(.cn.com / .com.cn 等),保护浏览安全 // @author Security // @match *://*/* // @grant none // @run-at document-start // @license MIT // ==/UserScript== (function () { 'use strict'; // 全局异常保护,防止脚本错误导致页面空白 try { console.log('[银狐拦截] 脚本已加载,当前域名:', window.location.hostname); // ========== 配置区 ========== // 已知银狐病毒域名列表(持续更新) const KNOWN_DOMAINS = [ // 银狐常用伪装域名示例,用户可按需增删 'update-flash.cn.com', 'flash-player.cn.com', 'adobe-update.cn.com', 'system-patch.cn.com', 'driver-boost.cn.com', 'win-update.cn.com', 'security-cert.cn.com', 'dns-cache.cn.com', 'chrome-plugin.cn.com', 'edge-addon.cn.com', 'office-tool.cn.com', 'wps-update.cn.com', 'qq-update.cn.com', 'wechat-patch.cn.com', 'net-framework.cn.com', 'directx-fix.cn.com', 'java-runtime.cn.com', 'browser-update.cn.com', 'cert-verify.cn.com', 'ssl-check.cn.com', ]; // 银狐常用伪装关键词(域名中包含这些的极可能是银狐) const SUSPICIOUS_KEYWORDS = [ 'flash', 'adobe', 'java', 'update', 'patch', 'fix', 'setup', 'install', 'security', 'cert', 'driver', 'boost', 'dns', 'download', 'downloader', 'chrome', 'edge', 'browser', 'plugin', 'addon', 'extension', 'office', 'wps', 'qq', 'wechat', 'weixin', 'alipay', 'taobao', 'net-framework', 'netframework', 'directx', 'runtime', 'tool', 'win-update', 'winupdate', 'system', 'windows', 'microsoft', 'ssl', 'vpn', 'proxy', '加速器', '助手', '大师', '管家', 'silverfox', '银狐', ]; // 银狐常用可疑 TLD(顶级域名/二级域名后缀) // 第一类:始终拦截(这些后缀结构本身就是银狐特征) const ALWAYS_BLOCK_TLDS = [ '.cn.com', // 银狐最爱,正常网站几乎不用 '.com.cn', // 银狐也常用,合法站点已通过白名单放行 ]; // 第二类:关键词 + 可疑后缀组合拦截(避免误伤正常网站) const KEYWORD_BLOCK_TLDS = [ '.top', '.xyz', '.icu', '.club', '.work', '.wang', '.site', '.online', '.fun', '.lol', '.rest', '.cfd', '.gdn', '.hair', '.cf', '.ga', '.ml', '.tk', '.gq', '.cyou', '.bond', '.click', '.link', '.download', '.review', '.country', '.science', '.party', '.stream', '.trade', '.date', '.racing', '.accountant', '.win', '.bid', '.men', '.loan', '.faith', ]; // 拦截页面显示内容 const BLOCK_HTML = ` 安全警告 - 银狐病毒拦截

检测到银狐病毒风险

您正在访问的网站被识别为银狐木马病毒的常用伪装域名。
银狐病毒常伪装成软件更新、Flash 播放器、安全证书等诱导下载,
窃取账号密码、浏览器数据和个人隐私。

拦截域名
--
拦截原因
--

保护建议:
1. 不要从该网站下载任何文件
2. 只从官方网站下载软件(如 adobe.com、microsoft.com)
3. 杀毒软件及时更新病毒库
4. 谨慎打开来历不明的链接

继续访问(风险自负) 关闭此页面
`; // ========== 核心逻辑 ========== function getHostname() { return window.location.hostname.toLowerCase(); } function getFullDomain() { return window.location.host.toLowerCase(); } /** * 检查是否命中已知域名列表 */ function checkKnownDomain(hostname) { // 完全匹配 if (KNOWN_DOMAINS.includes(hostname)) return true; // 子域名匹配(如 xxx.update-flash.cn.com) return KNOWN_DOMAINS.some(d => hostname.endsWith('.' + d)); } /** * 检查域名是否以指定 TLD 结尾 */ function endsWithTLD(hostname, tld) { return hostname.endsWith(tld) || hostname === tld.slice(1); } /** * 检查域名是否包含可疑关键词 */ function containsKeyword(hostname) { const lower = hostname.toLowerCase(); return SUSPICIOUS_KEYWORDS.some(kw => lower.includes(kw.toLowerCase())); } /** * 检查是否匹配可疑域名模式 * 返回匹配结果或 null */ function checkSuspiciousPattern(hostname) { // 第一类:始终拦截的 TLD(如 .cn.com) for (const tld of ALWAYS_BLOCK_TLDS) { if (endsWithTLD(hostname, tld)) { return { reason: '该域名使用银狐特征后缀 ' + tld + '(正常网站几乎不用)' }; } } // 第二类:关键词 + 可疑 TLD 组合 if (containsKeyword(hostname)) { for (const tld of KEYWORD_BLOCK_TLDS) { if (endsWithTLD(hostname, tld)) { return { reason: '该域名包含银狐常用伪装关键词,且使用可疑后缀 ' + tld }; } } } return null; } /** * 判断是否为银狐病毒域名 */ function detectSilverFox(hostname) { // 用户点击了"继续访问",临时绕过本次拦截 if (sessionStorage.getItem('__silverfox_bypass__') === '1') { sessionStorage.removeItem('__silverfox_bypass__'); return null; } // 跳过 IP 地址(IPv4/IPv6)和 localhost if (/^(\d{1,3}\.){3}\d{1,3}$/.test(hostname)) return null; if (hostname === 'localhost' || hostname === '::1' || hostname.startsWith('[')) return null; // 跳过纯数字域名(如内网 IP) if (/^\d+$/.test(hostname.split('.')[0])) return null; // 白名单:排除常见合法域名 // 如果遇到被误拦的正常网站,在此添加其域名即可 // 格式:'example.com' 或 '.gov.cn'(以 . 开头表示匹配所有子域名) const WHITELIST = [ // 政府/教育/军事 '.gov.cn', '.edu.cn', '.ac.cn', '.mil.cn', '.org.cn', '.net.cn', // 教育/政务类 .com.cn 'chsi.com.cn', 'neea.edu.cn', 'cscse.edu.cn', // 国内互联网 'baidu.com', 'qq.com', 'weixin.qq.com', 'wx.qq.com', 'taobao.com', 'tmall.com', 'jd.com', 'alibaba.com', 'sina.com.cn', 'sina.com', 'sohu.com', 'sohu.com.cn', 'people.com.cn', 'chinadaily.com.cn', 'china.com.cn', '163.com', '126.com', 'yeah.net', 'netease.com', 'zhihu.com', 'bilibili.com', 'douyin.com', 'kuaishou.com', 'xiaohongshu.com', 'weibo.com', 'tieba.baidu.com', 'alipay.com', 'alipay.cn', 'wechat.com', 'bytedance.com', 'meituan.com', 'dianping.com', 'pinduoduo.com', 'ctrip.com', 'qunar.com', 'didiglobal.com', 'xiaojukeji.com', // 国外常用 'microsoft.com', 'live.com', 'bing.com', 'bing.com.cn', 'bing.net', 'office.com', 'google.com', 'youtube.com', 'gmail.com', 'googleapis.com', 'apple.com', 'icloud.com', 'facebook.com', 'instagram.com', 'twitter.com', 'x.com', 'amazon.com', 'netflix.com', 'spotify.com', 'reddit.com', 'wikipedia.org', 'wikimedia.org', 'dropbox.com', 'slack.com', 'zoom.us', 'discord.com', 'notion.so', 'figma.com', 'canva.com', 'adobe.com', 'oracle.com', 'ibm.com', 'intel.com', 'nvidia.com', 'amd.com', 'docker.com', // 开发者常用 'github.com', 'github.io', 'gitlab.com', 'bitbucket.org', 'stackoverflow.com', 'stackexchange.com', 'npmjs.com', 'nodejs.org', 'python.org', 'rust-lang.org', 'golang.org', 'go.dev', 'apache.org', 'gnu.org', 'mozilla.org', 'w3.org', 'whatwg.org', 'ietf.org', 'stackblitz.com', 'codesandbox.io', 'codepen.io', 'js.org', 'jsdelivr.net', 'cdnjs.com', 'unpkg.com', // 国内开发者 'csdn.net', 'juejin.cn', 'segmentfault.com', 'cnblogs.com', 'oschina.net', 'gitee.com', 'coding.net', 'leancloud.cn', 'jianshu.com', 'v2ex.com', 'toutiao.com', 'infoq.cn', // 云服务 'cloud.tencent.com', 'tencent.com', 'tencent.cn', 'aliyun.com', 'aliyuncs.com', 'alibabacloud.com', 'huaweicloud.com', 'huawei.com', 'amazonaws.com', 'azure.com', 'cloudflare.com', // 厂商 'xiaomi.com', 'mi.com', 'oppo.com', 'vivo.com', 'oneplus.com', 'meizu.com', 'lenovo.com.cn', 'lenovo.com', 'dell.com', 'hp.com', 'asus.com', 'acer.com', // 支付/银行 'cmbchina.com', 'icbc.com.cn', 'ccb.com', 'abchina.com', 'bankcomm.com', 'spdb.com.cn', 'cib.com.cn', 'unionpay.com', 'paypal.com', 'stripe.com', // 教育/学术 'tsinghua.edu.cn', 'pku.edu.cn', 'fudan.edu.cn', 'zju.edu.cn', 'sjtu.edu.cn', 'nju.edu.cn', 'arxiv.org', 'ieee.org', 'acm.org', 'springer.com', 'elsevier.com', 'nature.com', 'sciencedirect.com', 'researchgate.net', 'scholar.google.com', // 其他 'archive.org', 'medium.com', 'quora.com', 'imdb.com', 'rottentomatoes.com', 'pixiv.net', 'deviantart.com', 'behance.net', 'dribbble.com', 'openai.com', 'anthropic.com', 'huggingface.co', 'steampowered.com', 'epicgames.com', 'blizzard.com', 'ea.com', 'ubisoft.com', 'nintendo.com', 'chatgpt.com', ]; for (const w of WHITELIST) { if (hostname === w) return null; // 条目以 . 开头表示匹配所有子域名(如 .gov.cn 匹配 xxx.gov.cn) if (w.startsWith('.')) { if (hostname.endsWith(w)) return null; } else if (hostname.endsWith('.' + w)) { return null; } } // 1. 检查已知域名 if (checkKnownDomain(hostname)) { return { type: 'known', reason: '该域名在银狐病毒已知域名列表中' }; } // 2. 检查可疑模式 const suspicious = checkSuspiciousPattern(hostname); if (suspicious) { return { type: 'suspicious', reason: suspicious.reason, }; } return null; } // ========== 执行拦截 ========== const hostname = getHostname(); const result = detectSilverFox(hostname); if (result) { const fullDomain = getFullDomain(); const reason = result.reason; console.warn( '%c[银狐病毒拦截] %c已拦截 %c' + fullDomain + '%c - ' + reason, 'color:#f87171;font-weight:bold', 'color:#e2e8f0', 'color:#fbbf24;font-weight:bold', 'color:#94a3b8' ); const html = BLOCK_HTML .replace('__DOMAIN__', fullDomain) .replace('__REASON__', reason) .replace('__ORIGINAL_URL__', window.location.href); // 方法1:Blob URL 重定向(最可靠,不依赖 DOM 操作) var blocked = false; try { var blob = new Blob([html], { type: 'text/html;charset=utf-8' }); window.location.replace(URL.createObjectURL(blob)); blocked = true; console.log('[银狐拦截] 拦截方式: blob URL'); } catch (e1) { console.warn('[银狐拦截] blob URL 失败:', e1.message); } // 方法2:innerHTML 替换(回退方案) if (!blocked) { try { var content = html .replace(/^[\s\S]*?]*>/i, '') .replace(/<\/html>[\s\S]*$/i, ''); document.documentElement.innerHTML = content; // 检查是否真的生效 if (document.body && document.body.innerHTML.trim().length > 100) { blocked = true; console.log('[银狐拦截] 拦截方式: innerHTML'); } else { console.warn('[银狐拦截] innerHTML 未生效'); } } catch (e2) { console.warn('[银狐拦截] innerHTML 失败:', e2.message); } } // 方法3:document.write(最后尝试) if (!blocked) { try { document.open(); document.write(html); document.close(); if (document.body && document.body.innerHTML.trim().length > 100) { blocked = true; console.log('[银狐拦截] 拦截方式: document.write'); } else { console.warn('[银狐拦截] document.write 被浏览器静默阻止'); } } catch (e3) { console.warn('[银狐拦截] document.write 失败:', e3.message); } } if (!blocked) { console.error('[银狐拦截] 所有拦截方式均失败,页面可能已加载'); } } } catch (e) { console.error('[银狐拦截] 脚本异常,已自动跳过:', e); } })();