作者声明:文章仅供学习交流与参考!严禁用于任何商业与非法用途!否则由此产生的一切后果均与作者无关!如有侵权,请联系作者本人进行删除!
极验滑块(三代)总共需进行三次w参数的扣取,本文来介绍第三次w加密也就是拖动滑动条会发一个ajax.php包携带的w。
一、加密位置定位
第三次w值的包就是第二次ajax.php这个包,和第一次一样,可以从调用堆栈一步一步跟到加密位置,也可以直接搜索w的unicode编码定位到。最终都会定位到I下面这个混淆的栈。打开后发现和前两次的w加密不在同一个js。因此,为了防止变量污染,建议重新建一个文件用来扣这次的w加密。
二、代码扣取
直接在上一章定位的加密位置复制主要代码改写。
function third_w(){
var u = r[$_CAHJS(737)]()
, l = V[$_CAHJS(392)](gt[$_CAIAK(254)](o), r[$_CAIAK(744)]())
, h = m[$_CAIAK(792)](l)
return h+u
}
console.log(third_w());
(1)变量u扣取
第一个变量u不用多说了,和第一次w加密里是一样的,直接跟进去扣出来,同样把te随机变量写死放到外面。
(2)变量l扣取
和第一次一样先把o写死,r[$_CAIAK(744)]()=te,V函数扣下来。
(3)变量h扣取
直接把m定义的地方扣下来就可以了。
剩下的就是重头戏:写死的变量o的扣取了
(4)o变量扣取
o变量与第二个w里的参数类似,发几次包可以观察出变化的有aa轨迹、userresponse,passtime,rp这四个参数。至于变化的tm各种时间戳,imgload图片加载时间,这些都是服务器没法校验的,不管它,还是写死。
4.1 passtime
就是拖动滑块所用时间,这个可以从生成的轨迹里提取。
4.2 rp
rp的赋值就在刚才扣代码的上方, o[$_CAIAK(793)] = X(i[$_CAIAK(122)] + i[$_CAIAK(134)][$_CAIAK(187)](0, 32) + o[$_CAHJS(725)])。和第二次的rp几乎一样,稍微改写扣出X函数就可以了
4.3 userresponse
往上翻一下找到o定义的地方也就找到了userresponse的加密位置,调用了H函数,补上,传入的是t和challenge两个参数,t是所在函数的参数,往上跟一步不难发现它就是滑块移动的距离。同样可以从滑块轨迹里提出来。
剩下的就是重头戏中的重头戏aa轨迹加密的扣取
4.4 aa
不难发现aa=e,e是函数传入的参数,往上跟一步可以找到aa的加密位置。
aa=l = n[$_DAAAU(985)][$_CJJJU(1075)](n[$_CJJJU(985)][$_CJJJU(1073)](), n[$_CJJJU(67)][$_CJJJU(1033)], n[$_DAAAU(67)][$_CJJJU(345)]);扣下来分析改写a=n[$_DAAAU(985)][$_CJJJU(1075)](n[$_CJJJU(985)][$_CJJJU(1073)](), n[$_CJJJU(67)]['c'], n[$_DAAAU(67)]['s']);一共传入三个参数:
第二参数是个数组,第三个参数是字符串,其调用的分别是c,s,不难发现就是上个响应体里的c,s。
第一个参数看起来像是轨迹密文,跟进这个方法首尾赋值语句处下断点看轨迹明文在那里。
找到l轨迹明文,并且其在W的原型链里,那就把W和其原型链扣下来,把轨迹明文作为参数传入,进行改写,另外鼠标悬停n[$_DAAAU(985)]处发现显示的是W对象,那就一起改写。
运行发现缺少ct,扣出ct及其原型链定义一起补上。运行出结果,验证后没有问题。
至此全部参数扣取完毕。
function third_w(i,track) {
i = {
gt: "019924a82c70bb123aae90d483087f94",
challenge: "b3fe414d646fb923ec1701232d0059d87r",
c: [
12,
58,
98,
36,
43,
95,
62,
15,
12
],
s: "46532a29"
}
track=[
[
-40,
-37,
0
],
[
0,
0,
0
],
[
3,
0,
62
],
[
7,
1,
68
],
[
11,
2,
77
],
[
18,
3,
85
],
[
26,
3,
94
],
[
30,
5,
101
],
[
36,
6,
110
],
[
40,
6,
117
],
[
44,
7,
125
],
[
48,
7,
134
],
[
53,
7,
143
],
[
58,
7,
148
],
[
61,
7,
157
],
[
64,
7,
164
],
[
65,
7,
173
],
[
64,
7,
453
],
[
63,
7,
532
],
[
63,
7,
533
]
]
passtime = track[track.length-1][2]
distance = track[track.length-1][0]
aa = W[$_CJFt(236)][$_CJJJU(1075)](W[$_CJFt(236)][$_CJJJU(1073)](track), i['c'], i['s'])
userresponse = H(distance, i['challenge'])
rp = X(i["gt"] + i['challenge']['slice'](0, 32) + passtime);
o = {
"lang": "zh-cn",
"userresponse": userresponse,
"passtime": passtime,
"imgload": 787,
"aa": aa,
"ep": {
"v": "7.9.2",
"$_BIE": false,
"me": true,
"tm": {
"a": 1714119984961,
"b": 1714119985262,
"c": 1714119985262,
"d": 0,
"e": 0,
"f": 1714119984962,
"g": 1714119984962,
"h": 1714119984962,
"i": 1714119984962,
"j": 1714119984962,
"k": 0,
"l": 1714119984964,
"m": 1714119985252,
"n": 1714119985254,
"o": 1714119985268,
"p": 1714119985594,
"q": 1714119985594,
"r": 1714119985601,
"s": 1714119985603,
"t": 1714119985603,
"u": 1714119985603
},
"td": -1
},
"h9s9": "1816378497",
"rp": rp
}
var u = new U()[$_CBFJN(392)](te)
, l = V[$_CAHJS(392)](JSON[$_CAIAK(254)](o), te)
, h = m[$_CAIAK(792)](l)
return aa
}
总体来说第三次的要稍微难一些,但是bilibili上有志远大佬的详细视频解说,如果本文看不明白的说可以看看志远大佬的视频,或者此处留言一起交流!