本帖最后由 xxob8 于 2026-6-1 09:47 编辑
以下内容主要作为学习使用,如有侵权请联系删除!
网址:aHR0cHM6Ly93d3cuaXNodW1laS5jb20vdHJpYWwvY2FwdGNoYS5odG1s
目前学习接触到的YD、SM验证码都是分2个请求,一个获取验证码图片和ID,另一个对滑动距离、轨迹、滑动时间等进行校验。
1.请求1的步骤:
首先刷新查看网络
发现请求载荷没有校验,响应中的重点是bg、fg和rid,注意响应的格式不是json格式,要先处理。
2.滑动2次对比验证参数
发现重点是wi、gq和vs,callback可以自行构造
启动器打断点跟栈到倒数第二个
发现参数在_0x3943fd这个变量里已经有了
尝试菊部搜索这个变量,在上面发现有1个定义的位置
[Asm] 纯文本查看 复制代码 _0x6b3386[_0x35d8ab[_0x38467c(0x7d6)]][_0x38467c(0x6ad)]((_0x463963 = {
'organization': _0x238258
},
(0x95b * -0x1 + 0x1ad + 0x7ae,_0xaced0['default'])(_0x463963, 'ww', this[_0x38467c(0x17f)](_0x162dbd, _0x35d8ab[_0x38467c(0x32a)])),
(-0x9c5 + 0xf3b + 0x1d2 * -0x3,_0xaced0[_0x35d8ab['NffXw']])(_0x463963, 'bb', this[_0x38467c(0x17f)](_0x177bfb, _0x35d8ab['UXWFc'])),
(0xaa5 * -0x2 + 0x1 * -0x12ad + -0xd * -0x313,_0xaced0[_0x35d8ab['NffXw']])(_0x463963, 'vj', this[_0x38467c(0x17f)](_0x2559f8, _0x35d8ab[_0x38467c(0x9d5)])),
(-0x3 * 0x459 + -0x180d * 0x1 + 0x2518,_0xaced0['default'])(_0x463963, 'hq', this[_0x38467c(0x17f)](_0x2adc2c, '42ccd3c8')),
(-0x6a3 * -0x2 + -0x2 * -0x95 + -0xe70,_0xaced0[_0x35d8ab[_0x38467c(0x7d6)]])(_0x463963, _0x35d8ab[_0x38467c(0x14c)], _0x4c84a0),
(0x12b + 0x25da + 0x593 * -0x7,_0xaced0[_0x35d8ab[_0x38467c(0x7d6)]])(_0x463963, 'rversion', _0x40c9e9),
(0x1 * -0x24cd + 0x201 + 0x22cc,_0xaced0[_0x35d8ab[_0x38467c(0x7d6)]])(_0x463963, _0x35d8ab[_0x38467c(0x9ad)], _0xffbfc0),
(-0x346 + 0x2292 + -0x1f4c,_0xaced0[_0x38467c(0x915)])(_0x463963, 'protocol', _0x38467c(0x1fe)),
(-0xd0b + 0x2 * -0x12b9 + 0x327d,_0xaced0[_0x38467c(0x915)])(_0x463963, _0x35d8ab[_0x38467c(0x3fe)], _0x5801c3),_0x463963), _0x593816);
可以看到一些没有混淆的变量,但是其中没有我们需要的,按照调用方式查看这段代码里确实没有,那么再往前找
发现getMouseAction这个变量名很可能是,鼠标放上去,发现需要的变量就在这里,那么打断点,重新触发,进去看看
控制流+关键词slide+需要的变量名称,说明是不同验证码走的不同流程,在slide和auto_slide都打上断点,最终断在slide里
那么前3行代码就是生成的位置,一个个看下解密后的参数,发现
i参数是距离校验、gq是轨迹校验、vs是滑动时间校验
跟进getEncryptContent看看代码
控制流最终返回_0x4785d3,在5、8两个流程处下断点
发现熟悉的字眼DES,分析发现是标准算法,可用以下代码:
[Asm] 纯文本查看 复制代码 var CryptoJS = require("crypto-js");
function Des(word, key) {
var key_ = CryptoJS.enc.Utf8.parse(key);
var srcs = CryptoJS.enc.Utf8.parse(word);
var encrypted = CryptoJS.DES.encrypt(srcs, key_, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.ZeroPadding
});
return encrypted.toString();
}
注意传入的word要为字符串格式
滑动距离用4d不太准,我用的是元识AI进行识别,后台可以直接预览,而且现在刚好有活动,新人注册得50块额度,直接平替4d了
轨迹的话直接扔几组给ai,生成的又快又好用
滑动时间我是直接取轨迹的最后一组里的时间+50,也算是随机了
完结…… |