逆向30-有道翻译
1. 分析

载荷

初步分析是只有一个sign需要加密,响应结果需要解密
2. 源码
sign 加密
搜索\bsign:\b

可以看到大部分的参数都在这里了

开工吧
def get_md5(enc_str):
obj = md5()
obj.update(enc_str.encode('utf-8'))
sign = obj.hexdigest()
return sign
# 时间戳
timer = str(int((time.time()*1000))) #1729923018837
data = {
'i': '香蕉',
# 'from': 'auto',
# 'to': '',
# 'useTerm': 'false',
# 'dictResult': 'true',
'keyid': 'webfanyi',
# 'sign': '54b68d99f45a1e071cbe7a2b6a210de4',
'client': 'fanyideskweb',
'product': 'webfanyi',
'appVersion': '1.0.0',
'vendor': 'web',
'pointParam': 'client,mysticTime,product',
'mysticTime': timer,
'keyfrom': 'fanyi.web',
'mid': '1',
'screen': '1',
'model': '1',
'network': 'wifi',
'abtest': '0',
'yduuid': 'abcdefg',
}
# sign
d = "fanyideskweb"
u = "webfanyi"
sign_enc_str = f"client={d}&mysticTime={timer}&product={u}&key=fsdsogkndfokasodnaso"
sign = get_md5(sign_enc_str)
data['sign'] = sign
response = requests.post('https://dict.youdao.com/webtranslate', cookies=cookies, headers=headers, data=data)
print(response.text)
数据解密
获取了上面的加密数据,我们需要对其进行解密

思路一:
上面八个地方打断点,刷新

继续看

key和iv

key和iv的转换函数

代码
def get_g_md5(s):
obj = md5()
obj.update(s.encode('utf-8'))
sign = obj.digest()
return sign
import base64
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
# base64 变种
res = response.text.replace("-","+").replace("_","/")
base64_encrypt_date = res
# (1)base64解码
encrypt_date = base64.b64decode(base64_encrypt_date)
# (2)解密
# 2.1 确认好解密的参数
key = get_g_md5("ydsecret://query/key/B*RGygVywfNBwpmBaZg*WT7SIOUP2T0C9WHMZN39j^DAdaZhAnxvGcCY6VYFwnHl")
iv = get_g_md5("ydsecret://query/iv/C@lZe2YzHtZ2CYgaXKSVfsb7Y4QWHjITPPZ0nQp87fBeJ!Iv6v^6fvi2WN@bYpJ4")
# 2.2 创建AES对象
aes = AES.new(key, AES.MODE_CBC, iv) # key 模式 iv
# 2.3 对数据进行解密
data = aes.decrypt(encrypt_date)
# 2.4 去掉填充
print(data.decode())

浙公网安备 33010602011771号