记录一次字体反爬 python

前言

最近在网上冲浪,看到有喜欢的网页内容,开开心心的复制内容打算发给我的好兄弟看,但是一看发出去的内容和网站上的内容不一样,当时我就奇了怪了,怎么回事呢。在经过半天的调研时间,我发现原来这一类技术叫做字体反爬。有了目标那么就明白了,直接分析是个什么情况

出带着十六岁化女儿发作寺庙祈福。 # 复制的内容
我带着十六岁的女儿来到寺庙祈福。 # 网站显示内容

过程

很快啊,我就在网页源代码上看到了特别的东西

iLZdbU.png

仔细一看 font-face 元素。这是什么呢?

问的好!上百度!

@ font-face的是一个CSS规则,允许你输入自己的字体出现在网站上,即使在特定的字体在访问者的计算机上没有安装。这条规则最重要的是,它为设计师打开了一个全新的世界。您可以使用任何你喜欢的字体。

简单来讲,就是这个css元素来修改了网站上的显示内容和原内容。

来看看font-face里面都有什么吧

  1. font-family # 不管
  2. font-display # 不管
  3. font-weufgt # 不管
  4. font-style # 不管
  5. src # 关键内容

前四个都是无关紧要的,最后一个才是最重要的。那么它又是什么呢?

问的好!

它是一个网络链接,指向外部的网络链接。是一个字体库文件,在这个字体库文件里能够找到隐藏的文字和显示的文字

当然,看网页源代码未免也太枯燥了,抓包也能够达到一样的效果。在前言提到这是关于字体反爬,那么我们选择font找到文件下载到本地也是可以的,具体步骤请看图

iLZPiQ.png

很快啊,我就下载过来了。但是怎么打开呢?

问的好!

下载一个FontCreator能够打开,当然,用vscode安装一些插件也能够直接打开(不愧是最强的vscode啊

这里就用FontCreator 打开了,请看图

iLZYCX.png

是不是感觉无从下手?

我也是这么想的,那就先放在这里了。先吃饭

很快啊,过了两个半小时,我脑子突然灵光一闪,文字的code-points对应的是什么呢?

iLi4VN.png

又是两个半小时,我知道了!

code-points对应的是文字的映射内容!

打个比方,以上图为例,文字它的code-points是什么呢?

没错,是$7406

这又代表什么呢?

我们用FontCreator来搜索一下

iLiCUa.png

结果是。这代表着在网站上显示的文字和审查元素里的文字分别理。

懂了这个字体后那么就好办多了,能够用python来批量获取原始文字和映射文字了

实现

模块 TTFont

安装:TTFont

导入:from fontTools.ttLib import TTFont

一个小函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def font():
dict_translate = {}
# 加载字体文件:
font = TTFont('1.woff') # 需自己下载或者正则匹配字体文件
# 获取字体编码:
font_map = font.getBestCmap()
# 获取字体编码对应的字体:
font_map = {hex(k): v for k, v in font_map.items()}
for key, value in font_map.items():
# print(key, value)
key = chr(int(key, 16)) # 把得到的十六进制转换为中文字符
value = value.replace('uni', '\\u')
values = value.encode().decode('unicode_escape') # unicode转中文
dict_translate[key] = values
return dict_translate

把得到的映射字典再作为返回值甩到另外一个函数里

1
2
3
4
5
def translate_strs(font_dict, strs): # 参数为上一个函数的字典和需要翻译的内容
for i in range(0, len(strs)):
if strs[i] in font_dict.keys():
strs = strs.replace(strs[i], font_dict[strs[i]]) # 进行替换
print(strs)

iLimoF.png

那么到这里也就差不多结束了,剩下的就是python的工作了,我就又可以继续网上冲浪了

结言

字体反爬从来就不是一个很难的内容,相比验证码,那真是小巫见大巫。而随着反爬和爬虫的高速发展使,很有可能今天的内容对于明天就是无用功,一直学习下去才能够不被淘汰。

最后,相关类型的网站有很多,在这里就不提供了。我只提供思路,代码也不能对所有的网页都生效。不过,持之以恒的学习能够让代码一直的更新迭代,一直的有效!


记录一次字体反爬 python
http://example.com/2023/04/30/记录一次字体反爬破解/
作者
OneWhiteThree
发布于
2023年4月30日
许可协议