Skip to content

About

检测上海财经大学统一认证(login.sufe.edu.cn)登录页,自动识别字符验证码并登录的 Chrome 扩展(CRNN 离线识别 · 失败无间隔重试 · 像素风 UI · 蓝色霓虹)。仅限本人账号的个人自动化使用。

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Repository files navigation

上财自动认证 (sufe-auto-auth)

检测到上海财经大学统一认证登录页(login.sufe.edu.cn)时,自动识别字符验证码并登录,成功后自动跳回原业务系统。原「上财自动滑块」(v1–v5)——服务端已改用字符验证码,滑块能力保留为兜底。

仅供本人账号的个人自动化使用。请控制请求频率,遵守学校相关规定;请勿用于他人账号或任何高频、批量场景。

功能特性

  • 自动检测上财登录页(SPA 渲染完成后触发),右上角浮窗倒计时 3 秒后自动登录;同时适配 WebVPN 镜像站 login-sufe-edu-cn-s.webvpn.sufe.edu.cn(API 自动改走当前源,校外 WebVPN 环境同样可用);在表单里点击/打字即取消(只认 pointerdown/input,关闭浏览器翻译弹窗等只会引起 focusin 的场景不会误取消)
  • 秒登录:倒计时期间后台并行「拉验证码图 → CRNN 预识别 → 预取登录配置」(无感进行,浮窗不显示技术提示),倒计时结束即刻提交
  • 字符验证码 CRNN 离线识别:7 层 Conv + 2 层 BiGRU + CTC,纯 JS 前向(无 WASM、不受页面 CSP 影响),80×34 输入,浏览器内约 1s
  • 识别失败无间隔自动重试:识别未通过/置信度不足 → 立即换图再识别(不等待),连试 10 次仍失败才转人工输入浮窗;重试页为像素大数字特效(与倒计时同款切换动画)
  • 像素风 UI:英文/数字/字符为 Press Start 2P 像素体,中文为粗体思源黑;内容脚本内字体经 FontFace + chrome.runtime.getURL 注入(内容脚本 CSS 的相对 url() 在页面上下文解析不到扩展资源,这是 v5 及之前像素字体不生效的根因)
  • 流动 ASCII 装饰背景:sufe-fx.js 用 canvas 以 60fps 渲染——全面板极暗字符雨(@!%# 等缓慢下落、边落边变字),右下角为由流动字符组成的 SUFE 字样(加粗、无眩光、低明度,纯装饰不抢前景),prefers-reduced-motion 时降级为静态帧;浮窗与扩展弹窗共用
  • 蓝色像素锁图标:16/48/128 全尺寸重绘(深蓝渐变底 · 亮蓝锁梁 · 蓝色锁体 · 浅蓝钥匙孔)
  • 蓝金互补配色:暖调灰金玻璃面板 + 蓝色霓虹(文字/按钮/光效/扫描线/图标),对比度按可读性校准
  • 密码使用服务端下发的 RSA 公钥(PKCS#1 v1.5)加密后传输——浏览器 WebCrypto 不支持 v1.5 填充,扩展内置了一个无依赖的 BigInt 实现(sufe-crypto.js)
  • 滑块兜底(服务端切回滑块时自动启用):经典分割严格优先(~2ms、误差 0px),CNN 整图定位兜底(4.9 万参数,回归可通过窗口中心),盲试候选保底;同一 token 连续校验
  • 浮窗滚动显示每轮识别/登录结果;弹窗提供「登录」(当前页直接执行,免刷新注入)与「测试验证码」「测试滑块」(不提交账号)、密码显隐、历史统计
  • 闭环自检:login.sufe.edu.cn/login/#sufe-test-vcode / #sufe-test-slider 只跑识别/定位并在浮窗显示结果,不触碰账号密码
  • 密码仅保存在本机 chrome.storage.local,不上传、不进浏览器同步;扩展只向 login.sufe.edu.cn(及其 WebVPN 镜像源)提交数据
  • 登录成功后 20 秒内不重复触发(防跳转异常导致自动登录死循环)

安装(开发者模式加载)

  1. 打开 Chrome,地址栏输入 chrome://extensions/
  2. 右上角打开「开发者模式」
  3. 点左上角「加载已解压的扩展程序」,选择本仓库克隆下来的 sufe-auto-auth 文件夹(或从 Releases 下载最新 sufe-auto-auth-vX.Y.Z.zip 解压后选择该文件夹)
  4. 点击工具栏扩展图标,填写学号、密码,勾选自动登录,点「保存」

日常无需任何操作:被业务系统跳到登录页时会自动处理并跳回。从 v5 升级:扩展 ID/存储键不变,覆盖加载后学号密码仍在。

工作原理

页面加载 → 3s 倒计时 ‖ 后台并行:GET getRandcode → CRNN 预识别(~1s)→ GET queryAllValid(RSA 公钥 + ticket)
倒计时结束 → queryUserValid 确定验证类型
  ├─ vcode:预识别结果直接 doLogin;未通过 → 换图再识别(无间隔,×10)→ 仍失败转人工
  ├─ slidercaptcha:分割/CNN 定位 → sliderCaptcha check → doLogin
  └─ 无验证:直接 doLogin
POST /api/v3/auth/doLogin → 学号 + RSA 加密密码 + vcode → 会话 Cookie → 跳转业务系统

字符验证码识别模型:输入 80×34×3(v/127.5-1 归一化)→ 7×[Conv3×3+ReLU(BN 已折叠),第 2/4/6 层后池化] → 高度均值 → 2 层 BiGRU(hidden 192) → CTC greedy 解码;model.bin(8.7MB)由后台 Service Worker 懒加载,页面进入时即预热(WARMUP)。

滑块坐标约定来自登录页前端源码:X = 拖动左偏移 × imgScale(背景图自然像素坐标);可通过窗口实测恒为 缺口左缘−5 … 左缘−1(中心 = 左缘−3,±2 余量)。

模型与训练(lab/ 目录,随仓库提供,不进扩展包)

  • 采集:harvest2.py 拉取真实验证码并用「缺口 = 平坦纯白连通块」给出精确标签(样本不入库,可重新采集)
  • 训练:train2.py / train2_torch.py(numpy 手写反向 / torch,上财匡时一号算力平台 A40);cnn.py 层实现,resize.py 与 JS 等价的 area 缩放
  • 校验:gradcheck.py 数值梯度校验;parity*.py/js JS↔numpy 前向一致性;live_eval2.py 在线闭环评测
  • 打包发布:build_dist.py 生成 zip+crx;release.py 建 GitHub Release 并传附件

配置调整

常量集中在 content.js 顶部(AUTO_DELAY_MS 倒计时 / VCODE_MAX_AUTO_TRIES 自动重试上限 / VCODE_CONF_MIN 置信度阈值 / MAX_ROUNDS 等)。修改后在 chrome://extensions 中点扩展的「重新加载」即可生效。

排障

现象 处理
浮窗没出现 确认地址栏是 login.sufe.edu.cn 且页面已渲染出登录框(SPA 最长等待 20 秒)
「学号或密码错误(SSO10002)」 在扩展弹窗中更正账号信息
反复进入重试页后转人工 多为验证码难度突变或风控收紧期;用 #sufe-test-vcode 自检识别置信度
滑块兜底显示方式=blind/多轮未通过 多为缺口样式变化或风控收紧期;用 #sufe-test-slider 自检 CNN/分割坐标
登录成功但页面没跳走 浮窗会提示,手动刷新或重新进入业务系统即可

更新日志

v6.0.0 (2026-10-24)

  • 更名:上财自动滑块 → 上财自动认证(仓库 sufe-auto-slider → sufe-auto-auth);服务端已改用字符验证码,滑块保留为兜底
  • SUFE 流动 ASCII 背景重写:旧版为 <span> 逐字符 65ms 定时器(≈15fps、整体透明度 0.2,SUFE 字样昏暗且卡顿);新版 sufe-fx.js canvas 60fps——全面板极暗字符雨(@!%# 缓慢下落、边落边变字)+ 右上角流动字符组成的低明度 SUFE 装饰字样
  • 图标重绘:蓝色像素风挂锁(深蓝渐变底 · 亮蓝锁梁 · 浅蓝钥匙孔),16/48/128 全尺寸
  • 像素字体修复:内容脚本 CSS 中的相对 url("fonts/…") 在页面上下文解析不到扩展资源,像素字体从未生效;现于 content.js 用 FontFace + chrome.runtime.getURL() 注入(fonts/* 已在 web_accessible_resources),英文/数字为 Press Start 2P,中文维持粗体思源黑
  • 倒计时 2s → 3s,倒计时期间后台并行预拉图 + CRNN 预识别 + 预取配置,倒计时结束即提交——秒登录;预识别失败自动重试一次(浮窗保持简洁,不显示后台过程提示)
  • 验证码识别自动重试:识别未通过或置信度不足 → 立即换图重试(无等待),连试 10 次仍失败才转人工输入(旧版连续 2 次即转人工);人工输入错误自动换图重输
  • 重试页像素化:重试序号以像素大数字显示(44px,与倒计时同款 digit-in/out 切换特效 + 脉冲辉光 + 不确定态流光进度条)
  • 配色改版:绿色 → 蓝色霓虹(#79b8ff / #4d8dff / #d0e6ff),面板底色采用互补的暖调灰金(rgba(52,46,33)→rgba(30,26,18) 渐变 + 淡金描边),去除深蓝黑的脏灰感
  • lab/build_dist.py 补齐 v5 起缺失的打包文件(sufe-crnn.js、model.json/bin、fonts/),并随仓库更名更新产物名

v5.0.0 (2026-10-23)

  • 服务端改用字符验证码:新增 CRNN 离线识别(7 层 Conv + 2 层 BiGRU + CTC,纯 JS,model.bin 8.7MB Service Worker 懒加载);低置信度浮窗人工输入;滑块流程保留为兜底
  • 倒计时期间后台预取验证码图与登录配置;浮窗/弹窗像素风改版(Press Start 2P + 思源黑子集)

v4.0.0 (2026-10-11)

  • 架构反转:分割优先、CNN 兜底。实测(留出集 76 张)经典分割严格版 75/76 可信、误差 0.000px、耗时 2ms,而 CNN 是 0.46px / 1.76s(慢 515×)——改为「严格分割 → 宽松分割 → CNN → 盲试」懒执行候选流
  • 严格分割判据来自数据:缺口 bbox 恒为 96×93、面积 ~5590(382 张中 99% 一致),要求「形状/面积合规且全场唯一」

v3.0.0 (2026-10-11)

  • 模型换代:整图输入。背景图整体 area-resize 到 256×128(4×[Conv3×3+ReLU → 高度 MaxPool] → 1×1 → 256 列 softmax → soft-argmax),直接回归「可通过窗口中心」;训练在上财匡时一号算力平台(A40)完成;留出集 MAE 0.47px、≤2px 99%
  • 交互改进:只认 pointerdown/input 取消倒计时、弹窗「登录」免刷新注入(scripting 权限)、密码显隐、成功统计、SSO10001 提示
  • 致谢:整图输入与部分交互改进的思路来自 Yanzhe Lu(上财人工智能专业)的社区 v2.1.0 分支

v2.0.0 (2026-10-11)

  • 缺口识别换用轻量全卷积 CNN(缺口横带输入,约 4.4k 参数,纯 JS 前向);候选梯队 + 同 token 连续校验;闭环自检入口 #sufe-test-slider;开源训练管线 lab/

v1.0.0 (2026-10-08)

  • 首个版本:检测登录页后自动完成滑块验证并登录(RSA 加密密码;候选 X 盲试 + 多轮重试)

致谢

  • Yanzhe Lu(上海财经大学,人工智能专业):提出并实现了「卷积 + 池化 CNN 定位缺口」的整图输入方案(其社区 v2.1.0 分支:整图 resize → 4×[Conv3×3+ReLU → MaxPool] → 1×1 头 → 列热图 → soft-argmax,并配套网格探测、免刷新注入等交互改进)。本仓库 v3 的整图 CNN 即在这一思路基础上重新实现并重训,该模型在 v4+ 中继续作为滑块兜底存在,特此致谢。

贡献与反馈

  • 提交 Issue/PR 前请先在 chrome://extensions 中点「重新加载」复现问题
  • 请勿在 Issue、截图或日志中粘贴学号、密码、会话 Cookie 等凭据
  • 登录页接口若改版(字段/路径变化),欢迎带上报错信息提 PR

License

MIT

About

检测上海财经大学统一认证(login.sufe.edu.cn)登录页,自动识别字符验证码并登录的 Chrome 扩展(CRNN 离线识别 · 失败无间隔重试 · 像素风 UI · 蓝色霓虹)。仅限本人账号的个人自动化使用。

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages