JS逆向实战13.5——某小说网站 小说字数 和月票字体加密
本网站不算严格意义的逆向,只是爬虫的一个小手段。
声明
本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!
目标网站
68747470733a2f2f7777772e71696469616e2e636f6d2f616c6c2f
爬取目标
获取如上图所示的数字 以及标题简介 小说名 和小说地址 以及作者名和作者URl
网站分析
这个网站我们只爬取首页,也不对详情页做分析。
所以我们只需要分析这个链接
得到其中的对应链关系 即可得到数字
顾字体TTF加密流程分为
- 下载相应的包
- 对包进行解析获取其中的映射关系(当然其实这个有逻辑的可以解密解出来 太复杂了我就不说了)
- 获取数字
对应的月票也是同理
解决方法
首先我们通过FontCreator
上文的字体文件。
fontCreator官网: https://fontcreator.com.cn/ 点击免费下载 下载即可 有免费试用权限
如图所示映射关系如上图
然后我们通过代码把两者对应起来。
下面展示部分代码
def font_encode(self, encrypted_number, font_obj):
"""
:param encrypted_number: 加密后的数字
:param font_obj: fontTools对象
:return:
"""
# 获取映射表
mapping_dict = font_obj.getBestCmap()
# print("字体加密映射表", mapping_dict)
for index, i in enumerate(encrypted_number):
new_font_list = re.findall(r'\d+', i) # 去掉特殊符号 &# &# ;
encrypted_number[index] = new_font_list
dict_e_a = {
"one": '1', "two": '2',
"three": '3', "four": '4',
"five": "5", "six": '6',
"seven": "7", "eight": '8',
"nine": '9',
"zero": '0', 'period': "."
}
for i in mapping_dict:
# 遍历dict_e_a
# print(i)
for j in dict_e_a:
# dict_的值等于dict_e_a的键
if mapping_dict[i] == j:
mapping_dict[i] = dict_e_a[j]
# print("替换成数字后的关系映射表", mapping_dict)
return mapping_dict
然后通过匹配response去掉特殊符号的值 和 改成阿拉伯数字后的关系映射表,把密文改成明文 100196 =》 3
这样就能得到完整的数字。
爬取成功!!!