快手最新字体反爬

快手最近更新了字体反爬,经过三天奋战初步解决了快手的字体反爬。

下面截图是一套字体库

这是一套字体库这么多连接可能是为了适应不同浏览器,我看到我司数据库有400多快手主页链接,于是就将这400多主页链接请求了一遍用正则提取了这400多主页中的字体库,去重后发现只有5套不同的,也就可以初步认为快手使用5套字体库每次请求随机发送一套字体库。

 于是程序就有了这样一步每次请求先分析用了那套字体库,这很简单自行实现就行。

我们再来看看快手用来替换的字体是类似韩文一样的字符

 把字符拿下来然后使用Unicode编码

s = 'ꯎ껾껾뷝'
new_s = (list(map(lambda x:x.encode('unicode_escape'),s)))
print(new_s)


[b'\\uabce', b'\\uaefe', b'\\uaefe', b'\\ubddd']

看到这很多同学应该已经知道怎么回事了,接下来分析字体库,一个有五套我们拿一套来分析。

看到上面的Unicode码和上上图中编码后的码是不是很相似 ,这是需要自己手动写五套映射关系,并且改为“\\uxxxx”的形式,这里我已经改好了

fontscn_h57yip2q = {     
    '\\uabcf':'4',
    '\\uaced':'3',
    '\\uaedd':'8',
    '\\uaede':'0',
    '\\uafcd':'6',
    '\\ubdaa':'5',
    '\\ubdcd':'1',
    '\\ubfad':'9',
    '\\uccda':'2',
    '\\ucfbe':'7',
}
fontscn_3jqwe90k = {
    '\\uaacb':'4',
    '\\uabcd':'3',
    '\\uacdd':'0',
    '\\uaefb':'8',
    '\\uafbc':'6',
    '\\ubbca':'1',
    '\\ubdca':'5',
    '\\ubfee':'9',
    '\\uccac':'2',
    '\\ucfba':'7',
}
fontscn_yuh4hy4p = {
    '\\uaabd':'5',
    '\\uaadd':'0',
    '\\uacde':'9',
    '\\uadaa':'2',
    '\\uadac':'1',
    '\\uadcb':'7',
    '\\uaeed':'8',
    '\\ubebb':'3',
    '\\ucbdc':'6',
    '\\ucccf':'4',
}
fontscn_qw2f1m1o = {
    '\\uabcb':'4',
    '\\uaccd':'3',
    '\\uacda':'0',
    '\\uaeff':'8',
    '\\uafbb':'6',
    '\\ubdca':'1',
    '\\ubdcc':'5',
    '\\ubfef':'9',
    '\\uccaa':'2',
    '\\ucfba':'7',
}
fontscn_yx77i032 = {
    '\\uabce':'4',
    '\\uaccd':'6',
    '\\uaeda':'8',
    '\\uaefe':'0',
    '\\uafed':'3',
    '\\ubaaa':'5',
    '\\ubddd':'1',
    '\\ubfad':'2',
    '\\ubfae':'9',
    '\\uc44f':'7',
}

 到这里快手的字体反爬就解决的差不多了,首先是解析网页知道是用那一套字体库,然后拿到的特殊字符转为Unicode码,最后将得到的Unicode跟对应的字体库比较得到正确的数据

li = []
s = 'ꯎ껾껾뷝'
print(s)
new_s = (list(map(lambda x:x.encode('unicode_escape'),s)))
print(new_s)
for i in new_s:
    try:
        num = fontscn_yx77i032[str(i)[3:-1]]
        li.append(num)
    except KeyError:
        continue
print(li)



ꯎ껾껾뷝
[b'\\uabce', b'\\uaefe', b'\\uaefe', b'\\ubddd']
['4', '0', '0', '1']
def parsingChar(type,data):
    fontscn_h57yip2q = {
        '\\uabcf':'4',
        '\\uaced':'3',
        '\\uaedd':'8',
        '\\uaede':'0',
        '\\uafcd':'6',
        '\\ubdaa':'5',
        '\\ubdcd':'1',
        '\\ubfad':'9',
        '\\uccda':'2',
        '\\ucfbe':'7',
    }
    fontscn_3jqwe90k = {
        '\\uaacb':'4',
        '\\uabcd':'3',
        '\\uacdd':'0',
        '\\uaefb':'8',
        '\\uafbc':'6',
        '\\ubbca':'1',
        '\\ubdca':'5',
        '\\ubfee':'9',
        '\\uccac':'2',
        '\\ucfba':'7',
    }
    fontscn_yuh4hy4p = {
        '\\uaabd':'5',
        '\\uaadd':'0',
        '\\uacde':'9',
        '\\uadaa':'2',
        '\\uadac':'1',
        '\\uadcb':'7',
        '\\uaeed':'8',
        '\\ubebb':'3',
        '\\ucbdc':'6',
        '\\ucccf':'4',
    }
    fontscn_qw2f1m1o = {
        '\\uabcb':'4',
        '\\uaccd':'3',
        '\\uacda':'0',
        '\\uaeff':'8',
        '\\uafbb':'6',
        '\\ubdca':'1',
        '\\ubdcc':'5',
        '\\ubfef':'9',
        '\\uccaa':'2',
        '\\ucfba':'7',
    }
    fontscn_yx77i032 = {
        '\\uabce':'4',
        '\\uaccd':'6',
        '\\uaeda':'8',
        '\\uaefe':'0',
        '\\uafed':'3',
        '\\ubaaa':'5',
        '\\ubddd':'1',
        '\\ubfad':'2',
        '\\ubfae':'9',
        '\\uc44f':'7',
    }
    woff_dict = {'h57yip2q':fontscn_h57yip2q,'3jqwe90k':fontscn_3jqwe90k,'yuh4hy4p':fontscn_yuh4hy4p,'qw2f1m1o':fontscn_qw2f1m1o,'yx77i032':fontscn_yx77i032}
    li = []
    new_data = (list(map(lambda x:x.encode('unicode_escape'),data)))
    for i in new_data:
        if len(str(i))>5:
            num = woff_dict[type][str(i)[3:-1]]
            li.append(num)
        else:
            li.append(str(i)[2:-1])
    res = ''.join(li)
    print(res)
    return res

if __name__ == '__main__':
    parsingChar('yx77i032','ꯎ껾껾.뷝w')

个人搭建的肿瘤社区http://www.h2cancer.com/希望能为肿瘤患者提供一个交流互助的平台

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
目  录  一 使用Axis和XFire发布Web Service ......................................................................................... 2  1.1 准备工作............................................................................................................................ 2  1.1.1 新建工程 ................................................................................................................. 2 1.1.2 axis依赖文件 ........................................................................................................... 3 1.1.3 XFire依赖文件 ........................................................................................................ 3 1.2 Axis发布Web Service ........................................................................................................ 4  1.2.1 传递简单数据类型的Web Service ........................................................................ 4 1.2.2 带自定义对象传递的Web Service ........................................................................ 8 1.3 XFire发布Web Services ................................................................................................... 10  1.3.1 传递简单数据类型的Web Service ...................................................................... 10 1.3.2传递复杂数据类型的Web Service ....................................................................... 12 附录: 1Server的结构 ............................................................................................................. 16 二 调用Web Services .................................................................................................................... 17  2.1 准备工作.......................................................................................................................... 17  2.1.1 新建工程 ............................................................................................................... 17 2.1.2 启动Tomcat上发布的1Server服务 ................................................................... 17 2.2 Axis发布的Web Service调用方式 ................................................................................. 18  2.2.1 Dynamic Invocation Interface (DII)方式 ................................................................. 18 2.2.2 Dynamic Proxy方式 ............................................................................................... 19 2.2.3 Stubs方式 .............................................................................................................. 20 2.3调用XFire发布的Web Service ....................................................................................... 22  2.3.1服务以jar包形式发布的时候 直接调用 ............................................................ 23 2.3.2 使用Axis的Client包 ........................................................................................... 23 2.3.3 使用Xfire的Client包 .......................................................................................... 24 附录2:2Client目录结构 ..................................................................................................... 31

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值