逆向30-有道翻译

1. 分析

image

载荷

image

初步分析是只有一个sign需要加密,响应结果需要解密

2. 源码

sign 加密

搜索\bsign:\b

image

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

image

开工吧

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)

数据解密

获取了上面的加密数据,我们需要对其进行解密

image

思路一:

上面八个地方打断点,刷新

image

继续看

image

key和iv

image

key和iv的转换函数

image

代码

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())
posted @ 2024-10-28 16:06  流年中渲染了微笑  阅读(0)  评论(0)    收藏  举报