有道翻译 爬虫解密分析 Python获取数据 2023年

本案例提供解密分析思路 最终解密JS代码以及 Python调用代码

   

1 分析包

发包webtranslate,里面有个sign参数看上去需要解密(实际可以固定,后续会分析)

有道翻译 爬虫解密分析 Python获取数据 2023年_第1张图片

返回的包是一个加密字符串需要解密

有道翻译 爬虫解密分析 Python获取数据 2023年_第2张图片

2 分析sign

可以搜索发现sign的位置,使用A函数进行的处理

有道翻译 爬虫解密分析 Python获取数据 2023年_第3张图片

2.1 分析A函数 发现调用了w函数,并且有四个参数d e u t

分别查看 d e u t

d u 固定的

e是时间戳

t 是一个加密的密钥,可以用过git hub上的ast-hook-for-js-RE-master获取到这个值的位置,或者多debug几次这个值是不会变的

有道翻译 爬虫解密分析 Python获取数据 2023年_第4张图片

2.2 分析w函数

w函数就是一个md5加密 由于在a函数中有个时间戳每次都会变 所以w函数每次加密的值也会变,因此最后的sign值每次都不会一样,可以把sign固定

3 分析解密逻辑

由于后台返回的是一个加密字符串,我们需要解密获取明文数据 

有道翻译 爬虫解密分析 Python获取数据 2023年_第5张图片

3.1 获取解密位置

有两种方式获取解密地方一种使用JSON.parse进行JS hook

(function() {
    var _parse = JSON.parse;
    JSON.parse = function(ps) {
        console.log("Hook JSON.parse ——> ", ps);
        debugger;
        return _parse(ps);  // 不改变原有的执行逻辑 
    }
})();

另外可以使用xhr断点方式 

有道翻译 爬虫解密分析 Python获取数据 2023年_第6张图片

 3.2 分析加密函数

通过调试我们可以找到对应的加密地方

有道翻译 爬虫解密分析 Python获取数据 2023年_第7张图片

这里调用了decodeData方法 传入三个参数

其中o 是需要解密的数据

decodeKey decodeIv是固定的

 3.3 分析decodeData函数

有道翻译 爬虫解密分析 Python获取数据 2023年_第8张图片

3.3.1  e.alloc函数分析

 这里 e.alloc我们点入对应的函数

有道翻译 爬虫解密分析 Python获取数据 2023年_第9张图片

e.alloc调用了h.alloc 后续还会调用其他函数 如果一步步搜索下去会调用很多函数 

因此我们往上看下代码

有道翻译 爬虫解密分析 Python获取数据 2023年_第10张图片

可以看到e.Buffer = h,因此我们可以改下下代码

e.alloc(16, y(o)) 改写为 Buffer.alloc(16, y(o))

3.3.2 y(o) 函数分析

md5加密函数 

有道翻译 爬虫解密分析 Python获取数据 2023年_第11张图片

3.3.3 分析函数 r.a.createDecipheriv("aes-128-cbc", a, c)

我们看到r.a有一堆对象

 这个可以用CryptoJS这个包来代替 

有道翻译 爬虫解密分析 Python获取数据 2023年_第12张图片

4 代码处理

JS代码

// 引入CryptoJS
const   CryptoJS = require('crypto')

// o是需要解密的密文
const o = 'Z21kD9ZK1ke6ugku2ccWu4n6eLnvoDT0YgGi0y3g-v0B9sYqg8L9D6UERNozYOHqnYdl2efZNyM6Trc_xS-zKtfTK4hb6JP8XwCzNh0avc8qItQUiIU_4wKKXJlIpvMvfKvJaaZzaX6VEtpkr2FdkfoT_Jgbm2GRSVj3r40autIdlImENG8hC0ZH4ww7utwuTt3Oo_ZpXg0BSq9wePSAB75-ChkiGKF9HTIPeCl2bl84SBD1XDfFCZpkKQhecYSs0JLoXOqP2ltavxRrg58Hp1q5uIgZZ_Oo2-Jmd-t1r4es40drcAq5bjmS62M2VJF8D6ojtOh9JTfNwgzD3CxYn-Pd7-TgHMyNEJEkFXTAyxzpjlFqtrCYDE3SZUYlENkqsL8Wrra1hM-1nTfiB-BLcWAdRBynNpP5_54aq_-GBsq8bB_9yEX5ovzDB4_Ry_spVVuUnb39iplMHCdCnjOD3ngiIDbl9SUz-9npjBX05ZYRdPmFPAl424qdoaxeVqnVoH8jQFPZVqaHMzu4mJg0SICDWFH7GP1zqGRbXd3ESjT_iBInl3gICt2XVuhh_nubcELkTEC6xbqEDRQkPUNMpzXJHjcvsLHtcmSW0S9F0445ho9kT2qZYdMBC3Fs0OaHpUtFu77gZpQn7sGiqh8VliXIcUtfvvop-1c-Vu5QjfUbLn2-s5POR9fGYG6rt6ioe_PGmwWj-Cc00zUM7FybfarKTr4D3Rk57R72qpXN4Ja86ZsCAMmDG-m5z31RQh_V7echJ8Kna3Go3yWKCK4vtSwOWrFhiS5RTz6EkrGc3SkFKbb5vp8Wop_84myBtgnBmj4CczhTq2HcOxrJf4def6yDt2uBxyv4bTVGx9Yx3uB4Gx0iK5kYvfma6B_LnkRWk331wjuXKQtBGYIuWkR8J5QtvBmIRVaa7AA19Z4xMIEAqbcuQ5p4I9FCElthBrJd9YOcouHK4U27xxYWJJXcJoTvzG7zWtiV76fHDeQLgAWvJJ7ww4NFgjhqc6AKA_2afxa4c_lAvVZgFuKL3XSCL7PfKxp6GhjcGKeSRr80PT1gfFw2xi8X4ejjNm_prsUZ'
// 解密Key
decodeKey = 'ydsecret://query/key/B*RGygVywfNBwpmBaZg*WT7SIOUP2T0C9WHMZN39j^DAdaZhAnxvGcCY6VYFwnHl'
// 解密Iv
decodeIv = 'ydsecret://query/iv/C@lZe2YzHtZ2CYgaXKSVfsb7Y4QWHjITPPZ0nQp87fBeJ!Iv6v^6fvi2WN@bYpJ4'


// 封装md5加密函数
function y(e) {
    return CryptoJS.createHash("md5").update(e).digest()
}


function decodeData(t,o, n) {
    // Buffer.alloc代替e.alloc
    const a = Buffer.alloc(16, y(o))
        , c = Buffer.alloc(16, y(n))
        // CryptoJS.createDecipheriv 代替 r.a.createDecipheriv
        , i = CryptoJS.createDecipheriv("aes-128-cbc", a, c);
    let s = i.update(t, "base64", "utf-8");
    return s += i.final("utf-8"),
        s
}

console.log(decodeData(o, decodeKey,decodeIv))

运行结果 

有道翻译 爬虫解密分析 Python获取数据 2023年_第13张图片

Python代码


import execjs
import json
import pprint
import requests
info = input('请输入翻译内容:')
headers = {
    "Accept": "application/json, text/plain, */*",
    "Accept-Language": "zh-CN,zh;q=0.9",
    "Cache-Control": "no-cache",
    "Connection": "keep-alive",
    "Content-Type": "application/x-www-form-urlencoded",
    "Origin": "https://fanyi.youdao.com",
    "Pragma": "no-cache",
    "Referer": "https://fanyi.youdao.com/",
    "Sec-Fetch-Dest": "empty",
    "Sec-Fetch-Mode": "cors",
    "Sec-Fetch-Site": "same-site",
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36",
    "sec-ch-ua": "\"Not/A)Brand\";v=\"99\", \"Google Chrome\";v=\"115\", \"Chromium\";v=\"115\"",
    "sec-ch-ua-mobile": "?0",
    "sec-ch-ua-platform": "\"macOS\""
}
cookies = {
    "OUTFOX_SEARCH_USER_ID": "[email protected]",
    "OUTFOX_SEARCH_USER_ID_NCOO": "725138478.6020422"
}
url = "https://dict.youdao.com/webtranslate"
data = {
    "i": info,
    "from": "auto",
    "to": "",
    "domain": "0",
    "dictResult": "true",
    "keyid": "webfanyi",
    "sign": "3266333232492a8c0c6dfefb36106658",
    "client": "fanyideskweb",
    "product": "webfanyi",
    "appVersion": "1.0.0",
    "vendor": "web",
    "pointParam": "client,mysticTime,product",
    "mysticTime": "1690864071341",
    "keyfrom": "fanyi.web"
}
response = requests.post(url, headers=headers, cookies=cookies, data=data)
print(response.text)


f = open('./dict.js')
js_code = f.read()
print(js_code)
js = execjs.compile(js_code)
n = 'ydsecret://query/iv/C@lZe2YzHtZ2CYgaXKSVfsb7Y4QWHjITPPZ0nQp87fBeJ!Iv6v^6fvi2WN@bYpJ4'
t = 'ydsecret://query/key/B*RGygVywfNBwpmBaZg*WT7SIOUP2T0C9WHMZN39j^DAdaZhAnxvGcCY6VYFwnHl'

words = json.loads(js.call('decodeData', response.text, t, n))
pprint.pprint(words)

运行结果 

有道翻译 爬虫解密分析 Python获取数据 2023年_第14张图片

你可能感兴趣的:(爬虫案例,爬虫,python)