恢弘志士之气,不宜妄自菲薄。这篇文章主要讲述JS逆向字体反爬,某供应商平台反爬实践相关的知识,希望能为你提供帮助。
@[toc]
?? 实战场景本次要采集的站点是某供应商平台,域名如下所示:
aHR0cHM6Ly9jbi5jaGluYS5jbg==
这次要采集的是公开的电话号码,注意是公开的,不是隐私数据哦~
文章图片
通过开发者工具得到上图所示内容,仅数字部分进行了字体反爬。
字体文件分析
在网页源码寻找字体文件相关内容,得到的结果如下图所示。
文章图片
而我们下载字体文件,打开发现并不是一个固定的字体文件。
文章图片
该文件中仅包含了号码中存在的数字,再次打开一页详情,查看其字体文件。
文章图片
每次刷新之后,得到的字体文件和编码全部不同,本案例难度就提高了一点点。
?? 供应商字体反爬 实战场景通过
font
模块加载字体文件,分别解析两个文件,对比数字一的矢量图部分内容,发现编码不一致,但是内容是完全相同的。import re
from fontTools.ttLib import TTFont
from hashlib import md5font = TTFont(./fonts/112.woff)
font.saveXML(./112.xml)
文章图片
文章图片
下面我们复制一段目标站点响应的源码,其表示的电话如下所示:
文章图片
<
span class="secret">
&
#x100ce;
&
#x100cf;
&
#x100cf;
&
#x100cf;
&
#x100cf;
&
#x100ce;
&
#x100d0;
&
#x100d0;
&
#x100d1;
&
#x100d2;
&
#x100d2;
<
/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 = https://www.songbingjia.com/android/re.findall(f<
CharStringname="cmap[i]">
(.*?)<
/CharString>
, ret)[0]
# print(data)
# 将查询到的结果进行 md5 编码
char_md5 = md5(data.encode(utf8)).hexdigest()
print(char_md5)
得到结果如下所示,下图所有值都经过 md5 加密之后得到的,便于后续对比。
【JS逆向字体反爬,某供应商平台反爬实践】
文章图片
下面你就要通过测试,获取所有的数字编码。
推荐阅读
- 性能测试的7个要点
- 记一次对钓鱼诈骗网站的测试
- Flannel IPIP 跨节点通信
- 大型物联网平台如何来保障亿级设备安全连接上云()
- Kafka 负载均衡在 vivo 的落地实践
- Linux中(Out of memory: Kill process 29650 (java) score 174 or sacrifice child)
- RK3568开发笔记(RK3568虚拟机基础环境搭建之更新源安装网络工具串口调试网络连接文件传输安装vscode和samba共享服务)
- 使用luks2对ceph rbd进行加密
- #yyds干货盘点# js学习笔记五十BFC规范