前言
剛沒事做了一下有道翻譯參數(shù)的破解,在這大致思路,也算是記錄一下吧(要是有什么不對的地方,還請斧正)。此次的目標是網(wǎng)頁端的有道翻譯。閑話不多說,進入正題(各位看官覺得有用的話歡迎點個喜歡哇)
分析
老規(guī)矩,找到數(shù)據(jù)接口,如圖:

1.png
可以看到,是以POST方式提交的數(shù)據(jù),繼續(xù),看到DATA部分。

2.png
看到這里,這些參數(shù)除其中i,salt,sign三個參數(shù)外,其他在多次翻譯時都不會改變。顯而易見,i是我們需要翻譯的內(nèi)容。那么salt是什么呢,其實熟練地話能很容易看出來是一個時間戳??墒撬鼮槭裁疵麨閟alt呢?不由得與下面的sign聯(lián)想到一起,是不是有py交易呢?sign類似于某個字符加salt的md5值。暫時是推測,接下來驗證。
找到發(fā)起這一請求的js,格式化后打開。搜索sign這一參數(shù),很幸運,代碼沒有混淆,沒有加密,很規(guī)范,這才是人看的代碼,哈哈。

3.png
看到代碼,是不是有一種豁然開朗的感覺,把其中的關(guān)鍵代碼截取出來:
u = "fanyideskweb"
c = i.deEight("rY0D^0'nM0}g5Mm1z%1G4"),
var g = n.md5(u + d + f + c);
/*sign是u+d+f+c的md5值
d 即待翻譯的內(nèi)容
f是時間戳
c, u是固定的字符串
*/
e("/output/output").translate({
i: d,
from: s,
to: l,
smartresult: "dict",
client: u,
salt: f,
sign: g,
doctype: "json",
version: "2.1",
keyfrom: "fanyi.web",
action: t,
typoResult: !0
})
至此,所有的關(guān)鍵參數(shù)已經(jīng)被分析出來了,接下來就是Python的代碼實現(xiàn)了,同樣,只寫關(guān)鍵代碼(我懶,每次都是大晚上的碼字- -)
'''
Created by Chen
'''
import hashlib
import time
def createData(transStr):
'''
待翻譯的內(nèi)容
:param transStr:
:return: dict
'''
salt = str(int(time.time()*1000))
client = 'fanyideskweb'
a = "rY0D^0'nM0}g5Mm1z%1G4"
md5 = hashlib.md5()
digStr = client+transStr+salt+a
md5.update(digStr)
sign = md5.hexdigest()
data = {
'i': transStr ,
'from': 'AUTO',
'to': 'AUTO',
'smartresult': 'dict',
'client': 'fanyideskweb',
'salt': salt,
'sign': sign,
'doctype': 'json',
'version': '2.1',
'keyfrom': 'fanyi.web',
'action': 'FY_BY_CL1CKBUTTON',
'typoResult': 'true'
}
return data