有道词典js

一、分析

1、打开开发者工具,输入dog,会异步加载一个请求,查看请求,post请求且携带了一些参数

i: dog
from: AUTO
to: AUTO
smartresult: dict
client: fanyideskweb
salt: 16500192809287
sign: 6bbe942069c6c0c3b9210b9641ea472a
lts: 1650019280928
bv: 8c5b4ecb9f7fdfe6b2997ab984775a98
doctype: json
version: 2.1
keyfrom: fanyi.web
action: FY_BY_REALTlME

2、在输出cat,发现只有,i、salt、sign、lts不同

3、猜想这些是需要携带的主要参数,而且被加密了然后全局搜索salt,跟进去

4、在js代码中找salt、sign等参数,看到md5基本上就可以确定是加密的地方了(这个得根据经验判断)

5、可以看出salt: i,i又等于r + parseInt(10 * Math.random(), 10);,r又等于"" + (new Date).getTime()

6、我们需要一个个分析,在控制台中打印(new Date).getTime(),像是时间戳(可以用其他脚本去验证下)

7、在控制台中打印parseInt(10 * Math.random(), 10),发现是随机数0-10(10不取)中随机一个数

8、e没有发现参数直接在这后面下断点,看看e是什么,发现就是我们需要翻译的单词

9、就此我们得到了i、r、e、,sign就是md5加密,可以用python模拟加密

二、写代码,模拟请求加密过程

import time
import random
import requests
import hashlib

headers = {
"Accept": "application/json, text/javascript, */*; q=0.01",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
"Connection": "keep-alive",
"Content-Length": "237",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"Cookie": "_ga=GA1.2.616862958.1647594822; OUTFOX_SEARCH_USER_ID_NCOO=1147769754.1075926; OUTFOX_SEARCH_USER_ID=585241870@10.108.162.139; JSESSIONID=aaazFQZe9jgXm-j3qPSay; fanyi-ad-id=305560; fanyi-ad-closed=0; ___rl__test__cookies=1650017872338",
"Host": "fanyi.youdao.com",
"Origin": "https://fanyi.youdao.com",
"Referer": "https://fanyi.youdao.com/",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36 Edg/100.0.1185.39",
"X-Requested-With": "XMLHttpRequest",
}

word = input("请输入需要翻译的单词:")
# js的时间戳只有13位,所以我们也只要13位,再转换成字符
ts = str(int(time.time()*1000))
#salt在时间戳的后面加上一个随机数
salt = ts + str(random.randint(0,9))
#md5加密方式照抄
str_ = "fanyideskweb" + word + salt + "Ygy_4c=r#e#4EX^NUGUc5"
#python 模拟md5加密
md = hashlib.md5()
md.update(str_.encode())
sign = md.hexdigest()


data = {
"i": word,
"from": "AUTO",
"to": "AUTO",
"smartresult": "dict",
"client": "fanyideskweb",
"salt": salt,
"sign": sign,
"lts": ts,
"bv": "8c5b4ecb9f7fdfe6b2997ab984775a98",
"doctype": "json",
"version": "2.1",
"keyfrom": "fanyi.web",
"action": "FY_BY_REALTlME",
}

#请求数据
url = "https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"
a = requests.post(url=url,data=data,headers=headers).json()
print(a)

posted @ 2022-04-15 19:26  lnterpreter  阅读(41)  评论(0编辑  收藏  举报