雨课堂字体混淆反混淆

建立於 7 小時前
更新於 7 小時前
实时解析雨课堂字体混淆,使用户可以复制到所显示文字
#雨课堂
#字体反混淆
#教育平台
總安裝量
2
今日新增
+2
使用者評分
- / 5.0 (0)
目前版本
1.0.0
腳本詳情
適用網站
雨课堂字体混淆反混淆工具,通过字形哈希映射还原混淆码点,使用户可复制原始文本。

雨课堂字体混淆反混淆

UserScript
UserScript
实时解析雨课堂字体混淆,还原原始文字的浏览器用户脚本。

GLM-5.1DeepSeek-V4-Pro 在 AI 编辑器 Trae CN 中编写。

背景

雨课堂使用字体混淆技术保护页面文字:将汉字的 Unicode 码点替换为乱码码点,同时提供混淆字体 exam_font_*.ttf,使乱码码点渲染出正确字形。每次刷新页面会随机使用不同的混淆字体,对应不同的码点映射。
反混淆流程:

  1. 预生成字形哈希映射表:基于 Source Han Sans SC VF 2.004R 基准字体,对每个 CJK 字形计算 SHA-1 前 8 字节哈希,建立 hash → 原码点 映射
  2. 实时解析混淆字体:截获页面中的 exam_font_*.ttf,对每个 CJK 码点的字形计算哈希,查映射表还原原码点
  3. 替换文本 + 禁用混淆字体:将 DOM 中的混淆码点替换为原码点,并禁用混淆字体的 @font-face 规则使文本回退到系统字体正常显示
    方法来自作者 SomeBottle-《探探学习平台的字体混淆》

功能

  • 反混淆:将页面中混淆后的文字替换为原始文字,复制即可得到正确文本
  • 禁用混淆字体:禁用混淆字体的 @font-face 规则,使文本回退到系统字体正常显示
  • 两个功能可独立开关,无需刷新页面
  • 开关状态自动持久化,刷新后保持上次设置
  • 支持 SPA 路由切换,自动处理动态加载内容

使用

脚本加载后,通过脚本管理器菜单控制:

  • 点击浏览器工具栏脚本管理器图标 → 选择对应菜单项即可切换
  • 反混淆:控制是否将混淆码点替换为原始码点
  • 禁用混淆字体:控制是否禁用混淆字体的 @font-face 规则
  • 诊断:下载字体调试报告,用于排查问题

技术细节

  • 映射表采用二进制格式(8 字节 SHA-1 哈希 + 3 字节码点偏移)→ gzip → base64 内嵌脚本,约 410 KB
  • 使用浏览器原生 DecompressionStream API 解压,无需额外依赖
  • 使用 crypto.subtle.digest 计算 SHA-1 哈希
  • 使用 opentype.js 解析字体
  • MutationObserver 监听 DOM 变化,处理动态加载的内容
  • 拦截 history.pushState / replaceStatepopstate 事件,适配 SPA 路由变化

免责声明

本项目仅供学习、研究和技术交流使用,不得用于任何商业用途或非法目的。
使用者应遵守相关平台的服务条款和适用法律法规。仓库持有者不承担任何因使用本脚本产生的任何直接或间接责任。
本项目不鼓励、不支持、不协助任何形式的学术不端行为。

License

MIT