记某站字体混淆解析方案

记某站字体混淆解析方案

💡 原文中文,约1900字,阅读约需5分钟。
📝

内容提要

本文介绍了一种应对网站字体加密反爬虫的方法。通过OCR识别字体文件并人工校正,利用fontTools和PIL将每个字渲染为图片,计算imagehash建立字典,再动态解析字体文件,将加密数据映射为明文。该方法可动态适应字体变化,准确率高,但解析耗时约5秒,且字体更新时可能失效。

🔎

延伸解读

方案核心:imagehash 字典匹配

该方案的核心在于将字体文件中的每个字符渲染为固定尺寸的图片,并计算其 imagehash 值,建立 hash 到字符的映射。每次抓取数据时,对字体文件中的每个字符重新计算 hash,并在字典中查找最相似的字符,从而动态解析加密数据。这种方法避免了直接 OCR 的低效和高成本,同时能适应字体文件的动态变化。

适用场景与限制

此方案适用于字体文件字符数量有限(如 1k+)且变化不频繁的场景。其优势在于动态解析和较高的准确性,但劣势也明显:解析整个字体文件耗时约 5 秒,且当网站更新字体时可能失效。因此,该方法更适合对时效性要求不高的定期数据抓取,而非实时性要求高的场景。

与 OCR 方案的对比

相比直接使用 OCR 识别字体,该方案通过 imagehash 匹配字典,准确率更高,且无需每次都对字体进行 OCR 识别,降低了成本和错误率。但 OCR 仍被用于初始建立字典,且需要人工校正,因此初始构建字典时仍需一定人工参与。

Q&A

网站字体加密反爬虫的原理是什么?

网站通过自定义字体文件,将关键数据中的字符映射为自定义的编码(如#FontTag中的加密数据),浏览器加载字体文件后能正确显示,但爬虫直接抓取得到的是乱码。

如何动态解析网站字体加密?

通过OCR识别字体文件并人工校正,用fontTools和PIL将每个字渲染为图片,计算imagehash建立hash:char字典;每次抓取数据后,对字体文件的每个字符计算imagehash,从字典中找到最相似的字符,得到unicode:char映射,从而解析加密数据。

为什么不能直接使用OCR识别字体文件?

因为字体文件是动态的,无法一次识别一直使用;且直接OCR识别效率低、费用高、准确率低,尤其对生僻字识别效果差。

该字体混淆解析方案的优势有哪些?

优势包括:可动态解析字体文件,适应字体变化;单个网站多个页面可共用hash:char字典,新字体可追加;字体细微修改时相似度计算仍有效;比OCR准确性更高。

该方案存在哪些缺点或限制?

缺点包括:每次解析整个字体文件耗时较长(约1k字符/5秒);当网站更新字体时,可能无法继续工作。

如何建立hash:char字典?

下载字体文件后,先用OCR(如PowerToys)识别并人工校正,然后用fontTools和PIL将每个字符渲染为64x64图片,用imagehash计算平均哈希值,最后将哈希值与OCR识别的字符对应,建立字典。

🏷️

标签

➡️

继续阅读