Google翻译参数解密(11-11)
Google翻译参数解密(11-11)
一.请求过程
文件地址:https://translate.google.com.hk/translate/releases/twsfe_w_20201102_RC00/r/js/translate_m_zh-CN.js:formatted 22573
其中uv
函数调用aF
函数,结果生成请求链接
变量说明:
aF 为函数
aF = function(a, b, c, d, e, f) {c = c.toString();c += $E(d);d = d.toString();var g = "POST";b += "?" + c;2E3 > b.length + d.length && (g = "GET",b += "&" + d,d = "");++a.j;return Tj(b, function(h) {--a.j;e(h)}, g, d, void 0, f) }
变量参数
2.1
a
为对象
2.2 b
为需要翻译语言标识
"auto" // 自动识别
2.3 c
为翻译目标语言标识
"zh-CN" // 中文
2.4 d
变量与c
变量相同
2.5 e
需要翻译的内容
ซิลิโคนสีเงา
2.6 p
为变量数组
["at", "bd", "ex", "ld", "md", "qca", "rw", "rm", "sos", "ss", "t"]
2.7 f
与m
为函数
2.8 h
为未定义
2.9 l
为变量数组
2.10 void 0
为未定义
通过代码调试发现aF(a, r, u, B, t(a.m, a, g, p), void 0)
返回的内容就是整个请求参数,并且此过程就是tk
值生成
二.过程解析
1.aF
函数处理机制
/*a:Object webapp 表明平台b: String /translate_a/singlec:Object 0: "client" 其他请求参数1: "sl"2: "tl"3: "hl"4: "dt"5: "otf"6: "ssel"7: "tsel"8: "kc"d:Object 存储查询内容e:functionf:undefined*/aF = function(a, b, c, d, e, f) {// 将请求参数组成请求链接// client=webapp&sl=auto&tl=zh-CN&hl=zh-CN&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=sos&dt=ss&dt=t&otf=1&ssel=0&tsel=0&kc=1c = c.toString();// d 查询内容c += $E(d);d = d.toString();var g = "POST";b += "?" + c;2E3 > b.length + d.length && (g = "GET",b += "&" + d,d = "");++a.j;return Tj(b, function(h) {--a.j;e(h)}, g, d, void 0, f)
}
2.$E
函数处理机制
将查询内容进行wu
调用
$E = function(a) {a = a.Kb("q").join("");return wu(a)
}
3.Kb
函数处理机制
使用a.Kb("q")
将查询内容生成查询内容的数组,并使用join
函数将查询内容组合赋值a
4.wu
函数处理机制
// a 为查询内容 'Hello'vu = null;
wu = function(a) {// 条件为trueif (null !== vu)var b = vu; // 执行这步else {b = tu(String.fromCharCode(84));var c = tu(String.fromCharCode(75));b = [b(), b()];b[1] = c();b = (vu = window[b.join(c())] || "") || ""}// 注意函数执行完到这里,会产生 b = 445860.98157186// 这是 b 的值是打开翻译网站生成的。详细内容看下面图片// String.fromCharCode(116) 获取ASCII码 116对应的字符// 函数 tu 返回一个函数,如果执行返回函数。就会返回第一次传入的内容var d = tu(String.fromCharCode(116)); // tc = tu(String.fromCharCode(107)); // k d = [d(), d()]; // [t,t]d[1] = c(); // [t,k]// c = "&tk="c = "&" + d.join("") + "=";// b = 445860.98157186 进行切,并生成数组[整数部分字符串,小数部分字符串]d = b.split(".");// 获取整数部分内容,并将内容强制转化成 intb = Number(d[0]) || 0;// 处理查询内容,并生成 efor (var e = [], f = 0, g = 0; g < a.length; g++) {var h = a.charCodeAt(g);128 > h ? e[f++] = h : (2048 > h ? e[f++] = h >> 6 | 192 : (55296 == (h & 64512) && g + 1 < a.length && 56320 == (a.charCodeAt(g + 1) & 64512) ? (h = 65536 + ((h & 1023) << 10) + (a.charCodeAt(++g) & 1023),e[f++] = h >> 18 | 240,e[f++] = h >> 12 & 63 | 128) : e[f++] = h >> 12 | 224,e[f++] = h >> 6 & 63 | 128),e[f++] = h & 63 | 128)}a = b;// 将上一步的e在进行处理生成afor (f = 0; f < e.length; f++)a += e[f],a = uu(a, "+-a^+6");a = uu(a, "+-3^+b+-f");a ^= Number(d[1]) || 0;0 > a && (a = (a & 2147483647) + 2147483648);a %= 1E6;// 生成加密结果 &tk=618649.1031485return c + (a.toString() + "." + (a ^ b))
}
5.tu
函数处理机制
var tu = function(a) {return function() {return a}
}
6.uu
函数处理机制
将参数进行处理,并返回a
uu = function(a, b) {for (var c = 0; c < b.length - 2; c += 3) {var d = b.charAt(c + 2);d = "a" <= d ? d.charCodeAt(0) - 87 : Number(d);d = "+" == b.charAt(c + 1) ? a >>> d : a << d;a = "+" == b.charAt(c) ? a + d & 4294967295 : a ^ d}return a
}
具体步骤如下:
- 将请求参数请求函数
aF
- 函数
aF
将调用函数$E
,并将查询对象传入当作参数 - 取出查询内容的值,并将其作为参数传入
wu
- 函数进行一系列的操作生成加密内容
- 将函数加密内容与函数
aF
中的变量c
组成完整的请求链接,完成请求
三.加密代码实现
1.python代码
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# Author LQ6Himport execjs.runtime_namesdef Init_JS():with open('google.js','r',encoding='utf-8') as f:js = execjs.compile(f.read())return jsdef wu(keyword):c = '/translate_a/single?client=webapp&sl=auto&tl=zh-CN&hl=zh-CN&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=sos&dt=ss&dt=t&otf=1&pc=1&ssel=0&tsel=0&kc=2'js = Init_JS()# 打开翻译网页内容,第一步获取内容ttk = '445860.98157186'# 将 tk内容与c 拼接生成请求urltk = js.call('params',keyword,ttk)print(tk)print(c + tk)wu('ซิลิโคนสีเงา')
2.js代码
function uu (a,b) {for (var c = 0; c < b.length - 2; c += 3) {var d = b.charAt(c + 2);d = "a" <= d ? d.charCodeAt(0) - 87 : Number(d);d = "+" == b.charAt(c + 1) ? a >>> d : a << d;a = "+" == b.charAt(c) ? a + d & 4294967295 : a ^ d}return a}function params(a,ttk) {var c = "&tk=";var d = ttk.split(".");var b = Number(d[0]) || 0;for (var e = [], f = 0, g = 0; g < a.length; g++) {var h = a.charCodeAt(g);128 > h ? e[f++] = h : (2048 > h ? e[f++] = h >> 6 | 192 : (55296 == (h & 64512) && g + 1 < a.length && 56320 == (a.charCodeAt(g + 1) & 64512) ? (h = 65536 + ((h & 1023) << 10) + (a.charCodeAt(++g) & 1023),e[f++] = h >> 18 | 240,e[f++] = h >> 12 & 63 | 128) : e[f++] = h >> 12 | 224,e[f++] = h >> 6 & 63 | 128),e[f++] = h & 63 | 128)}a = b;for (f = 0; f < e.length; f++)a += e[f],a = uu(a, "+-a^+6");a = uu(a, "+-3^+b+-f");a ^= Number(d[1]) || 0;0 > a && (a = (a & 2147483647) + 2147483648);a %= 1E6;return c + (a.toString() + "." + (a ^ b))}
3.请求结果
Google翻译参数解密(11-11)相关推荐
- 欧盟通用数据保护条例GDPR.docx数据摘要 导读:GDPR通用数据保护条例中文版由中国政法大学互联网金融法律研究院组织翻译, 新法案由11章共99条组成。 GDPR的通过意味着欧盟对个人信息保
欧盟通用数据保护条例GDPR.docx数据摘要 导读:GDPR通用数据保护条例中文版由中国政法大学互联网金融法律研究院组织翻译, 新法案由11章共99条组成. GDPR的通过意味着欧盟对个人信息保护 ...
- Python 大规模异步新闻爬虫、google翻译、百度翻译、有道翻译、百度指数
参考:https://www.yuanrenxue.com/crawler/news-crawler-urlpool.html url_pool.py # -*- coding: utf-8 -*- ...
- 教你找到免费的Google Translate API(谷歌翻译接口)+C#版的Google翻译函数
http://www.crifan.com/teach_you_how_to_find_free_google_translate_api/ (还没试过有时间试下.....) 今日,在想要在C#中,利 ...
- 《SRE:Google运维解密》
2019独角兽企业重金招聘Python工程师标准>>> 前言 问世近一年以来,<SRE: Google 运维解密>一书销量累计已两万余册.我想首先感谢各位读者对本书的支持 ...
- 关于Google翻译和语音朗读功能无法正常使用的说明
关于Google翻译和语音朗读功能无法正常使用的说明 2022年10月1日,Google突然停止了Google翻译在中国大陆的业务,不再向中国大陆区域提供翻译服务,官方给出的理由是"因为使用 ...
- 完美修复google翻译失效的问题
文章目录 背景 解决方法 ip 源 源代码 技术点 python多线程 海象运算 完美解决 1.延迟较低的ip 2.配置hosts文件, 3.翻译结果 参考 背景 使用chrome的小伙伴应该都知道有 ...
- 七麦数据网站的analysis参数解密
最近在爬取七麦网站的app信息,链接中的url参数中有个analysis参数需要解密,它的值是由动态js文件生成的,这就需要调试js代码了.上网找了很多的博客,都是看他们的教程自己搞定的. https ...
- 机器学习原来这么有趣!第五章:Google 翻译背后的黑科技:神经网络和序列到序列学习
第一章:全世界最简单的机器学习入门指南 https://blog.csdn.net/wskzgz/article/details/89917343 第二章:用机器学习制作超级马里奥的关卡 https: ...
- 字节跳动宣布员工福利升级:新增10天“家庭关爱假”;Google翻译中国站点疑似关闭;Qt 6.4 正式发布|极客头条...
「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...
最新文章
- 自动化部署之jenkins
- 《从Paxos到ZooKeeper 分布式一致性原理与实践》读书笔记
- python基础-02
- reactor模型_Reactor模式以及Netty中的应用
- 有哪些相见恨晚的运动常识
- 【Linux】Centos7重启网卡失败
- nginx访问量统计
- 用matlab解拉格朗日,用MATLAB实现拉格朗日插值
- 【网络基础知识】VLAN技术介绍(详细)
- 【蓝桥杯】基础练习 十六进制转八进制
- excel表格横向纵向变换_excel2016如何把纵向的数据变为横向
- adobe illustrator软件能做什么
- 华为OJ(素数伴侣)
- 中国建成世界海中最高5G基站 采用微波传输方案
- 钢铁侠材质制作——3、基础光照模型实现
- istqb纸质证书_高大上但含金量极高的ISTQB认证考试容易过吗
- 【产业互联网】源码资本眼中的产业互联网:连接赋能构建生态
- 前端实习生需要到达什么水平?
- 51单片机 蜂鸣器播放提示音
- TextView 中文本内容换行
热门文章
- Excel嵌入网页(一)
- qt 绘制消息框_Qt显示带文本输入的消息框
- 算法:最长回文子串(js)
- 从PayPal提现到香港招行一卡通港币,再兑换为内地招行一卡通人民币
- 云中数据_免费备份和共享云中数据的最佳网站
- 百练/ 北京大学2016研究生推免上机考试(校内)D: 仙岛求药(广度优先搜索)
- 什么是MD5 什么是SHA-1 如何校验这些Hash
- bzoj 3362: [Usaco2004 Feb]Navigation Nightmare 导航噩梦(加权并查集)
- Wireshark抓包——TCP协议分析
- spring boot 獲取屏幕寬度_Redmi K30S至尊纪念版的屏幕有多好?有些吓人