乐分享3

chenzhi2023 / 2023-06-03 / 原文

标题:某度翻译逆向破解sign参数

本文章中所有内容仅供学习交流,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我(1633914619@qq.com)立即删除!

1.python环境提前安装好

2.安装好要用到的第三方模块

pip install execjs
pip install requests

3.加密参数分分析

参数sign,其实它就是一串字符组成,js源码如下

p = n(p, D), p ^= s, 0 > p && (p = (2147483647 & p) + 2147483648), p %= 1e6, p.toString() + "." + (p ^ m)

ts参数其实就是时间戳

4.具体实现代码如下

import execjs
import requests
import time

def gorun():
    word = input("请输入要翻译的字符(中文或英文)\n")
    baidu_js = r'''
var i = '320305.131321201'

function n(r, o) {
    for (var t = 0; t < o.length - 2; t += 3) {
        var a = o.charAt(t + 2);
        a = a >= "a" ? a.charCodeAt(0) - 87 : Number(a), a = "+" === o.charAt(t + 1) ? r >>> a : r << a, r = "+" === o.charAt(t) ? r + a & 4294967295 : r ^ a
    }
    return r
}

function e(r) {
    var o = r.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g);
    if (null === o) {
        var t = r.length;
        t > 30 && (r = "" + r.substr(0, 10) + r.substr(Math.floor(t / 2) - 5, 10) + r.substr(-10, 10))
    } else {
        for (var e = r.split(/[\uD800-\uDBFF][\uDC00-\uDFFF]/), C = 0, h = e.length, f = []; h > C; C++) "" !== e[C] && f.push.apply(f, a(e[C].split(""))), C !== h - 1 && f.push(o[C]);
        var g = f.length;
        g > 30 && (r = f.slice(0, 10).join("") + f.slice(Math.floor(g / 2) - 5, Math.floor(g / 2) + 5).join("") + f.slice(-10).join(""))
    }
    var u = void 0, l = "" + String.fromCharCode(103) + String.fromCharCode(116) + String.fromCharCode(107);
    u = null !== i ? i : (i = window[l] || "") || "";
    for (var d = u.split("."), m = Number(d[0]) || 0, s = Number(d[1]) || 0, S = [], c = 0, v = 0; v < r.length; v++) {
        var A = r.charCodeAt(v);
        128 > A ? S[c++] = A : (2048 > A ? S[c++] = A >> 6 | 192 : (55296 === (64512 & A) && v + 1 < r.length && 56320 === (64512 & r.charCodeAt(v + 1)) ? (A = 65536 + ((1023 & A) << 10) + (1023 & r.charCodeAt(++v)), S[c++] = A >> 18 | 240, S[c++] = A >> 12 & 63 | 128) : S[c++] = A >> 12 | 224, S[c++] = A >> 6 & 63 | 128), S[c++] = 63 & A | 128)
    }
    for (var p = m, F = "" + String.fromCharCode(43) + String.fromCharCode(45) + String.fromCharCode(97) + ("" + String.fromCharCode(94) + String.fromCharCode(43) + String.fromCharCode(54)), D = "" + String.fromCharCode(43) + String.fromCharCode(45) + String.fromCharCode(51) + ("" + String.fromCharCode(94) + String.fromCharCode(43) + String.fromCharCode(98)) + ("" + String.fromCharCode(43) + String.fromCharCode(45) + String.fromCharCode(102)), b = 0; b < S.length; b++) p += S[b], p = n(p, F);
    return p = n(p, D), p ^= s, 0 > p && (p = (2147483647 & p) + 2147483648), p %= 1e6, p.toString() + "." + (p ^ m)
}
    '''

    sign = execjs.compile(baidu_js).call('e', word)  # e是js函数,text传给函数的参数。
    data_s = int(time.time()*1000)
    cookies = {
        'BIDUPSID': 'CC77DB6956C62856E5D7C9D1618362D6',
        'PSTM': '1666873269',
        'BAIDUID': 'BCFB3B7E7F2C9D810B47D13F3B4718CE:FG=1',
        'APPGUIDE_10_0_2': '1',
        'REALTIME_TRANS_SWITCH': '1',
        'FANYI_WORD_SWITCH': '1',
        'HISTORY_SWITCH': '1',
        'SOUND_SPD_SWITCH': '1',
        'SOUND_PREFER_SWITCH': '1',
        'BDUSS': 'dMTFhGZ2dYM01vMXp4UnM1YTVDeUNLU3pQUH5ueDRDY2x2UUxMQmpaMjkwRXRrRVFBQUFBJCQAAAAAAAAAAAEAAAA0Ulqe17fS5MnZxOplbmpveQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL1DJGS9QyRkNn',
        'BDUSS_BFESS': 'dMTFhGZ2dYM01vMXp4UnM1YTVDeUNLU3pQUH5ueDRDY2x2UUxMQmpaMjkwRXRrRVFBQUFBJCQAAAAAAAAAAAEAAAA0Ulqe17fS5MnZxOplbmpveQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL1DJGS9QyRkNn',
        'MCITY': '-257%3A',
        'ZFY': 'd2Y4Y83rlfu0mAcIzZwbBBMZuitpwzu1Ayk2AbDozVo:C',
        'BAIDUID_BFESS': 'BCFB3B7E7F2C9D810B47D13F3B4718CE:FG=1',
        'jsdk-uuid': '0620a6a7-b789-4b8b-a850-eceaf2774203',
        '__bid_n': '18718f5e589442e95d4207',
        'FPTOKEN': 'qbd4YFXayVXgA1Zb0nNUqNsaLcnJjuvmuA2f11xFbDPLK7CE5k9V3FgvuIM7emtj3OrSUyjxzzzgyO2V8SEU3B924YA4N+LO979Pufjl9sRaicy2vGJXcbgjAlj0JCZYtQNuYCFpH8lVQGZ0Vcjak1QMrqUZB6qImwlvqwMwg/olp0hutKxnM24eL9hGfLHDa6b9vvIOYWbZ34BSQ4ZDRCCjYta9ISUhXmwkSgO5ImI1YYXYwYixX4Sv1i2hYVw7p0jwxwCO73051kBMkJrUdd2d3jjWByIoIZNMRwFfwkbracdtyxgQjHtP870fU7QfeE1qola9qgw/1eI05hkLo8Hu7jKWjLsa7T+hojXu9LF7k/ctZdw91kSP+/aKAVIkGcwUqt656mIj4bw+OV07QA==|LnIXWx9ngwfVesMgbL3V3c6SQlVX3VuLxiYCc7JXx5M=|10|954b72c3c2d684ccc7a52217455bfde6',
        'Hm_lvt_64ecd82404c51e03dc91cb9e8c025574': '1684319924,1684373362,1684759309,1684776055',
        'Hm_lpvt_64ecd82404c51e03dc91cb9e8c025574': '1684776055',
        'ab_sr': '1.0.1_ZTA3YWU5NDdiNTlhOGIzNmU1YjQ5NGM0OTUzNzdiMWQ1N2Y2OGQ2M2I3MDQ4YzFhMjFkZmY2NzNlZjUxNTI4YjJhNmZhODE3NTY3NTJjMTQyMGUxZTVjNjJjYzBlMGYxYmIyOTM0YjhiMTRlOWI1ZjlhYWFhZmZhOGMwMWQwZWEyNzZkZGJjMjgwOTk4ZWYyZmE2MGUxMGJiMTk4ZjJjMTYyNzExZTU1NTYwNzg1ODIzY2JlNTExOTc4MWM0OTVk',
    }
    headers = {
        'Accept': '*/*',
        'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
        'Acs-Token': '1684776052661_1684776095746_j/w6JwOXU68M514EinLso3kpVRr9NlB9F9HyBmOIpZSyQnIPC0DbHklIFRD108GxRGOLHsZRv0+QoCLaVxDitsacgABbkNtOJvp0KTov3VqjvMNl9erF0Jko+YEJTNv/t3P04IxkFlDxhZLurRTlJvEgd29WkmRkRJRYtwYCvxixPgzslhhlt7wJShafwn8relGpzcQrcB7Al8hFbjbsgkeGTavfNZIFjurnk0Fo445ZX8GrKkDV2Ewk61Zzh8jBc2JG22mc4AWT39opYkPsUVj89pv02xUTUFQLq5igt37ToPku5bh4fX86+3V6nsBMWFhddb8eXbYRnaV1it/pUQgR1cNiZGYJYwHQ682wYIdQddv1Z77hM4qHcloj8rB5/A0XBBog+WQRgNZynnkI1Wr0OivpUFBv+RDqZnDEKLrSPpZqztH1f2Qr4R30scaJVkzFW2wMurf9xOADvTXHTPjh93g3VoBLxhnorB9rAvOsPelNdmff5LP6YXrc06uO',
        'Cache-Control': 'no-cache',
        'Connection': 'keep-alive',
        'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
        # 'Cookie': 'BIDUPSID=CC77DB6956C62856E5D7C9D1618362D6; PSTM=1666873269; BAIDUID=BCFB3B7E7F2C9D810B47D13F3B4718CE:FG=1; APPGUIDE_10_0_2=1; REALTIME_TRANS_SWITCH=1; FANYI_WORD_SWITCH=1; HISTORY_SWITCH=1; SOUND_SPD_SWITCH=1; SOUND_PREFER_SWITCH=1; BDUSS=dMTFhGZ2dYM01vMXp4UnM1YTVDeUNLU3pQUH5ueDRDY2x2UUxMQmpaMjkwRXRrRVFBQUFBJCQAAAAAAAAAAAEAAAA0Ulqe17fS5MnZxOplbmpveQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL1DJGS9QyRkNn; BDUSS_BFESS=dMTFhGZ2dYM01vMXp4UnM1YTVDeUNLU3pQUH5ueDRDY2x2UUxMQmpaMjkwRXRrRVFBQUFBJCQAAAAAAAAAAAEAAAA0Ulqe17fS5MnZxOplbmpveQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL1DJGS9QyRkNn; MCITY=-257%3A; ZFY=d2Y4Y83rlfu0mAcIzZwbBBMZuitpwzu1Ayk2AbDozVo:C; BAIDUID_BFESS=BCFB3B7E7F2C9D810B47D13F3B4718CE:FG=1; jsdk-uuid=0620a6a7-b789-4b8b-a850-eceaf2774203; __bid_n=18718f5e589442e95d4207; FPTOKEN=qbd4YFXayVXgA1Zb0nNUqNsaLcnJjuvmuA2f11xFbDPLK7CE5k9V3FgvuIM7emtj3OrSUyjxzzzgyO2V8SEU3B924YA4N+LO979Pufjl9sRaicy2vGJXcbgjAlj0JCZYtQNuYCFpH8lVQGZ0Vcjak1QMrqUZB6qImwlvqwMwg/olp0hutKxnM24eL9hGfLHDa6b9vvIOYWbZ34BSQ4ZDRCCjYta9ISUhXmwkSgO5ImI1YYXYwYixX4Sv1i2hYVw7p0jwxwCO73051kBMkJrUdd2d3jjWByIoIZNMRwFfwkbracdtyxgQjHtP870fU7QfeE1qola9qgw/1eI05hkLo8Hu7jKWjLsa7T+hojXu9LF7k/ctZdw91kSP+/aKAVIkGcwUqt656mIj4bw+OV07QA==|LnIXWx9ngwfVesMgbL3V3c6SQlVX3VuLxiYCc7JXx5M=|10|954b72c3c2d684ccc7a52217455bfde6; Hm_lvt_64ecd82404c51e03dc91cb9e8c025574=1684319924,1684373362,1684759309,1684776055; Hm_lpvt_64ecd82404c51e03dc91cb9e8c025574=1684776055; ab_sr=1.0.1_ZTA3YWU5NDdiNTlhOGIzNmU1YjQ5NGM0OTUzNzdiMWQ1N2Y2OGQ2M2I3MDQ4YzFhMjFkZmY2NzNlZjUxNTI4YjJhNmZhODE3NTY3NTJjMTQyMGUxZTVjNjJjYzBlMGYxYmIyOTM0YjhiMTRlOWI1ZjlhYWFhZmZhOGMwMWQwZWEyNzZkZGJjMjgwOTk4ZWYyZmE2MGUxMGJiMTk4ZjJjMTYyNzExZTU1NTYwNzg1ODIzY2JlNTExOTc4MWM0OTVk',
        'Origin': 'https://fanyi.baidu.com',
        'Pragma': 'no-cache',
        'Referer': 'https://fanyi.baidu.com/?aldtype=16047',
        'Sec-Fetch-Dest': 'empty',
        'Sec-Fetch-Mode': 'cors',
        'Sec-Fetch-Site': 'same-origin',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36',
        'X-Requested-With': 'XMLHttpRequest',
        'sec-ch-ua': '"Google Chrome";v="113", "Chromium";v="113", "Not-A.Brand";v="24"',
        'sec-ch-ua-mobile': '?0',
        'sec-ch-ua-platform': '"Windows"',
    }

    params = {
        'from': 'zh',
        'to': 'en',
    }

    data = {
        'from': 'zh',
        'to': 'en',
        'query': word,
        'transtype': 'realtime',
        'simple_means_flag': '3',
        'sign': sign,
        'token': '1ea58eff9a14383f2a1282c23ccfcf91',
        'domain': 'common',
        'ts': data_s,
    }

    response = requests.post('https://fanyi.baidu.com/v2transapi', params=params, headers=headers,cookies=cookies,
                             data=data)
    print("翻译如下:")
    print(response.json()["trans_result"]["data"][0]["dst"])


if __name__ == '__main__':
    while 1:
        gorun()
        print()

 

运行python代码只可实现翻译功能。