乐分享3
标题:某度翻译逆向破解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代码只可实现翻译功能。