6

JS逆向字体反爬,某供应商平台反爬实践

 1 year ago
source link: https://blog.51cto.com/cnca/5359493
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

📢📢📢📢📢📢
💗 你正在阅读 【梦想橡皮擦】 的博客
👍 阅读完毕,可以点点小手赞一下
🌻 发现错误,直接评论区中指正吧
📆 橡皮擦的第 <font color=red>621</font> 篇原创博客

Table of Contents

⛳️ 实战场景

本次要采集的站点是某供应商平台,域名如下所示:

aHR0cHM6Ly9jbi5jaGluYS5jbg==

这次要采集的是公开的电话号码,注意是公开的,不是隐私数据哦~

JS逆向字体反爬,某供应商平台反爬实践_插入图片

通过开发者工具得到上图所示内容,仅数字部分进行了字体反爬。

字体文件分析
在网页源码寻找字体文件相关内容,得到的结果如下图所示。
JS逆向字体反爬,某供应商平台反爬实践_xml_02
而我们下载字体文件,打开发现并不是一个固定的字体文件。

JS逆向字体反爬,某供应商平台反爬实践_数据_03

该文件中仅包含了号码中存在的数字,再次打开一页详情,查看其字体文件。

JS逆向字体反爬,某供应商平台反爬实践_数据_04

每次刷新之后,得到的字体文件和编码全部不同,本案例难度就提高了一点点。

⛳️ 供应商字体反爬 实战场景

通过 font 模块加载字体文件,分别解析两个文件,对比数字一的矢量图部分内容,发现编码不一致,但是内容是完全相同的。

import re
from fontTools.ttLib import TTFont
from hashlib import md5

font = TTFont('./fonts/112.woff')
font.saveXML('./112.xml')
JS逆向字体反爬,某供应商平台反爬实践_xml_05
JS逆向字体反爬,某供应商平台反爬实践_插入图片_06

下面我们复制一段目标站点响应的源码,其表示的电话如下所示:
JS逆向字体反爬,某供应商平台反爬实践_xml_07

<span class="secret">𐃎𐃏𐃏 𐃏𐃏𐃎𐃐 𐃐𐃑𐃒𐃒</span>

我们在字体文件中读取一下上图所示内容。

import re
from fontTools.ttLib import TTFont
from hashlib import md5

# font = TTFont('./fonts/112.woff')
# font.saveXML('./112.xml')
# 读取字体文件
font = TTFont('./fonts/112.woff')
# 读取 cmap
cmap = font.getBestCmap()
with open('./112.xml','r',encoding='utf8') as f:
    ret = f.read()
ret = ret.replace('\n','').replace(' ','')
# print(ret)

for i in cmap:
    # 查询目标数据
    data = re.findall(f'<CharStringname="{cmap[i]}">(.*?)</CharString>', ret)[0]
    # print(data)
    # 将查询到的结果进行 md5 编码
    char_md5 = md5(data.encode('utf8')).hexdigest()
    print(char_md5)

得到结果如下所示,下图所有值都经过 md5 加密之后得到的,便于后续对比。

JS逆向字体反爬,某供应商平台反爬实践_xml_08
下面你就要通过测试,获取所有的数字编码。

📣📣📣📣📣📣
右下角有个大拇指,点赞的漂亮加倍


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK