针对sarasa-shuffle.woff2加密字体进行解密
本文针对的是类似于sarasa-shuffle.woff2加密字体的一个研究。
字体加密是使用Unicode编码将其映射到不同的字体显示的一种前端显示加密手段。在反爬虫中能够起到较好的效果,爬虫将只能得到sarasa字体的乱码文本。本文将以sarasa-shuffle.woff2字体为例讲解如何破解这种类型的加密字体。
1、sarasa-shuffle.woff2字体
可以使用FontCreator软件查看该字体:

字体的构成有三个部分:camp code、Unicode码以及字体本身。
比如图中这个母的Unicode是62CE,campcode是25294,这些是在sarasa-shuffle.woff2定义的。我将这个字体通过OCR代码转换,得到这样的两组对应关系:
{
...
"25285": "绚",
"25292": "剑",
"25293": "骑",
"25294": "母",
...
}
{
...
"uni62CD": "骑",
"uni62CE": "母",
"uni62D0": "羊",
"uni62D2": "者",
...
}
2、将乱码句子使用上述对应关系进行转义
下面这段代码可以用来翻译一段sarasa-shuffle加密的句子,将其翻译成非'乱码'形式的字体,Windows常用对应字体。这样就可以得到一组人眼可以分辨的正常文本。
def convert2normal(encode_str):
ret = ''
for ch in encode_str:
str_res_key = ch.encode("unicode_escape").decode().strip("\\u")
try:
value = cmap_code_word["uni" + str_res_key.upper()]
except KeyError as e:
value = ch
ret = ret + value
return ret
3、遇到类似的加密字体解决流程
使用下面这段代码去OCR识别这种字体,OCR工具是ddddocr,国内开源的一个库,识别率还可以。
def identify_word(_ttf_path):
"""识别ttf字体结果"""
font = TTFont(_ttf_path)
ocr = ddddocr.DdddOcr()
dict_data1 = {}
dict_data2 = {}
for cmap_code, glyph_name in font.getBestCmap().items():
bytes_io = BytesIO()
pil = font_to_img(cmap_code, _ttf_path)
pil.save(bytes_io, format="PNG")
word = ocr.classification(bytes_io.getvalue()) # 识别字体
dict_data1[glyph_name] = word
dict_data2[str(cmap_code)] = word
# print(cmap_code, glyph_name, word)
# with open(f"./img/{cmap_code}_{glyph_name}.png", "wb") as f:
# f.write(bytes_io.getvalue())
# 将打印出来的字典数据直接粘贴到一个新的文件中,使用"替换' ——CmapCode2word.json和GlyphName2word.json文件生成的方式
print(dict_data1)
print(dict_data2)
注意,务必使用print的方式将对应关系打印出来,再粘贴到文件中,直接文件写会出编码问题。
项目代码和编码文字对应关系已经开源在github上,https://github.com/flowerlake/sarasa-deshuffle
针对sarasa-shuffle.woff2加密字体进行解密的更多相关文章
- Java 前端加密传输后端解密以及验证码功能
目录(?)[-] 加密解密 1 前端js加密概述 2 前后端加密解密 21 引用的js加密库 22 js加密解密 23 Java端加密解密PKCS5Padding与js的Pkcs7一致 验证码 1 概 ...
- SQLPROMPT5.3对各种加密对象的解密测试
SQLPROMPT5.3对各种加密对象的解密测试 测试环境: SQL2005个人开发者版 SP4 SQLPROMPT版本:5.3.8.2 视图 CREATE VIEW aa WITH ENCRYPTI ...
- C# 与JAVA 的RSA 加密解密交互,互通,C#使用BouncyCastle来实现私钥加密,公钥解密的方法
因为C#的RSA加密解密只有公钥加密,私钥解密,没有私钥加密,公钥解密.在网上查了很久也没有很好的实现.BouncyCastle的文档少之又少.很多人可能会说,C#也是可以的,通过Biginteger ...
- des加密解密——java加密,php解密
最近在做项目中,遇到des加密解密的问题. 场景是安卓app端用des加密,php这边需要解密.之前没有接触过des这种加密解密算法,但想着肯定会有demo.因此百度,搜了代码来用.网上代码也是鱼龙混 ...
- C#DES加密,JavaDES解密,另转C#和Java实现Des完整代码
C#DES加密,JavaDES解密,另转C#和Java实现Des完整代码 转载 2014年06月17日 17:36:09 标签: DES / C#DES / JavaDES / C#和Java交叉DE ...
- php简单混淆类加密文件如何解密?
最近在整理单位购买的源码时,发现源码里好多文件都混淆加密了.虽然不解密也不影响使用,但是心里总觉得有些别扭,便试着将加密的文件解密. 首先,百度了一下,看网上是否有现成的混淆类解密工具,搜到了一个ht ...
- 解决IIS部署网站引用woff/woff2/svg字体报404错误
一.问题 在IIS上部署网站,网页引用woff字体时,浏览器报“找不到woff.woff2字体”.“404”错误,不仅预设的字体加载不出来,还影响网页加载速度. 二.原因 IIS默认设置情况下不识别. ...
- C# 利用ICSharpCode.SharpZipLib实现在线加密压缩和解密解压缩 C# 文件压缩加解密
C# 利用ICSharpCode.SharpZipLib实现在线加密压缩和解密解压缩 这里我们选用ICSharpCode.SharpZipLib这个类库来实现我们的需求. 下载地址:http:// ...
- localStorage在不同页面之间的设置值与取值--加密 localStorage与解密localStorage
在aa.vue页面 <template> <div> <h1>在aa页面设置值</h1> <button @click="shezhi& ...
- Delphi RSA加解密【 (RSA公钥加密,私钥解密)、(RSA私钥加密,公钥解密)、MD5加密、SHA加密】
作者QQ:(648437169) 点击下载➨delphi RSA加解密 [Delphi RSA加解密]支持 (RSA公钥加密,私钥解密).(RSA私钥加密,公钥解密).MD5加密.SHA1加密.SHA ...
随机推荐
- 2021-10-29:除自身以外数组的乘积。给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之
2021-10-29:除自身以外数组的乘积.给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i ...
- Selenium - 元素操作(4) - alert弹窗处理
Selenium - 元素操作 alert弹窗 Alert弹出框由于不是html的页面元素,而是JavaScript的控件:所以不能右键检查,用传统的方法去操作. 例如这种弹窗: # 获取告警弹框的文 ...
- Actor Prioritized Experience Replay
论文宗旨: 由于PER 是以TD-error成正比的非均匀概率进行抽样的,但是在AC算法中即连续动作空间中,会表现出低效果. 分析结果是:Actor不能有效的从high TD-error的transi ...
- 【论文笔记】Deeplab系列
[深度学习]总目录 DeepLab系列是谷歌团队提出的一系列语义分割算法.DeepLab v1于2014年推出,随后2017到2018年又相继推出了DeepLab v2,DeepLab v3以及Dee ...
- PHP编程与系统开发
PHP开发环境配置 一.开发环境 1.XAMPP或LNMP.WNMP,先安装widows版本的XMAPP-5.6版本(PHP 5.6) 2.VSCode:微软开发的集成开发环境(IDE) 二.安装教程 ...
- antd 在webpack.config配置主题色
虽然官方提供了craco-less 来 覆盖less-loader 提供的 less 变量,但自己也想试着修复config来配置一下 首先需要运行 yarn eject 来暴露webpack的配置 其 ...
- Request header field userRole is not allowed by Access-Control-Allow-Headers in preflight response.
今使用axios 请求数据过程中遇到同事设置的请求头,在我请求的接口中部不被允许,于是老是提示Request header field userRole is not allowed by Acces ...
- ArcMap手动新建矢量要素的方式
本文介绍在ArcGIS下属ArcMap软件中,新建点.线.面等矢量要素图层,并对新建图层的空间范围加以划定的方法. 首先,在右侧"Catalog"栏中选择需要存放新建立矢量 ...
- QT 绘制波形图、频谱图、瀑布图、星座图、眼图、语图
说明 最近在学中频信号处理的一些东西,顺便用 QT 写了一个小工具,可以显示信号的时域波形图.幅度谱.功率谱.二次方谱.四次方谱.八次方谱.瞬时包络.瞬时频率.瞬时相位.非线性瞬时相位.瞬时幅度直方图 ...
- /etc/netplan/network-manager-all.yaml 配置服务器ip
本文为博主原创,转载请注明出处: /etc/netplan 是用于配置 Ubuntu 系统网络接口的目录.在 Ubuntu 中,网络配置的默认工具为 Netplan,而 /etc/netplan 则 ...