pdd滑块分析逆向

本文详细解析了拼多多滑块验证码的JS加密过程,涉及crawlerInfo、password、riskSign的处理,包括RSA加密的C函数和AES加密的L函数,以及U函数用于生成key和iv。作者提供了如何获取图片、验证滑块和轨迹的步骤,最终目标是帮助读者理解和实现滑块验证码的破解技术。
摘要由CSDN通过智能技术生成
前提 此次分析我已经做出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"));

整合再结合轨迹即可 实现 。

效果图

  • 48
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
易语言中的PDD滑块模块是一种用于创建可供用户拖动操作的滑块控件的模块。它可以用于制作需要用户输入范围值的界面,例如音量调节、亮度调节等。以下是其主要功能和使用方法。 PDD滑块模块的主要功能有两个方面:设置和获取滑块的属性,以及处理用户的滑动事件。 首先,我们可以通过设置滑块的属性来调整其外观和行为。例如,可以设置滑块的位置、大小、背景颜色等。还可以设置滑块的最小值和最大值,以及默认值,用于定义滑块的取值范围。此外,还可以设置滑块的步进值,用于定义滑块在拖动过程中每次变化的数值。 其次,我们可以通过处理滑块的滑动事件来获取滑块的当前状态和数值。当用户在滑块上拖动时,滑块会触发滑动事件,我们可以在事件处理函数中获取滑块的当前值,并根据需要进行相应的操作,例如实时更新界面显示或执行其他相关任务。 使用PDD滑块模块的一般步骤如下: 1. 引入PDD滑块模块:在易语言中,我们可以使用 `LoadModule` 函数引入PDD滑块模块。 2. 创建滑块控件:使用 `CreateSlider` 函数创建滑块控件,并设置其位置、大小等属性。 3. 设置滑块属性:可以使用 `SetSlider` 函数设置滑块的最小值、最大值、默认值、步进值等属性。 4. 处理滑动事件:通过编写滑动事件处理函数来响应用户的滑动操作,并在函数中获取当前滑块的数值,并进行相应的处理。 总之,易语言的PDD滑块模块是一种功能强大的控件模块,可以帮助我们实现滑块控件的创建和操作。它提供了丰富的属性设置和事件处理函数,使我们能够轻松地创建滑块控件,并根据需要对用户的滑动操作进行响应和处理。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值