字体反爬篇

一、总体思路

1、获取字体文件
2、base64解密文件分别保存为woff文件与xml文件
3、查看映射关系创建映射字典
4、通过映射字典,第二次获取响应时替换成实际数据

二、解析过程

image.png

1、获取字体文件

在开发者工具中查找"font-face",如图所示

image.png

获取到base64字符串并删除头部信息,在这里就是data:application/font-ttf;charset=utf-8;base64, 逗号也要删除,这样就获取到了字体信息,这一段密文就是加密后的字体文件

T1RUTwAJAIAAAwAQQ0ZGICGSe1oAAATUAAAEd09TLzJlNl+eAAABAAAAAGBjbWFwACoGOwAABAQAAACwaGVhZBf2b3IAAACcAAAANmhoZWEA3wBNAAAA1AAAACRobXR4B/AAAAAACUwAAAAkbWF4cAAJUAAAAAD4AAAABm5hbWUKXYQxAAABYAAAAqNwb3N0AAMAAAAABLQAAAAgAAEAAAABAACCl4DfXw889QADAQAAAAAA3DAYYwAAAADcMBhjAAf//wB4ALUAAAADAAIAAAAAAAAAAQAAAN3/xQAAAH4AAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAkAAFAAAAkAAAADAH4B9AAFAAACigK7AAAAjAKKArsAAAHfADEBAgAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAACBYWFhYAEAATgBVAN3/xQAAALUAAQAAAAEAAAAAAG8AtQAAAAAAAAAAACIBngABAAAAAAAAAAEAQgABAAAAAAABAAwAAAABAAAAAAACAAYAJAABAAAAAAADABUAxgABAAAAAAAEABMANgABAAAAAAAFAAsApQABAAAAAAAGABIAbwABAAAAAAAHAAEAQgABAAAAAAAIAAEAQgABAAAAAAAJAAEAQgABAAAAAAAKAAEAQgABAAAAAAALAAEAQgABAAAAAAAMAAEAQgABAAAAAAANAAEAQgABAAAAAAAOAAEAQgABAAAAAAAQAAwAAAABAAAAAAARAAYAJAADAAEECQAAAAIAYQADAAEECQABABgADAADAAEECQACAAwAKgADAAEECQADACoA2wADAAEECQAEACYASQADAAEECQAFABYAsAADAAEECQAGACQAgQADAAEECQAHAAIAYQADAAEECQAIAAIAYQADAAEECQAJAAIAYQADAAEECQAKAAIAYQADAAEECQALAAIAYQADAAEECQAMAAIAYQADAAEECQANAAIAYQADAAEECQAOAAIAYQADAAEECQAQABgADAADAAEECQARAAwAKk9wZW5UeXBlU2FucwBPAHAAZQBuAFQAeQBwAGUAUwBhAG4Ac01lZGl1bQBNAGUAZABpAHUAbU9wZW5UeXBlU2FucyBNZWRpdW0ATwBwAGUAbgBUAHkAcABlAFMAYQBuAHMAIABNAGUAZABpAHUAbU9wZW5UeXBlU2Fuc01lZGl1bQBPAHAA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

进行base64解码(为什么是bs64呢,因为font-face中标明了是base64)并分别保存为woff文件与xml文件

 # base64解密
    font_content = base64.b64decode(base64_str)
    # TTFont打开从内存读取的二进制woff数据
    font = TTFont(io.BytesIO(font_content))
    # 将woff文件转换为xml文件
    font.save('ts.woff')
    font.saveXML('ts.xml')

使用Fontcreator打开woff文件,就可以看到字形与实际字体的对应关系,也就是映射

image.png

这就知道了结果,然后打开xml文件,通过结果查找映射关系就事半功倍了。

image.png

至于创建映射字典和替换数据都是体力活了,就不一一介绍了。

其他内容

将base64格式的字体信息解码成可用的字体文件

你可能感兴趣的:(字体反爬篇)