本帖最后由 QingYi. 于 2021-7-14 22:29 编辑
首先打开网站:https://fanyi.baidu.com/
打开开发者工具,选择xhr模式(别问,问就是经验告诉我是这边)
我们得到的数据如下:
[Asm] 纯文本查看 复制代码 from: cs
to: zh
query: longtou
transtype: realtime
simple_means_flag: 3
sign: 777440.999377
token: 770e1bc5ccd4a98a51d57ae0aa32a8aa
domain: common
但是我们不知道那边是定死的值,那边是固定的值,怎么搞? 没关系 我们再发一次请求
我们可以看到唯一变化的值只有这个sign哦
来 我们来搜索sign
我就不一个一个找了,这些都是需要大家一个一个去找的,我就直接告诉大家在那边吧
他在这边,我们直接断点打过去
为什么是这里,像不像这个参数?
我们来再次发送请求
看看这些值
sign被丢进去加密了,我们把鼠标放在这个函数上面,看看他是个什么东西
我们把这个函数抠出来
我们看到他提示少了一个i,i在那?
经过对比发现,我们找到了i,我们来看看 这个i的值 他是固定死的呢 还是动态生成的呢?
我们可以看到是固定死的
我们把它拿进来 又提示报错,怎么搞?
提示错误,我们把它删掉就好了
然后告诉我们少了定义 是函数n
后面我们发现这个函数n就在这个函数的上面 把它拿进去
是不是结果就来了?
是不是结果就来了?
附上JS代码,Python自己去做去
[JavaScript] 纯文本查看 复制代码 function e(r) {
var i = "320305.131321201";
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,
p = n(p, F);
return p = n(p, D),
p ^= s,
0 > p && (p = (2147483647 & p) + 2147483648),
p %= 1e6,
p.toString() + "." + (p ^ m)
}
|