1. 参数定位

image-20231015214834638

对请求的链接下断点,跟着栈,就能很容易的追踪到这两个参数的位置

image-20231015230921992

1
2
3
4
5
var bKC6w = window.asrsea(JSON.stringify(i8a), bvh7a(["流泪", "强"]), bvh7a(Re1x.md), bvh7a(["爱心", "女孩", "惊恐", "大笑"]));
e8e.data = j8b.cr9i({
params: bKC6w.encText,
encSecKey: bKC6w.encSecKey
})

先找window.asrsea,发现在上面

image-20231016210017759

代码复制如下,可以发现是一个自执行函数,函数d里面调用的函数都在这里面,nice

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
!function() {
function a(a) {
var d, e, b = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", c = "";
for (d = 0; a > d; d += 1)
e = Math.random() * b.length,
e = Math.floor(e),
c += b.charAt(e);
return c
}
function b(a, b) {
var c = CryptoJS.enc.Utf8.parse(b)
, d = CryptoJS.enc.Utf8.parse("0102030405060708")
, e = CryptoJS.enc.Utf8.parse(a)
, f = CryptoJS.AES.encrypt(e, c, {
iv: d,
mode: CryptoJS.mode.CBC
});
return f.toString()
}
function c(a, b, c) {
var d, e;
return setMaxDigits(131),
d = new RSAKeyPair(b,"",c),
e = encryptedString(d, a)
}
function d(d, e, f, g) {
var h = {}
, i = a(16);
return h.encText = b(d, g),
h.encText = b(h.encText, i),
h.encSecKey = c(i, e, f),
h
}
function e(a, b, d, e) {
var f = {};
return f.encText = c(a + e, b, d),
f
}
window.asrsea = d,
window.ecnonasr = e
}();

2. 函数分析

我们再回到参数加密的地方,window.asrea有四个参数,每个参数由函数生成。后三个参数所以对应的函数,里面传递的是固定的参数,猜测其是固定的。

image-20231016213019815

我们直接在函数d下个断点,第一个参数有了

image-20231025213121928

翻到第二页,看看参数有什么变化

image-20231025213327523

我们翻到第2页,重新下端,发现不变,只是多了一个id,暂时不管。让我们深入分析一下函数d。

函数d里面的i是由随机数生成的,如下。

image-20231016220533605

再来分析函数b,可以很容易看到函数b是aes加密,23333,函数c是rsa加密。

3. 实现

接下来就是常规讨论扣代码了,一杯茶一包烟,一天过去了,,,,

image-20231111102946462

结果如下:

image-20231111104708281