内容简介:目前已知的几个字体反爬的网站是猫眼,汽车之家,天眼查,起点中文网等等。以前也看过这方面的文章,今天跟个老哥在交流的时候,终于实操了一把,弄懂了字体反爬是个啥玩意。下面听我慢慢道来。
大家好,我是四毛,欢迎关注我的公众号。
有什么想要交流的可以在后台第一时间私我。
今天的文章内容主要是关于字体反爬。
目前已知的几个字体反爬的网站是猫眼,汽车之家,天眼查,起点中文网等等。
以前也看过这方面的文章,今天跟个老哥在交流的时候,终于实操了一把,弄懂了字体反爬是个啥玩意。下面听我慢慢道来。
本文用到的第三方库
fontTools
1、目标网站
url = “https://su.58.com/qztech/”
2、反爬虫机制
网页上看见的
后台源代码里面的
从上面可以看出,生这个字变成了乱码,请大家特别注意箭头所指的数字。
3、解决
1、确定反爬方法
在看了别人的解析文章之后,确定采取的是 字体反爬机制 ,即网站定义了字体文件,然后进行相应的查找替换,在前端看起来,是没有任何差异的。其实从审查元素的也是可以看到的:
和大众点评的反爬差不多,都是通过css搞得。
2、寻找字体文件
以上面方框里的” customfont “为关键词搜了一下,发现就在源代码里面:
而且还有 base64 ,直接进行解密,但是解密出来的其实是乱码,这个时候其实要做的很简单,把解密后的内容保存为 .ttf 格式即可。
ttf文件: *.ttf是字体文件格式。TTF(TrueTypeFont)是Apple公司和Microsoft公司共同推出的字体文件格式,随着windows的流行,已经变成最常用的一种字体文件表示方式。
@font-face 是CSS3中的一个模块,主要是实现将自定义的Web字体嵌入到指定网页中去。
因为我们要对字体进行研究,所以必须将它打开,这里我是用的是 FontCreator ,打开以后是这个样子(其实很多字,在这里为了看的清楚,所以只截了下面的图):
很明显,每个字可以看到 字形 和 字形编码 。
观察现在箭头指的地方和前面箭头指的地方的数字是不是一样啊,没错,就是通过这种方法进行映射的。
所以我们现在的思路似乎就是在源代码里找到箭头指的数字,然后再来字体里找到后替换就行了。
恭喜你,如果你也是这么想的,那你就掉坑里了。
因为每次访问,字体字形是不变的,但字符的编码确是变化的。因此,我们需要根据每次访问, 动态解析字体文件 。
字体1:
字体2:
所以想通过写死的方式也是行不通的。
这个时候我们就要对字体文件进行更深一步的研究了。
3、研究字体文件
刚刚的.ttf文件我们是看不到内部的东西的,所以这个时候我们要对字体文件进行转换格式,将其转换为xml格式,然后来查看:
具体操作如下:
from fontTools.ttLib import TTFont font_1 = TTFont('58_font_1.ttf') font_base.saveXML('font_1.xml')
xml的格式如下:
文件很长,我只截取了一部分。
仔细的观察一下,你会发现~这俩下面的x,y,on值都是一毛一样的。所以我们的思路就是以一个已知的字体文件为基本,然后将获取到的新的字体文件的每个文字对应的x,y,on值进行比较,如果相同,那么说明新的文字对就 可以在基础字体那里找到对应的文字,有点绕,下面举个小例子。
假设: “我” 在基本字体中的名为uni1,对应的x=1,y=1,n=1新的字体文件中,一个名为uni2对应的x,y, n分别于上面的相等,那么这个时候就可以确定uni2 对应的文字为”我”。
查资料的时候,发现在特殊情况下,有时候两个字体中的文字对应的x,y不相等,但是差距都是在某一个阈值之内,处理方法差不多,只不过上面是相等,这种情况下就是要比较一下。
其实,如果你用画图 工具 按照上面的x与y值把点给连起来,你会发现,就是汉字的字形~
所以,到此总结一下:
一、将某次请求获取到的字体文件保存到本地[基本字体];
二、用软件打开后,人工的找出每一个数字对应的编码[
一定要保证顺序的正确,要不然会出事];
三、我们以后访问网页时,需要保存新字体文件;
四、用Fonttools库对基本字体与新字体进行处理,找
到新的字体与基本字体之间的映射;
五、替换;
4、上代码
微信里上代码真的太丑了,
还是算了吧,微信后台关键词“ 字体加密 ” 即可获取github地址。
看一下成果
总结
其实这个流程最大的问题就是我们人工录入的基本字体的字典数据有可能是会发生变化的,这就导致我们后面还要手动去改。
现在,如果你已经看懂了本文,那么还不快去其他几个网站试试?
如果有任何问题,欢迎交流。
以上所述就是小编给大家介绍的《今天,我终于弄懂了字体反爬是个啥玩意!》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- PHP的yield是个什么玩意(一)
- WWDC还会为大家准备些新玩意 比如Siri进化
- 面试官写了个双冒号:: ,问我这是什么语法?Java中有这玩意?
- 花点时间弄懂flex布局.
- 花点时间弄懂XSS攻击.
- 彻底弄懂 Lambda 和高阶函数
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Fortran 95/2003程序设计
中国电力出版社 / 2009-8 / 88.00元
Fortran是计算世界最早出现的高级程序设计语言之一,随着面向对象编程时代的到来,Fortran语言不仅保持了发展的步伐,而且继续在科学计算方面领先。《Fortran95/2003程序设计(第3版)》在第2~7章介绍了Fortan语言基础知识,为初学者提供入门学习资料;在第8~15章介绍了Fortran语言高级特性,为深入用好Fortran语言提供支持;在第16章讲述了Fortran语言面向对象......一起来看看 《Fortran 95/2003程序设计》 这本书的介绍吧!