1. 什么是字体加密
简单的说,字体加密即为所复制非所得
。如下图,我们复制186.37万字
得到𘠜𘠚𘠗𘠛𘠖𘠔万字
。那么这里的186.37这个数字就被加密了,用到的技术为字体加密。
网址:https://book.qidian.com/info/1013562540
字体加密所用范围也很广,如大众点评、猫眼、起点中文网、landchian等。如果我们直接抓取页面源代码,得到的则为一堆无意义的数据。
那么如何把这些无意义的数据解密成他原本的含义呢,下面我将进行详细的讲解。
2. 基本知识
2.1 字体加密原理
我们所看到的文字,都有对应的字体文件,字体文件描述着每个文字如何绘制。比如下图:
不同的字体文件,绘制出来的爬虫
二字形状不一样。这就好比画画一样,不同的人画猫,有的人画出来的是猫,有人画出来的却是虎。懂了这点,那么下图的字体加密就不难理解了:
上图我们看到的土地基本概况
其实是冋块基鴻戥况
通过字体文件绘制出来的,即原本真实的文字应为冋块基鴻戥况
。不信你可以去复制这几个文字,然后粘贴下看看,打开原网页。就好比我们看到的画是虎,其实画画那人画的对象是猫。
总结下:我们所看到的文字,是由字体文件绘制出来的,正常都是将这个文字原本字形绘制出来。但遇到字体反爬这种不正经的字体文件,他把文字男
绘制成人妖
这种事都干得出来。
2.2 字体文件刨析
我们先找到这个网页所用到的字体,并下载下来,用以下几行代码来解析字体保存为xml
from fontTools.ttLib import TTFont
font = TTFont("vJ3z6kV9Oo0MYQNQhaEWLTMF54ysPI1p.woff")
font.saveXML("vJ3z6kV9Oo0MYQNQhaEWLTMF54ysPI1p.xml")
这里解释下woff字体
WOFF(Web开发字体格式)是一种专门为了Web而设计的字体格式标准,实际上是对于TrueType/OpenType等字体格式的封装,每个字体文件中含有字体以及针对字体的元数据(Metadata),字体文件被压缩,以便于网络传输。
下面分析下这个xml文件:
GlyphOrder 节点下为该字体文件中所包含的文字
TTGlyph 节点下,name为所绘制的文字,contour节点为字型信息。
xMin、xMax、yMin、yMax 为这个文字所在的横纵坐标,如下图:
pt 中的 x, y 为关键点的坐标,on的值 1表示直线,0表示弧形。为了验证on表达的含义,亲自拿标准的微软雅黑用文字十
和八
做了验证,如下:
文字八
,因为八是有弧的,所以on的值有1有0
文字十
,on均为1
name 为文字名,一个表识。标准字体的name即为所绘文字的unicode16进制编码。非标准字体name的值是什么,看他心情。我们可以通过如下方法将文字与16进制相互转换。
# 转16进制
>>> hex(ord('十'))
'0x5341'
转回文字
>>> u'\u5341'
'十'
2.3 破解字体加密
此方法适用于知道标准字体是什么
2.3.1 思路
看完字体文件刨析之后,我们大致对字体文件有所了解了。一个文字张什么样子是由x、y、on来决定的。那么当我们拿到一个非标准字体中某个文字的x、y、on后,在对应的标准字体文件中寻找最相近的x、y、on以及其表达的文字,这样所找到的文字即为解密后的文字。
比如下面这个图,我们拿土地基本情况
中的地来举例,从源码中看出地
对应的文字为冋
从源码中还发现了标准字体为微软雅黑
分别将网页所用的加密字体及标准的微软雅黑字体保存为xml,然后分别在微软雅黑中取地
及在加密字体中取冋
的字型,对比如下
-
先计算下
地
与冋
的16进制>>> hex(ord('地')) '0x5730' >>> hex(ord('冋')) '0x518b'
-
字形对比
观察字形可以看到标准字体中的
地
与加密字体中的冋
的字型是非常相近的。x,y的缩放比例相同,on的值更是完全的一致。这是因为这俩字型绘制的都是同一个文字地
。也就是为什么网页的源码中是冋
,而我们在页面中看到的文字是地
2.3.2 付出行动
我们已经有了在标准字体文件中寻找最相近字型的思路,那么下面讲解如何寻找!
-
解析标准字体文件,将文字与字型保存为如下关系
不同文字的on可能相同,因此on的值为list类型,下面保存了多个相同on值的文字及字型我训练完的字体文件如下
-
解析加密的字体文件,将每个文字、on、及xy对应关系取出来。然后用on值在上面的字典中快速取出一组on值相同的字型(大多数只有一个),然后再在这组字型中匹配一个最相近的字型,得出对应的文字即可
匹配最相近的字型方法:遍历候选字型,计算每个字型xy的特征与源word xy特征相除后的方差(相除是因为 同一字体xy是成比例缩放的),然后取方差最小的字型。
总结
以上分别介绍了什么是字体加密、加密原理、字体文件刨析、以及破解思路。破解思路适用于已知标准字体的情况,对于未知标准字体的字体反爬,下期讲解。
下期分享预告
未知标准字体的字体反爬破解思路
了解更多
欢迎加入知识星球 https://t.zsxq.com/eEmAeae
本星球专注于爬虫技术分享,通过一些案例详细讲解爬虫中遇到的问题以及解决手段。涉及的知识包括但不限于 爬虫框架刨析、js逆向、中间人、selenium 、pyppeteer、Android 逆向!期待您的加入,和我们一起探讨爬虫技术,拓展爬虫思维!