woff字体反爬处理

可视化软件

woff文件一般使用fontcreator查看
链接: https://dqunying2.jb51.net/201802/tools/fontcreator_jb51.rar.

xml文件结构关系

需要先将woff文件转化为xml格式

from fontTools.ttLib import TTFont
import xmltodict


font = TTFont('7.woff')
# 保存为xml文件
font.saveXML('7.xml')
# 读取xml文件内容
with open('7.xml', 'r') as f:
    xmldict = xmltodict.parse(f.read())
for i in xmldict['ttFont']['glyf']['TTGlyph'][1:]:
	# 此处i为OrderedDict 需要转换才能进行下一步取值
	# ww = json.loads(json.dumps(i))
	# for i in ww:
	#	 print(i)
	print(i)

xml的字体文件格式一览,其中主要看GlyphOrder,cmap,glyf

在这里插入图片描述
其中GlyphOrder可映射文件id从fontcreator软件中获取该字,如下unie842为6,unie269为9,以此类推

在这里插入图片描述

在这里插入图片描述
cmap则表明了映射关系,此处多半是网页呈现的代码

在这里插入图片描述
glyf是对字体的图像描写笔画显示

 <TTGlyph name="unia863" xMin="0" yMin="-164" xMax="996" yMax="804">
      <contour>
        #点 x.y on 0表示为弧形区域 1表示矩形
        <pt x="22" y="-72" on="1"/>
        <pt x="96" y="59" on="0"/>
        <pt x="102" y="322" on="1"/>

静态,动态woff文件处理方法

对于静态文件只需要下载到本地,获取字符集的列表顺序,再根据xml中的映射关系即可解决。

对于动态文件有2种情况一种是uniname变化,字符集不变,这种情况需要每次请求都下载一次woff文件。

第二种情况是2者都会变化,字符集顺序也会变化,这种情况博主的处理方式为,对`glyf`中的字符笔划x,y的值,on的排列等数据进行操作,拿到该字符唯一的特征,再去映射文件字体即可该方法适用于少量的字体反爬。

Node.js本身并没有直接逆向WOFF字体文件的功能,WOFF(Web Open Font Format)是一种字体文件格式,用于网页字体的压缩和分发。逆向WOFF字体文件通常意味着需要从WOFF格式转换回原始的字体格式,比如TrueType(TTF)或OpenType(OTF)格式。 要逆向WOFF字体文件,你可以使用一些现成的工具,如Python脚本、在线转换服务或者专门的库。如果你希望在Node.js环境中实现这一功能,你可能需要依赖外部命令行工具或编写一个Node.js扩展来调用底层字体处理库。 以下是一个大致的步骤说明,用于在Node.js中逆向WOFF字体文件: 1. 找到可以将WOFF转换为其他字体格式的命令行工具,如`fonttools`或`woff2otf`。 2. 使用Node.js的`child_process`模块中的`exec`或`spawn`函数调用这些工具。 3. 将WOFF文件作为输入,将转换后的文件保存为所需格式。 示例代码如下: ```javascript const { exec } = require('child_process'); const woffFilePath = 'path/to/your/font.woff'; const outputFilePath = 'path/to/your/font-output.ttf'; exec(`woff2otf ${woffFilePath} ${outputFilePath}`, (error, stdout, stderr) => { if (error) { console.error(`执行的错误: ${error}`); return; } console.log(`标准输出: ${stdout}`); if (stderr) { console.error(`标准错误输出: ${stderr}`); } console.log('WOFF字体文件逆向转换完成!'); }); ``` 请确保你已经安装了`woff2otf`工具,并且它在你的系统PATH中,否则你需要指定正确的路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值