声明
本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!
在上篇文章某汉芯城js逆向我们已经成功研究出了参数的加密流程,但是请求的回来的数据却是一堆以 &#x 开头的字符串
从图中可以看出来我们遇到了字体反爬了
把这个文件下载下来 研究下他的字体映射关系是啥下面是我下载了两个不同的字体文件进行了比对
font = TTFont(r'xxx.ttf')
font.saveXML('xxx.xml')
转换成xml格式在进行比对
这是ttf文件和xml的对应关系
经过对比发现在这两个字体文件中用来表示6的坐标点都是一致的,那么说明了这只是个静态的字体文件反扒,针对这种情况我们可以去做一个静态的映射关系
#这里我是以glyf节点TTGlyph字体on信息做了一组映射
a_dict = {'1010101010101110101010101010101010101011111101010101010': 5,
'1111111': 7,
'101010101010101010101010101010101010101010101010': 0,
'10101010101011101010101010101010101010101010101010101010101010101010101010': 9,
'10101010101011010101010101010110101010101010101010101010101010101010101010': 8,
'1111': '.', '11111111111111': 4,
'111010101010101010111010101010101010101011': 2,
'111111101010101111': 1,
'10101010101010101110101010101010101010111101010101010101011101010101010101011010': 3,
'10101010101010101010101011101010101010101010101010101010101010101010101010': 6}
import re
from fontTools.ttLib import TTFont
# 加载ttf文件
font = TTFont("ickey (2).ttf")
cmp_lists = font.getGlyphOrder()[4:]
print(cmp_lists)
# for index,unicode in enumerate(cmp_lists):
# contour=font['glyf'][unicode].coordinates
# print(contour)
str_ = "通用 񸱿 - 񏉏MHz 𮦤󀌧nA 񏉏mA 𮦤󑣞mA 񓣫-PDIP 񸱿mV 򃦄 V ~ 򃦄񸱿 V,±񏉏󼓅󀌧 V ~ 񏉏򑌄 V"
print("请求返回的数据",str_)
data_dict = {}
new_dict = {}
for z,cmp_name in enumerate(cmp_lists):
new_tag_name = cmp_name.replace("u","&#x") + ";"
aaa = font['glyf'][cmp_name].flags
on_z = str(aaa).replace("\\x0", "").replace("bytearray(b'", "").replace("')", "")
number_ = a_dict[on_z]
new_dict[new_tag_name] = number_
str_ = str_.replace(new_tag_name,str(number_))
print("处理完的数据",str_)
最终结果