1.分析有道翻译数据包
2.利用python 构造请求资源
3 建立python request请求
4.分析请求数据中的sign
经过断点分析,找出sign参数的加密算法
5.经过分析,参数是利用MD5进行加密算法,利用javascript脚本进行实现
function encrypt1() {
var e=new Date().getTime().toString();
// var key = "1720581446941";
//var key = '1234567890123456';var z='1719908491399'
const d = "fanyideskweb"
, u = "webfanyi"
, p = "client,mysticTime,product"
, m = "1.0.0"
, h = "web"
, g = "fanyi.web"
, f = 1
, b = 1
, v = 1
, A = "wifi"
, y = 0
, t="fsdsogkndfokasodnaso";
var data=`client=${d}&mysticTime=${e}&product=${u}&key=${t}`;
var sign=CryptoJS.MD5(data).toString();
console.log(sign)
//e="1720581446941"
var data={
code:sign,
timestamp:e
}
return data;
}
6.利用数据包对相应数据进行解密
7.经过对解密算法的分析,利用Javascript对返回数据进行解密实现
function decodetext1(context){
let decodeIv="ydsecret://query/key/B*RGygVywfNBwpmBaZg*WT7SIOUP2T0C9WHMZN39j^DAdaZhAnxvGcCY6VYFwnHl";
let Iv=crypto.createHash('md5').update(decodeIv).digest();
// let Buf1=Buffer.alloc(16,Iv);
let decodeKey="ydsecret://query/iv/C@lZe2YzHtZ2CYgaXKSVfsb7Y4QWHjITPPZ0nQp87fBeJ!Iv6v^6fvi2WN@bYpJ4";
let key=crypto.createHash('md5').update(decodeKey).digest();
// var Buf2=Buffer.alloc(16,key);
// console.log(Buf1);
// console.log(Buf2);
const code=crypto.createDecipheriv('aes-128-cbc',Iv,key);
// console.log(code);
let l = code.update(context, "base64", "utf-8");
l += code.final("utf-8");
//console.log(l);
return l;
8.最终通过python调用JavaScript函数的方式,完成逆向实现
import requests
import chardet
import subprocess
import execjs
def testJs():
with open("youdiao.js",'r') as f:
js=execjs.compile(f.read())
res=js.call('encrypt1')
return res
datares=testJs()
print(datares['code'])
print(str(datares['timestamp']))
cookies = {
'OUTFOX_SEARCH_USER_ID_NCOO': '821713325.8217375',
'OUTFOX_SEARCH_USER_ID': '1798672782@116.130.208.116',
'DICT_DOCTRANS_SESSION_ID': 'NDU0M2E2MGEtNDAwYi00OTdhLTkzZDEtNjMxMDdhZmQ4YWU0',
}
headers = {
'Accept': 'application/json, text/plain, */*',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Content-Type': 'application/x-www-form-urlencoded',
# 'Cookie': 'OUTFOX_SEARCH_USER_ID_NCOO=821713325.8217375; OUTFOX_SEARCH_USER_ID=1798672782@116.130.208.116; DICT_DOCTRANS_SESSION_ID=NDU0M2E2MGEtNDAwYi00OTdhLTkzZDEtNjMxMDdhZmQ4YWU0',
'Origin': 'https://fanyi.youdao.com',
'Referer': 'https://fanyi.youdao.com/',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-site',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36',
'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
}
data = {
'i': 'pretty',
'from': 'auto',
'to': '',
'useTerm': 'false',
'dictResult': 'true',
'keyid': 'webfanyi',
'sign': str(datares['code']),
'client': 'fanyideskweb',
'product': 'webfanyi',
'appVersion': '1.0.0',
'vendor': 'web',
'pointParam': 'client,mysticTime,product',
'mysticTime': str(datares['timestamp']),
'keyfrom': 'fanyi.web',
'mid': '1',
'screen': '1',
'model': '1',
'network': 'wifi',
'abtest': '0',
'yduuid': 'abcdefg',
}
response = requests.post('https://dict.youdao.com/webtranslate', cookies=cookies, headers=headers, data=data,verify=False)
context=response.text
print(context)
with open("youdiao.js",'r',encoding='utf-8') as f:
js=execjs.compile(f.read())
print(js)
res=js.call('aaa',response.text)
print(res)