python 简单字体解密

目录

前言

分析过程

①查看情况,可以看见字体是加密过的

②查看网页源代码

③解码

④保存成woff文件

⑤查看woff文件

⑥使用TTFont模块将之前的woff文件保存成xml文件

 ⑦查看xml文件信息

⑦找到规律或者是联系

 ⑧构造映射关系

 ⑨获取html网页信息,将加密内容一一替换

具体实现细节 

①bese64解码

 ②使用TTFont保存成xml文件

  ③获取每个字体的unicode编码

④获取四个坐标

尾声


前言

这篇文章主要是讲解简单的字体解密,由于信息敏感,就不透露是哪个网站了,不然过不了审


分析过程

①查看情况,可以看见字体是加密过的

②查看网页源代码

如果在网页中看的了这样一些内容,那么就需要注意,这个信息我们后面可能需要用到,我用红色框框框住的是一些比较重要的信息,绿色箭头指向的是我们所需要使用的内容,结尾不需要)

③解码

因为是base64编码的,那么我们需要对应的解码,对谁解码呢,绿色箭头所指向的那部分内容。

④保存成woff文件

就是正常的二进制格式保存,怎么保存图片的就怎么保存它,只不过后缀名要改成.woff。你放心,PyCharm应该看不了woff文件

⑤查看woff文件

PyCharm看不了woff文件,我们只能想办法,使用FontCreator软件查看或者是使用百度字体编辑器(FontEditor (kekee000.github.io))都可以

查看出来的效果可能是这样的

需要格外注意一下下面的uniE016这样的信息,后面要用到。

⑥使用TTFont模块将之前的woff文件保存成xml文件

没有的先安装

pip install fontTools

 ⑦查看xml文件信息

这部分信息与之前woff文件的底部信息是一一对应的,简单理解就是这个字符编码对应着这个字。但事情远没有那么简单,不出意外的话,这些unicode其实是动态的,简单来说就是你在来一次,这些字所对应的编码就会随之改变,但依然是一一对应的。

举个例子,这次1对应的unicode编码是uniE016,下一次执行1对应的unicode编码是uniE018。你想要靠识别unicode编码来识别字体是不太可能的。

⑦找到规律或者是联系

它们之间肯定是有联系的,不然网站自己怎么使用,一般来讲,构成桥梁的都是静态内容。

我爬取的这个网站的规则是这样的

这四个坐标值是关键,不管unicode编码怎么变,下面的xy值怎们变,这四个坐标值永远不变,这就是桥梁!

 ⑧构造映射关系

①首先获取每个字体的unicode编码,我们需要这些编码去获取对应的坐标

②构建坐标与字的映射关系

我使用了比较笨的方法,就是手动的构建字典

例如

data_map = {
	(0, -255, 1996, 1537): '下',
	(0, -303, 2022, 1581): '硕',
	(0, -259, 2020, 1691): '张',
}

③构建unicode编码与字的映射关系,以坐标为桥梁

例如这样的,因为我要爬取的网页源码上显示的加密内容有所不同,它将uni替换成了&#x还在最后加了;号,要示情况而定

映射关系有了,其实就差不多了

 ⑨获取html网页信息,将加密内容一一替换


具体实现细节 

①bese64解码

import base64

# 解码
decryptContent = base64.b64decode('加密内容')

 ②使用TTFont保存成xml文件

from fontTools.ttLib import TTFont

# 保存成xml文件
fonts = TTFont('字体库.woff')
fontLibraryXML_path = '字体库.xml'
fonts.saveXML(fontLibraryXML_path)

  ③获取每个字体的unicode编码

# 使用内存读写,更方便
tf = TTFont(BytesIO(decryptContent))
# 获取按字母顺序排序的字形名称列表。
print(tf.getGlyphNames())

打印出来的结果是类似这样的

④获取四个坐标

coordinate = fonts['glyf'][uniE016].xMin, fonts['glyf'][uniE016].yMin, fonts['glyf'][uniE016].xMax, fonts['glyf'][uniE016].yMax

 最后一一替换就好了

应该差不多,其他的应该没有太大的问题了 


尾声

如果这篇文章对您有所帮助,那么这篇文章就有意义! 


感谢您的观看!

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值