js逆向_极验3代滑块(js协议逆向)

声明

原创文章,请勿转载!

本文内容仅限于安全研究,不公开具体源码。维护网络安全,人人有责。

不要做违法的事!

不要做违法的事!

不要做违法的事!

网址:aHR0cHM6Ly93d3cuZ2VldGVzdC5jb20vc2hvdw==

1.首先抓包查看请求流程

在这里插入图片描述
第一次请求获取 gtchallenge 参数,后面会用到。

在这里插入图片描述
在这里插入图片描述
第四次请求返回值,可以看见返回的值比较多也许加密时会用到,用记事本记录下来。(推荐Notepad++

在这里插入图片描述

拖动滑块就能看到请求参数只有W是加密的,找到加密位置即可。

极验3代的滑块图片是乱序的需要还原,轨迹也需要生成,暂时留个坑有时间再更新。

2. 寻找加密参数位置

在这里插入图片描述

寻找加密的方式多种多样看个人喜好,这里从请求发包开始寻找(主要是方便),点击第四次请求的堆栈选项,然后再点击第一个选项,进入js代码。
在这里插入图片描述
在这里插入图片描述

跳转js后点击{}代码格式化,chrome会出现黄色的提示,在提示行打上断点,然后按F10单步执行。

在这里插入图片描述
js跳到这里时,可以看见比较多的明文值(如果你的浏览器不显示可以按Ctrl键),这也是判断加密函数的关键因素,将可疑的值在控制台打印出来,可以看到w,client_type,再对比上面拖动滑块的请求参数,基本可以断定这里就是加密位置。
在这里插入图片描述

h和u生成的位置,都打上断点,然后进行单步调试,首先看u是如何生产的。
在这里插入图片描述

t = undefined
this[$_CBEEc(742)](t) //是随机数
new X()[$_CBEEc(342)] // 加密函数

生成一个16位的随机数,然后将随机数传入new X()[$_CBEEc(342)]进行加密,最后得到256位的字符串。

这里有一个小细节:随机数在后面的请求过程中有2处地方会用到,由于作者使用函数生成,导致2处的随机数不一样,最终请求不成功,经过2天的排查和大佬的指点才找到问题所在,所以随机数取固定值即可。

在这里插入图片描述
u参数的值完成!!
在这里插入图片描述

解密l参数前,需要知道o对象是如何生产的,这也是该案例的核心点。

{
    "lang": "zh-cn",
    "userresponse": "5777757775777783",
    "passtime": 834,
    "imgload": 75,
    "aa": "F(!!Csssssssussstxsssssusts@tstzssztssssusssBsstssssszssssssssxssssM(!!($)).*,,)*,)),)))))**(*)*)*)*v)),)))))))))))))**(*)*))*)),)**)*,F",
    "ep": {
        "v": "7.8.6",
        "$_BHR": false,
        "me": true,
        "tm": {
            "a": 1656134048892,
            "b": 1656134048977,
            "c": 1656134049003,
            "d": 0,
            "e": 0,
            "f": 1656134048893,
            "g": 1656134048899,
            "h": 1656134048900,
            "i": 1656134048900,
            "j": 1656134048911,
            "k": 1656134048903,
            "l": 1656134048911,
            "m": 1656134048969,
            "n": 1656134048976,
            "o": 1656134049009,
            "p": 1656134049118,
            "q": 1656134049118,
            "r": 1656134049118,
            "s": 1656134051244,
            "t": 1656134051245,
            "u": 1656134051245
        },
        "td": -1
    },
    "x04r": "1585951055",
    "rp": "95d1bddba7c049c7d4fb558e08dce1c5"
}

可以看到o对象里面有众多参数

aa 轨迹加密
ep x04r imgload lang 可固定
userresponse 滑动距离 + challenge 加密结果
passtime 拖动时间
rp challenge + gt + passtime 加密结果

在这里插入图片描述

这里有3个参数,还记得之前用记事本保存的返回值吗,这里用到c和s两个值,第一个值也是最重要的轨迹值,通过加密后最终得到相应的值,关于轨迹的生成可以参考大佬的代码

def __ease_out_expo(sep):
    '''
        轨迹相关操作
    '''
    if sep == 1:
        return 1
    else:
        return 1 - pow(2, -10 * sep)

def get_slide_track(distance):
    """
    根据滑动距离生成滑动轨迹
    :param distance: 需要滑动的距离
    :return: 滑动轨迹<type 'list'>: [[x,y,t], ...]
        x: 已滑动的横向距离
        y: 已滑动的纵向距离, 除起点外, 均为0
        t: 滑动过程消耗的时间, 单位: 毫秒
    """

    if not isinstance(distance, int) or distance < 0:
        raise ValueError(f"distance类型必须是大于等于0的整数: distance: {distance}, type: {type(distance)}")
    # 初始化轨迹列表
    slide_track = [
        [random.randint(-50, -10), random.randint(-50, -10), 0],
        [0, 0, 0],
    ]
    # 共记录count次滑块位置信息
    count = 30 + int(distance / 2)
    # 初始化滑动时间
    t = random.randint(50, 100)
    # 记录上一次滑动的距离
    _x = 0
    _y = 0
    for i in range(count):
        # 已滑动的横向距离
        x = round(__ease_out_expo(i / count) * distance)
        # 滑动过程消耗的时间
        t += random.randint(10, 20)
        if x == _x:
            continue
        slide_track.append([x, _y, t])
        _x = x
    slide_track.append(slide_track[-1])
    return slide_track

print(get_slide_track(80))
[[-27, -11, 0], [0, 0, 0], [8, 0, 75], [14, 0, 93], [21, 0, 105], [26, 0, 125], [31, 0, 143], [36, 0, 156], [40, 0, 168], [44, 0, 178], [47, 0, 188], [50, 0, 202], [53, 0, 216], [56, 0, 232], [58, 0, 243], [60, 0, 256], [62, 0, 269], [64, 0, 287], [65, 0, 305], [67, 0, 320], [68, 0, 336], [69, 0, 352], [70, 0, 372], [71, 0, 383], [72, 0, 402], [73, 0, 417], [74, 0, 455], [75, 0, 488], [76, 0, 519], [77, 0, 548], [78, 0, 587], [79, 0, 676], [80, 0, 834], [80, 0, 834]]

传入滑动距离后就能生成轨迹,o对象的passtime值就是取的最后一个值。

至此o对象的参数已经全部组成,然后在进行加密,会得到一个数组
在这里插入图片描述

数组再次加密后就得到值u ,h, l三个值全部拿到,大功告成!

贴出成功的截图:
在这里插入图片描述

3. 结语

本文已结束,如果对你有帮助,记得收藏加关注,也可以关注星球,里面干活满满!

在这里插入图片描述

根据提供的引用内容,美团滑块验证的js逆向过程如下所示: 1. 首先,需要获取主页接口的参数,包括csrf、uuid、token_id和continues等。这些参数可以在第一个链接返回的源码中找到。 2. 接下来,使用这些参数进行登入接口的请求,其中包括两个加密参数password和h5Fingerprint。 3. 然后,通过验证码获取的接口来获取验证码相关的参数,如verifyMethodVersion、slider、yodaVersion、timestamp、sign、ses和requestCode等。 4. 在获取到这些参数后,可以进行验证接口的请求。该请求需要使用到加密参数behavior和_token,以及动态参数v_c和3eac9809,同时还需要在请求头中添加Authencation。 总结起来,美团滑块验证的逆向过程可分为以下步骤: 1. 获取主页参数 2. 逆向pwd和h5Fingerprint 3. 请求page_data链接 4. 逆向Authencation、behavior和_token 5. 发起最终的验证请求 需要注意的是,以上仅是根据提供的引用内容进行的分析,具体的逆向过程可能还需要进一步的研究和分析。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [【2023-03-10】JS逆向之美团滑块](https://blog.csdn.net/qq_26079939/article/details/129442967)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [美团滑块(1-18,js逆向)](https://blog.csdn.net/weixin_44772112/article/details/128721509)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值