欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

防爬汉芯城字体技巧说明 - 文章内所有内容仅为学习分享,非商用及违法目的,不包含完整代码、网络请求详情、特殊链接及数据接口等已做隐匿处理。切勿将其用于商业或非法途径,如因此产生的问题,作者概不负责!

最编程 2024-02-18 14:45:24
...

在上篇文章某汉芯城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_)

最终结果
在这里插入图片描述