字体加密破解技术分享-01

1. 什么是字体加密

简单的说,字体加密即为所复制非所得。如下图,我们复制186.37万字得到𘠜𘠚𘠗𘠛𘠖𘠔万字。那么这里的186.37这个数字就被加密了,用到的技术为字体加密。

网址:https://book.qidian.com/info/1013562540
-w1194

字体加密所用范围也很广,如大众点评、猫眼、起点中文网、landchian等。如果我们直接抓取页面源代码,得到的则为一堆无意义的数据。
那么如何把这些无意义的数据解密成他原本的含义呢,下面我将进行详细的讲解。

2. 基本知识

2.1 字体加密原理

我们所看到的文字,都有对应的字体文件,字体文件描述着每个文字如何绘制。比如下图:

-w244
-w260

不同的字体文件,绘制出来的爬虫二字形状不一样。这就好比画画一样,不同的人画猫,有的人画出来的是猫,有人画出来的却是虎。懂了这点,那么下图的字体加密就不难理解了:

-w1374

上图我们看到的土地基本概况 其实是冋块基鴻戥况通过字体文件绘制出来的,即原本真实的文字应为冋块基鴻戥况。不信你可以去复制这几个文字,然后粘贴下看看,打开原网页。就好比我们看到的画是虎,其实画画那人画的对象是猫。

总结下:我们所看到的文字,是由字体文件绘制出来的,正常都是将这个文字原本字形绘制出来。但遇到字体反爬这种不正经的字体文件,他把文字绘制成人妖这种事都干得出来。

2.2 字体文件刨析

-w1249

我们先找到这个网页所用到的字体,并下载下来,用以下几行代码来解析字体保存为xml

from fontTools.ttLib import TTFont

font = TTFont("vJ3z6kV9Oo0MYQNQhaEWLTMF54ysPI1p.woff")
font.saveXML("vJ3z6kV9Oo0MYQNQhaEWLTMF54ysPI1p.xml")

这里解释下woff字体

WOFF(Web开发字体格式)是一种专门为了Web而设计的字体格式标准,实际上是对于TrueType/OpenType等字体格式的封装,每个字体文件中含有字体以及针对字体的元数据(Metadata),字体文件被压缩,以便于网络传输。

下面分析下这个xml文件:

GlyphOrder 节点下为该字体文件中所包含的文字
-w670

TTGlyph 节点下,name为所绘制的文字,contour节点为字型信息。
-w616

xMin、xMax、yMin、yMax 为这个文字所在的横纵坐标,如下图:
-w656

pt 中的 x, y 为关键点的坐标,on的值 1表示直线,0表示弧形。为了验证on表达的含义,亲自拿标准的微软雅黑用文字做了验证,如下:

文字,因为八是有弧的,所以on的值有1有0
-w678

文字,on均为1
-w588

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以及其表达的文字,这样所找到的文字即为解密后的文字

比如下面这个图,我们拿土地基本情况中的地来举例,从源码中看出对应的文字为
-w1374
从源码中还发现了标准字体为微软雅黑
-w694

分别将网页所用的加密字体及标准的微软雅黑字体保存为xml,然后分别在微软雅黑中取及在加密字体中取的字型,对比如下

  1. 先计算下的16进制

     >>> hex(ord('地'))
     '0x5730'
     >>> hex(ord('冋'))
     '0x518b'
    
  2. 字形对比

    -w1365

    观察字形可以看到标准字体中的与加密字体中的的字型是非常相近的。x,y的缩放比例相同,on的值更是完全的一致。这是因为这俩字型绘制的都是同一个文字。也就是为什么网页的源码中是,而我们在页面中看到的文字是

2.3.2 付出行动

我们已经有了在标准字体文件中寻找最相近字型的思路,那么下面讲解如何寻找!

  1. 解析标准字体文件,将文字与字型保存为如下关系
    -w471
    不同文字的on可能相同,因此on的值为list类型,下面保存了多个相同on值的文字及字型

    我训练完的字体文件如下
    -w1196

  2. 解析加密的字体文件,将每个文字、on、及xy对应关系取出来。然后用on值在上面的字典中快速取出一组on值相同的字型(大多数只有一个),然后再在这组字型中匹配一个最相近的字型,得出对应的文字即可

    匹配最相近的字型方法:遍历候选字型,计算每个字型xy的特征与源word xy特征相除后的方差(相除是因为 同一字体xy是成比例缩放的),然后取方差最小的字型。

总结

以上分别介绍了什么是字体加密、加密原理、字体文件刨析、以及破解思路。破解思路适用于已知标准字体的情况,对于未知标准字体的字体反爬,下期讲解。

下期分享预告

未知标准字体的字体反爬破解思路

了解更多

欢迎加入知识星球 https://t.zsxq.com/eEmAeae

知识星球

本星球专注于爬虫技术分享,通过一些案例详细讲解爬虫中遇到的问题以及解决手段。涉及的知识包括但不限于 爬虫框架刨析、js逆向、中间人、selenium 、pyppeteer、Android 逆向!期待您的加入,和我们一起探讨爬虫技术,拓展爬虫思维!

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值