前提 此次分析我已经做出b站视频大家可以搜索 带带弟弟学爬虫 链接拼多多滑块JS逆向分析(完结)_哔哩哔哩_bilibili 可以找到此次文章的详细内容。
链接:aHR0cHM6Ly9tbXMucGluZHVvZHVvLmNvbS9sb2dpbi8/cmVkaXJlY3RVcmw9aHR0cHMlM0ElMkYlMkZtbXMucGluZHVvZHVvLmNvbSUyRg==

这些是请求图片的数据包,我们从上向下进行分析。
auth接口
1.crawlerInfo
crawlerInfo也是请求头中的Anti-Content的参数所以搞出一个就行了。

加密的位置在messagePack这里。
2.password和riskSign
直接搜索大法即可找到加密位置其实就是一个rsa加密:

a.c函数是:
I = function(e, t) {
if (t.passwordEncrypt)
try {
var n = new i.a;
return n.setPublicKey(t.publicKey),
n.encrypt(e)
} catch (r) {
Object(d.c)(r)
}
return e
}
这个我们直接导入js的加密库即可
const JSEncrypt = require('node-jsencrypt');
// 加密函数
function encryptWithRSA(publicKey, data) {
// 创建 JSEncrypt 实例
const encryptor = new JSEncrypt();
// 设置公钥
encryptor.setPublicKey(publicKey);
// 使用公钥加密数据
const encryptedData = encryptor.encrypt(data);
return encryptedData;
}
obtain_captcha接口

这个接口用来是用来获取图片的
`
//请求时
data = {
"anti_content": "", //可以置空
"verify_auth_token": token,
"captcha_collect": ""//可以置空
}
`
得到的图片 是base64格式 可以进一步处理成图片
user_verify接口
验证滑块和轨迹校验的接口 参数如下图:

我们之前解决了 anti_content , 而verify_auth_token是auth一步骤返回的
所以我们只需要解决 captcha_collect 和 verify_code
1.verify_code

如图所示:
c = (e.deltaRef + s / 2).toFixed(2)
分析得知:e.deltaRef 是图片滑块识别的距离(注意缩放 * 0.85 由于图片大小和实际浏览器显示比例不同) s是定值 48.75
verify_code 即可解决
2.captcha_collect


G.concat([W, N, D, H, L])
是 加密 的数组 包含轨迹等信息:

好我们接着分析 $函数:

定位到这里:
d函数:

手动解混淆
function d(e) {
return c['gzip'](e, {
to: 'string'
})
}
这里我们可以套库 也可以直接扣代码 因为他是webpack形式的 具体细节放b站了。
l函数是aes
l(e, t, n) {
return t && n ? o.a['encrypt'](e, a.a['parse'](t), {
iv: a.a['parse'](n)
})['toString']() : e
}
key和iv是经过前一个数据包vc_pre_ck_b 返回的salt 经过 U函数处理 而成的

U = function(e) {
var A = "bN3%cH2$H1@*jCo$", W = "gl3-w^dN)3#h6E1%";
var t = {
aes_key: A,
aes_iv: W
};
if (!e || 9 !== e.length)
return t;
var n = e.slice(0, 1)
, r = e.slice(1)
, o = r.slice(0, 4)
, i = r.slice(4)
, a = i.split("")
, s = (["a", "b"].includes(n) ? A : W).slice(0, 8)
, c = ["a", "b"].includes(n) ? "aes_key" : "aes_iv"
, u = "";
switch (n) {
case "a":
case "c":
t[c] = s + r;
break;
case "b":
case "d":
for (var l = 0; l < 4; l++)
u += a[o[l]];
t[c] = s + u + i
}
return t
};
console.log(U("c660e87ed"));
整合再结合轨迹即可 实现 。
效果图

本文详细解析了拼多多滑块验证码的JS加密过程,涉及crawlerInfo、password、riskSign的处理,包括RSA加密的C函数和AES加密的L函数,以及U函数用于生成key和iv。作者提供了如何获取图片、验证滑块和轨迹的步骤,最终目标是帮助读者理解和实现滑块验证码的破解技术。
994

被折叠的 条评论
为什么被折叠?



