针对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 ...
随机推荐
- Rocky 9 Linux 软件安装 neovim 和 git
目录 编辑器 Neovim 版本控制工具 Git RHEL 系列软件安装介绍 软件安装包简介 源码包安装 rpm包安装 yum & dnf 在线安装 脚本安装包 rockyLinux 介绍软件 ...
- MultiBoot SPI
对于7系列FPGA来说,计算器件启动时间按照以下公式: Config time = Bitstream size / (Config clk freq * Config interface width ...
- SpringMVC 简单的开始
SpringMVC简单的开始 利用Spring模板配置写一个web项目. 1.核心配置文件(模板代码) <?xml version="1.0" encoding=" ...
- Elasticsearch 之 join 关联查询及使用场景
在Elasticsearch这样的分布式系统中执行类似SQL的join连接是代价是比较大的,然而,Elasticsearch却给我们提供了基于水平扩展的两种连接形式 .这句话摘自Elasticsear ...
- Python asyncio之协程学习总结
实践环境 Python 3.6.2 什么是协程 协程(Coroutine)一种电脑程序组件,该程序组件通过允许暂停和恢复任务,为非抢占式多任务生成子程序.协程也可以简单理解为协作的程序,通过协同多任务 ...
- iOS网络数据指标收集
在平时开发中有时候需要收集网络不同阶段性能数据来分析网络情况,下面总结了2种收集方式. 1.通过NSURLSession提供的代理方法收集 2.通过NSURLProtocol做统一网络请求拦截收集 通 ...
- Nature 重大发现:癌基因竟不在染色体上?第一作者吴思涵亲身解读!
编辑|李丽 记者|布德鸟 图片提供|吴思涵 今日凌晨,美国加州大学圣地亚哥分校 Ludwig 癌症研究所的 Paul Mischel 教授领导的研究团队发现, 大量的癌基因并不在染色体上,而是会从染色 ...
- mimikatz
mimikatz 来源:https://github.com/gentilkiwi/mimikatz Mimikatz 是由法国人 Benjamin Delpy 编写的 Windows 密码提取工具, ...
- 常量接口 vs 常量类 vs 枚举区别
把常量定义在接口里与类里都能通过编译,那2者到底有什么区别呢? 那个更合理? 常量接口 public interface ConstInterfaceA { public static final S ...
- 强国杯南部西部赛区分区晋级赛WP
Misc 空白文件 解压的文件,通过kali strings 查看到base64加密,把%7B换成'{',%7D换成'}' 迷惑的时间 导出3.jpg原始数据信息 去掉没用的头部信息,得到3.jpg图 ...