某电影网站字体反爬
爱好学习及分享,若文章侵权,优先联系本人删帖处理。
几个关键点
-
base字体文件分析
- 打开目标网页,找到woff文件链接
- 下载该woff文件,并在字体编辑器里打开
- 记录下数字与字符的对应关系
- 将字体文件转xml进行查看(需要安装fontTools => pip install fontTools即可)
- 在文件中<cmap>标签下可以看到对应关系(uniE067 对应编码为 0xE067,而在网页上显示为 )
- 从xml文件中我们可以看到0-9这10个数字的编码,那问题每次请求页面的时候都是返回一个新的编码,那就不能用这个直接去套用新的编码了。(不能说这次0xE067是4,那下一次也是0xE067对应4,这是不对的。看一个新的xml)
- 仅仅通过对比编码来看,两个字体文件没有半毛钱关系。但是我们怎么去通过一个base字体文件的特征去识别新的字体文件呢?
- 这里其实每个字体都是由多个点组成的,而下面<pt>标签中的代表点的坐标。
- 这里使用一种最简单的方式(两点间距离公式)。遍历new字体每个字的坐标系,将一个字前10个坐标依次和base的字体的前十坐标计算距离,并求和,最后得到10个距离值(因为需要对比0-9,这10个数字),其中距离值最小的一个值所对应的数字(key)就是当前new字体的数字(key)。
-
每次请求获取new字体文件
-
具体对比
-
结果对照