ermao 发表于 2020-10-25 20:29

快手解析作品/用户信息[字体反爬]

本帖最后由 ermao 于 2022-7-26 08:47 编辑



# 功能已失效,原内容已删除,仅保留字体反爬部分,思路还可以供人参考,勿回复

## 字体反爬部分代码

```
# -*- encoding: utf-8 -*-
'''
@ File    :   kuaishou.py
@ Time    :   2020年09月27日 15:08:24 星期天
@ Author:   ermao
@ Version :   1.0
@ Link    :   https://erma0.gitee.io
@ Desc    :   快手字体反爬
'''

print('start kuaishou.py')

import requests
import re
import time
import os
import json
# import hashlib
# from hashlib import md5
from io import BytesIO
from fontTools.ttLib import TTFont

def get_timestamp(long=13):
    if long == 10:
      timestamp = str(int(time.time()))
    else:# long == 13:
      timestamp = str(int(time.time() * 1000))
    return timestamp



def user_info(id):
    u = {'kuaiId': id}
    url = 'https://c.kuaishou.com/fw/user/' + id
    try:
      res = requests.get(url, headers=headers).text
      user_json = htmlRe.search(res).group(1)
      userinfo = json.loads(user_json)
      u['userId'] = userinfo['userIdInfo']['userId']
      u['userName'] = userinfo['share']['title']
      u['desc'] = userinfo['share']['desc']
      u['imgUrl'] = userinfo['share']['imgUrl']
      u['count'] = userinfo['pageTabs']['count']
      fontCdnUrl = userinfo['obfuseData']['fontCdnUrl']
      # u['fontCdnUrl'] = userinfo['obfuseData']['fontCdnUrl']

      # 映射表 网页字符:明文
      key_map = {}
      # 动态获取字体
      font_content = requests.get(fontCdnUrl).content
      font = TTFont(BytesIO(font_content))# 从内存加载
      code = font.getGlyphOrder()# 固定顺序的字符编码列表(去除第一个无效字符)
      nums = [# 固定顺序明文列表
            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.', 'w', 'k',
            'm', '+'
      ]
      temp = dict(zip(code, nums))# 临时映射(固定顺序),字符编码uni****:明文
      res = font.getBestCmap()# 获取关键映射,网页字符转码:字符编码uni****
      for k, v in res.items():
            # 网页字符去除前缀,再从16进制转10进制,就得到k,这里逆向写,即k转16进制后拼接前缀
            kk = '&#' + str(hex(k))
            # 从临时映射中根据字符编码uni****取出明文
            key_map = temp
      # print(len(key_map), key_map)
      re_html_code = re.compile(r'&#x[\da-f]{4}')
      # for word in ['fan', 'follow', 'photo', 'collect']:# 遍历需要用到的字体加密的参数
      for word in ['fan', 'follow']:# 遍历需要用到的字体加密的参数
            # ('photo', 'collect'这两个重复了,可以不要)
            text = userinfo['obfuseData']
            words = re_html_code.findall(text)
            u = ''.join(key_map for i in words)
      return u
    except Exception:
      return {'error': '出错!'}

```

ermao 发表于 2021-3-11 08:38

kiopc 发表于 2021-3-10 18:11
import fc2
这个是啥?

阿里云的SDK,用于设置环境变量,本地运行的或者不用环境变量的可以删掉

hsfy1990 发表于 2020-10-25 20:45

占个楼{:1_893:{:1_893:}

jinhuiyi521 发表于 2020-10-25 20:46

虽然看不明白,感谢楼主分享

mzhsohu 发表于 2020-10-25 21:11

感谢分享~!

薛定谔与猫 发表于 2020-10-25 21:11

太优秀了,谢谢分享

我是破解小白 发表于 2020-10-25 21:31

小白看不明白,感觉很厉害的样子:lol

Βigbang 发表于 2020-10-25 21:37

感谢感谢感谢

geniusrot 发表于 2020-10-25 22:01

二毛大佬二逼,就是,我也看不懂phyton

jqdgjj 发表于 2020-10-25 22:02

看起来不错。

lidong963812 发表于 2020-10-25 23:29

谢谢楼主{:301_975:}
页: [1] 2 3
查看完整版本: 快手解析作品/用户信息[字体反爬]