字体反爬破解


这里以实习僧为具体案例

1、通过 f12 查看网页相关信息

① 搜索“python”相关岗位,想爬取下来作为分析,但是看到html源码为特殊字符,而不是页面上直观能看到的文字信息

在这里插入图片描述
关闭对应的css样式可以看到,确实是做了字体反爬
在这里插入图片描述

②点击对应的css样式查看css源码,通过源码解析字体加密过程

在这里插入图片描述

在这里插入图片描述

查看 font-family 是由 myFont 传值生成,继续找 myFont 变量

2、通过 Domain+URI 获取到该字体文件

https://www.shixiseng.com/interns/iconfonts/file?rand=0.5135261623696619
在这里插入图片描述

① 这里没有后缀,我们只能去试是那一种格式的

一般常见的为:ttf、eot、otf、woff、svg,可以使用在线工具去检验
在这里插入图片描述
在这里插入图片描述

② 直至试出来文件格式为woff

在这里插入图片描述

在这里插入图片描述

3、检验字体文件对应关系是否正确

在这里插入图片描述
在这里插入图片描述
这里判断正确无误,底层通过css转换就是这个文件的文字

4、使用 python 进行字体映射

pip3 install fontTools

① 将woff转换为xml查看逻辑

from fontTools.ttLib import TTFont

font = TTFont('./font-file.woff')
font.saveXML('sxsfont.xml')

在这里插入图片描述

② 主要观察<cmap>里的对应关系

在这里插入图片描述
例如 这里python工程师
在这里插入图片描述
在这里插入图片描述

网页显示:&#xed53 &#xea63 &#xe4e5
xml中的code值:0xed53 0xea63 0xe4e5
xml中的name值:uni5DE5 uni7A0B uni5E08
通过观察可以得出:网页显示后四位与xml中的code值后四位一样,对应的name值看起来也是unicode编码,也是拿后四位去验证
在这里插入图片描述

③ 使用字典完成映射关系

from fontTools.ttLib import TTFont

font = TTFont('./font-file.woff')
cmap = font.get('cmap').getBestCmap()
print(cmap)

finish_font = {}
for k,v in cmap.items():
    if v[3:]:
        values = '\\u00' + v[3:] if len(v[3:]) ==2 else '\\u' + v[3:]
        real_values = values.encode().decode('unicode-escape')
        real_keys = hex(k).replace('0x','&#x')
        print(real_keys ,real_values)
        finish_font[real_keys]= real_values
print(finish_font)

在这里插入图片描述

5、根据映射对网页源码进行对应替换

for k, v in finish_font.items():
	html_text = html_text.replace(k, v)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值