谷歌翻译来一波
分析抓包
翻译类型的网站一般都是 ajax 方式加载翻译的结果,应对这种类型的网站,通常采用抓包的方式,获取请求数据的 API ,很容易发现,api为
再看此链接的参数:经过测试,tk 为一个加密的参数,需要破解。
到这步往下一般有两种方式
- 全局搜索关键参数:可以自己尝试一下,在此处,这种方法行不通
- 打上xhr全局断点,根据函数调用栈,找到加密函数,话不多说,直接上图,
- 当调用到函数 YE 时,此处观察变量 c,在
c += XE(d);
前,变量 c中无 tk参数,经过c += XE(d);
后,c中增加了tk参数,由此判断,加密函数为XE(d)
,此处打上断点,进入其中很容易找到了加密函数
- 后面的任务就是观察js代码了,此处就是翻译成python的代码,tkk 在谷歌翻译首页源码中可以找到,接下来就可以愉快的开始了
def get_tk(self, a, tkk):
def get_a(a, b):
for i in range(0, len(b) - 2, 3):
d = b[i + 2]
d = ord(d[0]) - 87 if "a" <= d else int(d)
d = a >> d if "+" == b[i + 1] else a << d
a = a + d & 4294967295 if "+" == b[i] else a ^ d
return a
b = tkk = "443192.495816626"
c = '&tk='
d = b.split('.')
b = int(d[0])
e = list(a.encode())
a = b
for i in range(len(e)):
a += e[i]
a = get_a(a, "+-a^+6")
a = get_a(a, "+-3^+b+-f")
a ^= int(d[1]) or 0
a = (a & 2147483647) + 2147483648
0 > a and a
a %= 1e6
return c + (str(int(a)) + "." + str(int(a) ^ b))