写点什么

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

作者:梦想橡皮擦
  • 2022 年 8 月 04 日
  • 本文字数:929 字

    阅读完需:约 3 分钟

📢📢📢📢📢📢

💗 你正在阅读 【梦想橡皮擦】 的博客

👍 阅读完毕,可以点点小手赞一下

🌻 发现错误,直接评论区中指正吧

📆 橡皮擦的第 <font color=red>674</font> 篇原创博客

⛳️ 实战场景

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


aHR0cHM6Ly9jbi5jaGluYS5jbg==
复制代码


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



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


字体文件分析在网页源码寻找字体文件相关内容,得到的结果如下图所示。



而我们下载字体文件,打开发现并不是一个固定的字体文件。



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



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

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

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


import refrom fontTools.ttLib import TTFontfrom hashlib import md5
font = TTFont('./fonts/112.woff')font.saveXML('./112.xml')
复制代码




下面我们复制一段目标站点响应的源码,其表示的电话如下所示:



<span class="secret">&#x100ce;&#x100cf;&#x100cf; &#x100cf;&#x100cf;&#x100ce;&#x100d0; &#x100d0;&#x100d1;&#x100d2;&#x100d2;</span>
复制代码


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


import refrom fontTools.ttLib import TTFontfrom hashlib import md5
# font = TTFont('./fonts/112.woff')# font.saveXML('./112.xml')# 读取字体文件font = TTFont('./fonts/112.woff')# 读取 cmapcmap = 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 加密之后得到的,便于后续对比。



下面你就要通过测试,获取所有的数字编码。


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


发布于: 刚刚阅读数: 2
用户头像

爬虫 100 例作者,蓝桥签约作者,博客专家 2021.02.06 加入

6 年产品经理+教学经验,3 年互联网项目管理经验; 互联网资深爱好者; 沉迷各种技术无法自拔,导致年龄被困在 25 岁; CSDN 爬虫 100 例作者。 个人公众号“梦想橡皮擦”。

评论

发布
暂无评论
JS逆向字体反爬,某供应商平台反爬实践_Python_梦想橡皮擦_InfoQ写作社区