Userscript Code Scanner [Local + AI]
Userscript Code Scanner [Local + AI] · 用户脚本代码扫描器
一款针对 油猴脚本的安全检测工具。当你打开 GreasyFork 或其它下载站上任意脚本的 "CODE" 代码页(或其他 .user.js 下载页)时,脚本会自动触发一次 静态分析——在不运行代码的前提下,逐行检查源码文本中的危险模式、危险函数调用,以及对敏感数据的访问,并给出风险等级和命中代码行。
本脚本基于 GF Code Scanner修改。原作者:ktt21。
本地检测内容
以下为本地静态检查的主要检分组:
关键威胁(代码执行与挖矿)
| 模式 | 检测点 |
|---|---|
| eval() | 从字符串直接执行任意代码,最危险的模式之一 |
| new Function() | 动态创建函数(与 eval 类似) |
| 矿机特征 | 加密货币挖矿签名(coinhive / cryptonight / monero / minero.js 等) |
代码隐藏与混淆
| 模式 | 检测点 |
|---|---|
| atob() | 将字符串从 Base64 解码,常用于隐藏恶意载荷 |
| 十六进制 / 混淆串 | _0xabc123、String.fromCharCode 等混淆代码特征 |
| 深度解码 | 对 base64 / 十六进制载荷递归解码,揭示被隐藏的真实内容 |
设备与隐私访问
| 模式 | 检测点 |
|---|---|
| 地理位置 | navigator.geolocation(GPS 定位) |
| 媒体设备 | navigator.mediaDevices(摄像头 / 麦克风) |
| 剪贴板 | navigator.clipboard(读取 / 写入剪贴板) |
用户数据处理
| 模式 | 检测点 |
|---|---|
| Cookies | document.cookie(会话劫持或追踪) |
| 浏览器存储 | localStorage、sessionStorage(在用户电脑上存储数据) |
| 脚本管理器存储 | GM_getValue、GM_setValue(访问扩展持久化数据) |
网络活动
| 模式 | 检测点 |
|---|---|
| 隐藏请求 | GM_xmlhttpRequest(可绕过浏览器 CORS 策略发起请求) |
| 标准请求 | fetch()、XMLHttpRequest(从外部服务器加载数据) |
| 页面改写 | document.write()(可能篡改网站内容) |
info 补充
WebRTC 泄漏、键盘记录、屏幕截图 等更多隐蔽采集模式也会被扫描识别。
权限使用披露:对比脚本头部
@grant声明与代码中明文/编码的实际调用,供 AI 判定隐藏权限。域名分析:脚本会提取代码中所有的 URL,识别出唯一域名集合并展示在报告中——让你一眼看到脚本可能把数据发往哪里。
风险结论
检测到命中项时,会为每个命中项标记威胁等级:低危 (Low) / 中危 (Medium) / 高危 (High) / 危险 (Critical),并列出具体命中的代码行,方便你对照原始源码核对。
AI 复核
界面中点击 「Check in AI / AI 检测」 按钮,选择所使用 AI 引擎,即可把本地扫描出的统计数据发送给 AI,AI 会针对具体命中项用你选择的语言给出回复——判断该命中是否是安全相关,还是误报。首次使用需要为所选 AI 引擎输入一次 API Key。
独立校验:除本地统计外,AI 需在此对每个发现项给出独立评估,可作为一种额外的代码核验手段。
已内置支持的 AI 引擎
Same as "GreasyFork Code Safety Scanner" 脚本。
| 引擎 | 状态 |
|---|---|
| Groq | ✅ 已验证 |
| DeepSeek | ✅ 已验证 |
| Grok | ⚠️ 无法验证,功能保留(可自行定制) |
| Gemini | ✅ 已验证 |
| Qwen 🡒 Groq | ✅ 已验证 |
| ChatGPT | ⚠️ 无法实测,功能保留(可自行定制) |
| nVidia 🡒 OpenRouter | ✅ 已验证 |
| Llama 🡒 Puter.js | ✅ 已验证(无需 API Key) |
🔌 自定义 API
支持 OpenAI 兼容的自定义 /chat/completions 端点:
- 在脚本头部的
@connect块中加入你自有 API 的域名(localhost/127.0.0.1已默认支持)。 - 在 AI 模型下拉框选择「🔌 自定义 API」。
- 填写 API 地址、模型名称;「Token」输入框可随时填写/更新密钥,留空则请求时不携带 Authorization 头。
另有可勾选项:让 AI 给出被检测脚本的简短说明,并附上一段关于它如何运行的趣味结论 :-)))
调试 / 维护开关
以下开关位于脚本顶部的「用户设置」区块,直接改常量即可:
| 开关 | 说明 |
|---|---|
TEST_MODELS_AVAILABLE = false |
设 true → 在控制台 (F12) 输出 Groq / OpenRouter 等平台上各供应商可用模型列表(需已保存密钥),随后改回 false。 |
CLEAR_ALL_API_KEYS = false |
设 true → 刷新页面 → 弹出提示,清除所有已保存的 AI API 密钥,随后改回 false。 |
相比 v1.4.0 之前的显著变化
v1.7.0:评级放宽(纯累积分数分档),减少误报;AI 报告新增 ⛶ 放大查看。
v1.6.x:
@grant权限使用披露、手动输入脚本分析、WebRTC/键盘记录/屏幕截图等新检测模式、多信号加权评分、深度解码与二次扫描。v1.5.0:新增自定义 API 分支(OpenAI 兼容端点)。
v1.4.0:重构为 3 个独立可拖拽的浮窗(状态摘要 / 威胁详情 / AI 分析)+ 全局恢复按钮 FAB + 毛玻璃现代化 UI。
完整变更记录见脚本头部注释。
兼容性
| 浏览器 | 脚本管理器 |
|---|---|
| Chrome / Edge / Opera 88+ | TamperMonkey 4.18+, ScriptCat 0.9+ |
| Firefox 78+ | TamperMonkey 4.18+, GreasyMonkey 4.11+ |
| Firefox / Chrome 88+ | ViolentMonkey 2.12+(未完全测试) |
安装
- 需要先安装 Tampermonkey / Violentmonkey / ScriptCat 等油猴管理器。
- 在 GreasyFork 打开任意脚本的 CODE 页(或任何
.user.js下载页)。 - 脚本会自动开始扫描并在右下角浮窗展示结果。
Notes
- 欢迎提出如何修改代码以接入其他 AI 系统,或增加更多检测项来提升脚本质量的建议。
- 作者并非程序员,代码如有不严谨之处请勿苛责,欢迎提出建议。此脚本起初仅自用,若对他人也有用,皆大欢喜 :-)