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函数,结果生成请求链接

变量说明:

  1. 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. 变量参数

    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 fm为函数

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
}

具体步骤如下:

  1. 将请求参数请求函数aF
  2. 函数aF将调用函数$E,并将查询对象传入当作参数
  3. 取出查询内容的值,并将其作为参数传入wu
  4. 函数进行一系列的操作生成加密内容
  5. 将函数加密内容与函数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)相关推荐

  1. 欧盟通用数据保护条例GDPR.docx数据摘要 导读:GDPR通用数据保护条例中文版由中国政法大学互联网金融法律研究院组织翻译, 新法案由11章共99条组成。 GDPR的通过意味着欧盟对个人信息保

    欧盟通用数据保护条例GDPR.docx数据摘要  导读:GDPR通用数据保护条例中文版由中国政法大学互联网金融法律研究院组织翻译, 新法案由11章共99条组成. GDPR的通过意味着欧盟对个人信息保护 ...

  2. Python 大规模异步新闻爬虫、google翻译、百度翻译、有道翻译、百度指数

    参考:https://www.yuanrenxue.com/crawler/news-crawler-urlpool.html url_pool.py # -*- coding: utf-8 -*- ...

  3. 教你找到免费的Google Translate API(谷歌翻译接口)+C#版的Google翻译函数

    http://www.crifan.com/teach_you_how_to_find_free_google_translate_api/ (还没试过有时间试下.....) 今日,在想要在C#中,利 ...

  4. 《SRE:Google运维解密》

    2019独角兽企业重金招聘Python工程师标准>>> 前言 问世近一年以来,<SRE: Google 运维解密>一书销量累计已两万余册.我想首先感谢各位读者对本书的支持 ...

  5. 关于Google翻译和语音朗读功能无法正常使用的说明

    关于Google翻译和语音朗读功能无法正常使用的说明 2022年10月1日,Google突然停止了Google翻译在中国大陆的业务,不再向中国大陆区域提供翻译服务,官方给出的理由是"因为使用 ...

  6. 完美修复google翻译失效的问题

    文章目录 背景 解决方法 ip 源 源代码 技术点 python多线程 海象运算 完美解决 1.延迟较低的ip 2.配置hosts文件, 3.翻译结果 参考 背景 使用chrome的小伙伴应该都知道有 ...

  7. 七麦数据网站的analysis参数解密

    最近在爬取七麦网站的app信息,链接中的url参数中有个analysis参数需要解密,它的值是由动态js文件生成的,这就需要调试js代码了.上网找了很多的博客,都是看他们的教程自己搞定的. https ...

  8. 机器学习原来这么有趣!第五章:Google 翻译背后的黑科技:神经网络和序列到序列学习

    第一章:全世界最简单的机器学习入门指南 https://blog.csdn.net/wskzgz/article/details/89917343 第二章:用机器学习制作超级马里奥的关卡 https: ...

  9. 字节跳动宣布员工福利升级:新增10天“家庭关爱假”;Google翻译中国站点疑似关闭;Qt 6.4 正式发布|极客头条...

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...

最新文章

  1. 查看无线网卡工作模式
  2. 服务器python密码_python实现批量修改服务器密码的方法
  3. 05APR2022 日期格式这样的怎么转换成日期?
  4. 三、自然语言处理研究内容
  5. 99.99%安卓手机存在系统安全漏洞
  6. POJ 2676 Sudoku【DancingLinks,数独】
  7. 页面分栏LayoutInflater
  8. 「镁客·请讲」Visense Studio冯樑杰:游戏基因的VR视频,最好的表现是真人实拍交互...
  9. base64位转成二进制流_你知道 Base64 编码中的 64 指的是什么吗?
  10. air中wav转mp3
  11. @程序员,你真得了解每天打交道的字节吗?
  12. HDU1293+Java+大整数
  13. 【Matlab学习笔记】【编程实例】一(将两幅图像调整为相同的尺寸大小)
  14. 打算开源一个低代码平台,第二天,包含【工作流,业务流,财务,APQC】。技术站 React,typescript,java,mysql
  15. matlab 函数输出 向量,matlab中的函数返回向量
  16. 一个简单的房贷计算器设计
  17. HFSS激励类型----电流源激励
  18. 布局管理器——表格布局
  19. 用手机打开word图表位置很乱_超实用!word、excel、ppt文件互相转换技巧来了
  20. EJB教程_编程入门自学教程_菜鸟教程-免费教程分享

热门文章

  1. 爬去微信小程序服务器代码,Python爬取微信小程序通用方法代码实例详解
  2. android wear恢复出厂,不恢复出厂,用你的新手机连接你的 Wear OS 手表
  3. pythonString
  4. 运维实践 | 使用K3S之快速搭建精简版本K8S集群环境,助力开发测试环境!
  5. 封包工具Enigma Virtual Box
  6. Android 实现简易下载管理器 (暂停、断点续传、多线程下载)
  7. CSDN著名技术专家Visual C++2010开发体验心得——从Visual C++6 0到Visual C++201
  8. PDF如何进行免费合并?
  9. Richard Szeliski 《Computer Vision Algorithms and Applications》Second Edition 计算机视觉算法与应用 第二版
  10. 宽带用户认证管理方式和技术实现探讨