字体加密破解日记

本文探讨了字体加密技术如何在Web页面上隐藏数据,使得自动化工具如Selenium无法抓取。介绍了字体文件类型及其在Web开发中的应用,并展示了如何使用Python库fontTools解析和处理字体文件,揭示其内部结构和编码关系。
摘要由CSDN通过智能技术生成

一. 字体加密原理

- 简单而言就是利用前端技术干扰,页面可以正常展示,而使用爬虫下载后无法提取正常的数据。
- 在 `CSS3 `之前,`Web` 开发者必须使用用户计算机上已有的字体。目前的技术开发者可以使用`@font-face`为网页指定字体,开发者可将心仪的字体文件放在 Web 服务器上,并在` CSS` 样式中使用它。用户使用浏览器访问 `Web应用`时,对应的字体会被浏览器下载到用户的计算机上。

**注:**使用自动化`selenium`也无法获取正常的数据

- 实例:https://www.shixiseng.com/interns?keyword=互联网IT&city=全国&type=intern&from=menu 
- 字体加密的特点
  - 在网页上显示正常,在源码里面看到的是乱码或者是问号

2. 定位字体位置 

- 字体加密会有个映射的字体文件
- 可以在元素面板搜索`@font-face`会通过这个标签指定字体文件,可以直接在页面上搜索,找到他字体的网址

 可以直接把字体文件下载下来, 文件可以一般需要自己修改后缀(网页的字体后缀一般选用woff)

  1. `TTF`:这是Windows操作系统使用的唯一字体标准,`macintosh`计算机也用`truetype`字体作为系统字体。

  2. `OTF`:这是一种开放的字体格式,支持Unicode字符集,可以在多种操作系统和设备上使用。

  3. `FON`:这是Windows 95及之前版本使用的字体格式。

  4. `TTC`:这是一种字体集合格式,包含多个字体文件,可以一次性安装多个字体。
  5. `SHX`:这是CAD系统自带的一种字体文件,符合了CAD的文字标准,但不支持中文等亚洲语言文字。
  6. `EOT`:这是早期网页浏览器使用的字体格式,但现在已经很少使用。
  7. `WOFF`:这是一种网页字体格式,可以在网页中使用,也可以转换为`.TTF`格式用于桌面应用。

- 查看字体文件
  - 在线字体解析网站:https://font.qqe2.com/
  - 可以直接把文件拖动到在线网址

3. 找文件与网页对应关系

三. python处理字体

#### 1. 工具库

```
pip install fontTools  # 使用这个包处理字体文件
```

#### 2. 字体读取

```python
from fontTools.ttLib import TTFont
# 加载字体文件:
font = TTFont('file.woff')
# 转为xml文件:可以用来查看字体的字形轮廓、字符映射、元数据等字体相关的信息
font.saveXML('file.xml')
```

#### 3. 字体读取

```python
from fontTools.ttLib import TTFont
# 加载字体文件:
font = TTFont('file.woff')
kv = font.keys()
print(kv)
```

字体文件不仅包含字形数据和点信息,还包括字符到字形映射、字体标题、命名和水平指标等,这些信息存在对应的表中:

| 表   | 作用           |
| ---- | -------------- |
| cmap | 字符到字形映射 |
| glyf | 字形数据       |
| head | 字体标题       |
| hhea | 水平标题       |
| hmtx | 水平指标       |
| loca | 索引到位置     |
| maxp | 最大限度的     |
| name | 命名           |
| post | 后记           |

#### 4. 获取请求到的字体code和name的对应关系

```
code_name_map = font_aa.getBestCmap()
```

#### 5. 获取字体坐标信息

```python
font_aa = TTFont('file.woff')
# 获取请求到的字体形状
glyf = font_aa['glyf']
#font['glyf'][字体编码].coordinates
font_aa['glyf']['uni4E94'].coordinates
```
 

  • 18
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值