猿人学题库13题—动态css字体加密 记录
猿人学题库13题—动态css字体加密
1. 首先 进入 浏览器的开发者工具抓包
在 xhr 可以看到 ajax请求数据接口,返回的数据有一个 woff 键,这里就是 woff的base64格式
请求获取 数据后 把 woff键的值 base64解码 保存为tff文件格式
2、安装库
这里需要用到fontTools库安装FontTools库非常简单,推荐使用Python的包管理工具pip进行安装。读者只需打开终端或命令提示符,输入以下命令即可:
pip install fonttools
安装完成后,可以通过以下Python代码检查是否安装成功:
import fontTools
print(fontTools.__version__)
如果控制台打印出FontTools的版本信息,则表示安装无误,我们可以继续进行下一步的FontTools探索之旅。
3、解析 woff 文件
保存 tff 格式后,用 from fontTools.ttLib import TTFont 读取,
在解析的过程可以先 保存为 xml 格式,查看数据
观察xml 文件发现最后 这部分 是 Unicode 编码是 排序好的,和数字排序是对应的,直接找规律。
每次请求获取 Unicode对应的数字值子典进去比对,就可以获取正确的数值了
核心代码
def SaveTff(res):new_font_name = "./tff/font_base.ttf"xml_font_name = "./tff/font_base.xml"font_data_after_decode = base64.b64decode(res['woff'])with open(new_font_name, 'wb') as f:f.write(font_data_after_decode)font = TTFont(new_font_name)font.saveXML(xml_font_name)extraNames = font.get('post').__dict__['extraNames']woff_dict = {}for index, val in enumerate(extraNames):if index < 9:num = index + 1else:num = 0woff_dict[val.replace('uni', '&#x')] = num# print(woff_dict)return woff_dict