从学习通复制文字乱码看前端版权保护

从学习通复制文字乱码看前端版权保护

💡 原文中文,约4100字,阅读约需10分钟。
📝

内容提要

文章分析了学习通答题页复制文字出现乱码的原因:其通过自定义字体将字形名称改码,例如把“下”的编码由uni4E0B改为uni5DD5,而字形数据基本不变,以此保护版权。作者使用FontTools对比思源黑体,尝试通过轮廓和边界值匹配进行解密,成功率约90%,但最终失败,并提到GitHub上已有字体映射表项目。

🔎

延伸解读

字体混淆的技术原理

学习通通过自定义字体将字形名称改码,例如把“下”的编码从uni4E0B改为uni5DD5,但字形数据基本不变。这种混淆使得复制出的文字显示为乱码,因为字符编码与字形名称的映射被故意打乱。前端版权保护常采用此类手段,增加直接复制的难度。

解密尝试与局限

作者使用FontTools对比思源黑体,尝试通过轮廓和边界值匹配进行解密。轮廓匹配成功率仅约四分之一,边界值匹配提升至90%左右,但仍有部分字体无法正确比对。学习通对涉及撇捺的字形进行了位移,导致匹配失败,说明混淆并非简单改码。

现有解决方案与启示

GitHub上已有项目提供字体映射表,但映射表来源未知。作者最终失败,但提出结合多种方法或使用Selenium截图可能更有效。这反映了前端版权保护与破解之间的持续对抗,也提醒开发者混淆技术需不断更新以应对逆向分析。

❓

Q&A

学习通答题页复制文字为什么会出现乱码?

学习通通过自定义字体将字形名称改码,例如把“下”的编码由uni4E0B改为uni5DD5,而字形数据基本不变,以此保护版权。复制时获取的是改码后的字符,因此显示乱码。

如何解密学习通字体以还原正确文字?

需要找到字形名称的映射关系。可以通过比较学习通字体和原版思源黑体的字形数据来实现,例如使用FontTools提取字形轮廓或边界值进行匹配。

使用FontTools解密学习通字体的成功率如何?

通过轮廓匹配成功率约四分之一,通过边界值(xMin、yMin、xMax、yMax)匹配成功率提升至约90%,但仍有部分字体无法比对出正确字体。

学习通字体加密的具体步骤是什么?

学习通将原版思源黑体的字形名称进行了更改,例如“下”字的编码从uni4E0B变为uni5DD5,但字形数据保持不变。因此,解密需要找到字形名称的映射关系。

除了手动解密,有没有现成的学习通字体映射表?

有,GitHub上的TellMeYourWish/chaoxing_solution_of_font_confusion项目提供了字体映射表,但两个pkl文件的来源未知。

为什么通过字形轮廓匹配学习通字体成功率不高?

因为学习通对涉及撇捺的字体进行了简单位移,导致轮廓数据不完全一致,忽略曲线后匹配成功率仅约四分之一。

🏷️

标签

➡️

继续阅读