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

Python爬虫破解JS混淆加密及字体反爬技巧

最编程 2024-08-14 07:06:29
...

1.JS混淆加密

我们之前爬取有道翻译的翻译内容时,我们通过fiddler抓取url地址时,我们发现如果我们直接将相关参数传入,会报错。只是因为,某些参数是变化的。因此,我们需要解读JS文件,取得相关参数的生成算法,利用python生成参数,再传入。

我们继续以有道翻译为例讲解如何获取相关参数的生成算法,并利用python生成参数。

首先,我们使用fiddler抓取翻译所需要的全部参数,

data = {
    "i": keyword,  # 翻译内容
    "from": "AUTO",  # 源语言,固定值
    "to": "AUTO",  # 目标语言,固定值
    "smartresult": "dict",  # 智能结果,固定值
    "client": "fanyideskweb",  # 客户端,固定值
    "salt": res['salt'],  # 加密用的盐,这个值变化
    "sign": res['sign'],  # 签名字符串,这个值变化
    "ts": res['ts'],  # 毫秒时间戳,这个值变化
    "bv": res['bv'],  # 未知值,这个值变化
    "doctype": "json",  # 文档类型,固定值
    "version": "2.1",  # 版本,固定值
    "keyfrom": "fanyi.web",  # 键的来源,固定值
    "action": "FY_BY_CLICKBUTTION",  # 操作动作,固定值
}

通过分析参数我们发现需要获取salt、sign、ts和bv参数的算法。

我们进入有道翻译页面,右键“检查”-“网络”找到所有的js文件,依次进入并搜索salt、sign。

经过搜索,我们发现fanyi.js文件中有salt和sign,将fanyi.js下载并格式化。在格式化后的js文件中搜索salt,我们可以找到这样一个函数,

function (e, t) {
    var n = e("./jquery-1.7");  // e为要翻译的内容
    e("./utils");
    e("./md5");
    var r = function (e) {
        var t = n.md5(navigator.appVersion),  // t参数为经过md5加密后的浏览器版本
            r = "" + (new Date).getTime(),  // r参数为时间戳
            i = r + parseInt(10 * Math.random(), 10);  // i参数为时间戳加0-10之间随机整数
        return {
            ts: r,  // ts参数为r
            bv: t,  // bv参数为t
            salt: i,  // salt参数为i
            // sign参数为md5加密
            sign: n.md5("fanyideskweb" + e + i + "mmbP%A-r6U3Nw(n]BjuEU")
        }
    };
    t.recordUpdate = function (e) {
        var t = e.i,
            i = r(t);
        n.ajax({
            type: "POST",
            contentType: "application/x-www-form-urlencoded; charset=UTF-8",
            url: "/bettertranslation",
            data: {
                i: e.i,
                client: "fanyideskweb",
                salt: i.salt,
                sign: i.sign,
                ts: i.ts,
                bv: i.bv,
                tgt: e.tgt,
                modifiedTgt: e.modifiedTgt,
                from: e.from,
                to: e.to
            },
            success: function (e) {
            },
            error: function (e) {
            }
        })
    },

经过分析js代码,我们可以获取salt、sign、ts和bv参数的算法。我们下面使用python生成这些参数,

import hashlib
import time
import random


def handlerSignSalt(e):
    navigator_appVersion = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36 Edg/83.0.478.56"
    t = hashlib.md5(navigator_appVersion.encode('utf-8')).hexdigest()
    r = str(int(time.time() * 1000))  # 当前毫秒的时间戳
    i = r + str(random.randint(1, 10))  # 盐值
    return {
        'ts': r,
        'bv': t,
        'salt': i,
        'sign': hashlib.md5(str("fanyideskweb" + e + i + "mmbP%A-r6U3Nw(n]BjuEU").encode('utf-8')).hexdigest(),
    }

这样,我们就获取到了所有的参数,下面对有道翻译进行爬取,完整代码如下,

import requests
import hashlib
import time
import random


# e为要翻译的内容
def handlerSignSalt(e):
    navigator_appVersion = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36 Edg/83.0.478.56"
    t = hashlib.md5(navigator_appVersion.encode('utf-8')).hexdigest()
    r = str(int(time.time() * 1000))  # 当前毫秒的时间戳
    i = r + str(random.randint(1, 10))  # 盐值
    return {
        'ts': r,
        'bv': t,
        'salt': i,
        'sign': hashlib.md5(str("fanyideskweb" + e + i + "mmbP%A-r6U3Nw(n]BjuEU").encode('utf-8')).hexdigest(),
    }


headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36 Edg/83.0.478.56",
    "Referer": "http://fanyi.youdao.com/",  # 来源是否正确
    "Cookie": "OUTFOX_SEARCH_USER_ID=-411992782@10.108.160.17; JSESSIONID=aaai8_KoEvdXw_a3gTCnx; OUTFOX_SEARCH_USER_ID_NCOO=678424169.4655154; ___rl__test__cookies=1594990510295",
}

url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"

keyword = input("请输入要查询的单词:")

res = handlerSignSalt(keyword)

data = {
    "i": keyword,  # 翻译内容
    "from": "AUTO",  # 源语言
    "to": "AUTO",  # 目标语言
    "smartresult": "dict",  # 智能结果,固定值
    "client": "fanyideskweb",  # 客户端,固定值
    "salt": res['salt'],  # 加密用的盐,这个值变化
    "sign": res['sign'],  # 签名字符串,这个值变化
    "ts": res['ts'],  # 毫秒时间戳,这个值变化
    "bv": res['bv'],  # 未知值,这个值变化
    "doctype": "json",  # 文档类型
    "version": "2.1",  # 版本,固定值
    "keyfrom": "fanyi.web",  # 键的来源,固定值
    "action": "FY_BY_CLICKBUTTION",  # 操作动作,固定值
}

response = requests.post(url, data=data, headers=headers)

dic = response.json()
print(dic['translateResult'][0][0]['tgt'])

2.字体反爬

有些网站会通过给关键字自定义字体,然后使用字体code名替换内容来使爬网站的人爬取无效字符,进而阻止一部分人爬取网站。例如,我们打开实习僧网站的其中一页,查看代码。我们看到其中的数字无法直接读取。
在这里插入图片描述
为了解决这个问题,我们需要对字体进行解析。

考虑网页渲染性能,通常把自定义的字体编码成base64,因此,我们可以在网页源代码中中查找@font-face获取编码再用python进行解码然后保存到本地,

import base64
from fontTools.ttLib import TTFont

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36 Edg/83.0.478.56",
}

fontFace = "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"

# 解码base64字体文件
font_bytes = base64.b64decode(fontFace)

# 保存到本地文件
with open("shixiseng.ttf", "wb") as fp:
    fp.write(font_bytes)

之后,将字体文件转成xml,需要安装fontTools库,

pip install fontTools

字体文件转成xml,

from fontTools.ttLib import TTFont

baseFont = TTFont("shixiseng.ttf")
baseFont.saveXML('shixiseng.xml')  # 将字体文件保存为xml文件

打开xml文件,我们可以看到有字体的cmap和glyf。其中,cmap中存放的是code和name之间的关系,glyf中存放的是字体形状和name的关系。

code是显示在网页中的代码,网站开发者可能会通过修改code来干扰我们爬取。但是字体最终的形状是不变的,我们可以通过分析字体,得出每个字体形状对应的文字,然后保存到一个字典中。以后再请求网页的时候,就进行反向解析,先获取字体的形状,再通过字体形状反向获取代号所对应的具体文字内容。

代码如下,

import requests
import base64
from fontTools.ttLib import TTFont
import re
import io

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36 Edg/83.0.478.56",
}

fontFace = "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"

# 解码base64字体文件
font_bytes = base64.b64decode(fontFace)

# 将字体文件保存本地
with open("shixiseng.ttf", "wb") as fp:
    fp.write(font_bytes)

# 获取形状对象
baseFont = TTFont('shixiseng.ttf')
baseGlyf = baseFont['glyf']

# 定义内容和字体形状的映射关系
baseFontMap = {
    0: baseGlyf['uni30'],
    1: baseGlyf['uni31'],
    2: baseGlyf['uni32'],
    3: baseGlyf['uni33'],
    4: baseGlyf['uni34'],
    5: baseGlyf['uni35'],
    6: baseGlyf['uni36'],
    7: baseGlyf['uni37'],
    8: baseGlyf['uni38'],
    9: baseGlyf['uni39'],
}

# 爬取网页
url = "https://www.shixiseng.com/intern/inn_t2sefv2wegpw"
resp = requests.get(url, headers=headers)
text = resp.text

# 获取当前页面的字体文件
result = re.search(r'font-family:myFont; src: url\("data:application/octet-stream;base64,(.+?)"\)', text)  # 使用正则表达式获取字体编码
font_face = result.group(1)
b = base64.b64decode(font_face)
currentFont = TTFont(io.BytesIO(b))  # 当前页面的字体
currentGlyf = currentFont['glyf']  # 当前字体的所有形状

# 获取code和name的关系
codeNameMap = currentFont.getBestCmap()
for code, name in codeNameMap.items():
    # 获取name和形状的关系
    currentShape 
						

上一篇: 前端和后端数据互相加解密(AES算法):CryptoJS和Java实现

下一篇: js压缩、js混淆、js加密的区别是什么?-解析js混淆的定义