猿人学题库十三题——动态css字体加密
1. 首先 进入 浏览器的开发者工具,
在 xhr 可以看到 ajax请求数据接口,返回的数据有一个 woff 键,这里就是 woff的base64格式
请求获取 数据后 把 woff键的值 base64解码 保存为tff文件格式
2. 解析 woff 文件
保存 tff 格式后,用 from fontTools.ttLib import TTFont 读取,
在解析的过程可以先 保存为 xml 格式,查看数据
每次 请求 获取 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 + 1
else:
num = 0
woff_dict[val.replace('uni', '&#x')] = num
# print(woff_dict)
return woff_dict
总结 :
动态css字体加密 就是每次请求的数据 都有自己的一套Unicode编码的对应,所有每次都需要去解析对应的tff文件格式的字段对应,