静态字体加密逆向-12题-css字体加密

本文章中所有内容仅供学习交流使用,不用于其他任何目的,敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!
本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,若有侵权,请联系作者立即删除

url : aHR0cHM6Ly93d3cucHl0aG9uLXNwaWRlci5jb20vY2hhbGxlbmdlLzEy

  • 第一步:先打开F12来分析一下,我们看到的数据都是加密的啊!经常遇到字体反爬的人看到这些加密,应该会觉得很眼熟,那就去font里看一看,有一个woff文件,这就是字体加密,而且还是静态的。请添加图片描述请添加图片描述
  • 第二步:我们把字体文件下载下来,先打开看一下吧!(这里我们用到了FontCreator软件可以自己下载),把字体直接拖拽到FontCreator里就可以请添加图片描述
  • 第三步:看到了对应关系后,我们把它直接转成xml格式,用到了python中的fontTools库,这里保存后自己看一下对应关系,也有助于分析
from fontTools.ttLib import TTFont

# 加载ttf文件
font = TTFont("aiding.woff")  # 打开当前目录的 movie.woff 文件
font.saveXML("aiding.xml")    # 另存为 movie.xml

请添加图片描述

  • 第四步:读取数据手动生成对应关系
cmp_lists = font.getGlyphOrder()  # 取出 <GlyphOrder> 标签中的 name
print(cmp_lists)


for index,unicode in enumerate(cmp_lists):
    aaa = font['glyf'][unicode].flags
    on_z = str(aaa).replace("\\x0", "").replace("bytearray(b'", "").replace("')", "")
    print(unicode,':', on_z)  # 获取对应关系
    #  .notdef : 111
    # unie458 : 1001101111
    # unif375 : 100110101001010101011110101000
    # unif80c : 10101100101000111100010101011010100101010100
    # unif12f : 111111111111111
    # uniee4a : 1110101001001010110101010100101011111
    # unif295 : 10101010100001010111010101101010010101000
    # unie449 : 1111111
    # unif0d6 : 101010101101010001010101101010101010010010010101001000010
    # unie44d : 10010101001110101011010101010101000100100
    # unif712 : 10100100100101010010010010
a_dict = {}
a_dict['111'] = '.'
a_dict['1001101111'] = 1
a_dict['100110101001010101011110101000'] = 2
a_dict['10101100101000111100010101011010100101010100'] = 3
a_dict['111111111111111'] = 4
a_dict['1110101001001010110101010100101011111'] = 5
a_dict['10101010100001010111010101101010010101000'] = 6
a_dict['1111111'] = 7
a_dict['101010101101010001010101101010101010010010010101001000010'] = 8
a_dict['10010101001110101011010101010101000100100'] = 9
a_dict['10100100100101010010010010'] = 0
  • 第五步:生成对应关系后我们就可以直接使用对应关系来获取想要的数据
str_ = "&#xe458 &#xe458 &#xf12f &#xf12f "
new_dict = {}
for z,cmp_name in enumerate(cmp_lists):
    new_tag_name = cmp_name.replace("uni","&#x") + ' '  # 找到它替换的对应关系
    # print('',new_tag_name)
    aaa = font['glyf'][cmp_name].flags  # 取出对应的bytearray(数字串)
    on_z = str(aaa).replace("\\x0", "").replace("bytearray(b'", "").replace("')", "") # 将bytearray()这个格式转换成数字串
    # print('数字:',on_z)
    number_ = a_dict[on_z] # 找到对应的数字
    new_dict[new_tag_name] = number_  # 存储起来方便查看结果
    str_ = str_.replace(new_tag_name,str(number_))  # 将字符串里的字符一一对应替换

print(new_dict)
print("处理完的数据",str_)

请添加图片描述
欢迎技术交流!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值