某巢登录滑块逆向–python还原

声明

本文仅供参考学习,请勿用于其他途径,违者后果自负!

网站地址:aHR0cHM6Ly9mY2JveC5jb20vcGFnZXMvdXNlci9sb2dpbi5odG1s


滑块整体流程分析:

1、携带随机UUID发送请求,获取验证码图片及其他参数信息(checkId,clientIp,key,pointX,pointY等,后面分析都需要用到)经过测试UUID不能重复使用,服务器会检测是否被使用过。

2.滑动验证码后生成加密参数,发送请求进行验证码滑动校验。下图代表校验通过,如果success=false 则校验不通过,并且不会返回token值

3、校验请求里的加密参数还原

加密位置定位不做详细描述,这里跟栈,打断点就可以定位到加密为止。

这里需要注意,是对第1个获取验证码请求返回的几个参数拼接,并且最后拼接了滑动轨迹。还原如下:

clientIp + checkId + UUID + 滑动轨迹。

其中前两个是可以直接通过请求获取到,UUID可以自己定义,我们主要分析滑动轨迹即可。

4、滑动轨迹分析

鼠标悬浮此处,可以查看滑动轨迹生成逻辑

其实就是从鼠标点击滑块的时候开始记录: 滑动距离、y值以及13位时间戳, 每次以字典形式存储,并且最终生成一个列表。

通过分析滑动轨迹列表,可以知道每次记录,y值都是不变的,只有x(滑动距离)以及13位时间戳在随机增加,并且是无序的。这样我们可以实现模拟滑动轨迹。

思路如下:

x从0开始,每次递增0-10之间的随机数,y不变

13位时间戳,每次增加1-30之间的随机数。   每次增加都存储到字典中,并且最终全部添加到列表中。

因为是模拟人滑动的,所以再最后滑动到正确位置时,可能会在那个位置停顿一下,这里滑动轨迹也会记录

为了以防万一,我们还是需要模拟人实际滑动的操作,在滑动到缺口位置时,停顿一下,生成停顿的滑动轨迹(即x和y值不变,时间戳增加)。

5.滑动轨迹处理

生成滑动轨迹列表后,我们还需根据JS代码中对滑动轨迹的处理,进行python模拟。

通过观察处理前后的滑动轨迹,可以分析出JS代码处理逻辑

就是将滑动轨迹里面的x,y,time值循环取出来,并且拼接成一个巨长的字符串。然后和步骤3中剃刀的参数进行拼接

clientIp + checkId + UUID + 滑动轨迹拼接后的字符串

最终python实现代码如下:

import time
import random
def get_result(x_length, y_height):
    """
    x_length: 滑动距离
    y_height:y轴距离
    """
    #定义一个空列表,x初始值0,y值不变,t初始值是13位时间戳
    traceList = []
    x = 0
    y = y_height
    t = int(time.time() * 1000)
    #当x小于滑动距离时,x递增0-5个随机整数,y不变,t随机递增1-20个随机整数,每次都生成字典,并且添加到traceList列表中,模拟人滑动滑块的轨迹
    while x < x_length:
        trace = {"x" : x , "y" : y , "time" : t}
        traceList.append(trace)
        x += random.randint(0, 5)
        t += random.randint(1, 20)
        y = y_height
        #当x值大于等于滑动距离时,x值等于x_length滑动距离
        if x >= x_length:
            x = x_length
            trace = {"x" : x , "y" : y , "time" : t}
            traceList.append(trace)
            break
    #while循环退出后,即滑动到缺口位置后,x,y不变,t随机增加1-20个随机整数。用于模拟人滑动到缺口位置时停顿一下,随机记录2-5次
    for i in range(random.randint(2,5)):
        trace = {"x" : x , "y" : y , "time" : t}
        traceList.append(trace)
        x = x_length
        y = y_height
        t += random.randint(1, 20)
    #以上步骤用于生成滑动轨迹列表,以下步骤用于对列表循环处理,并且对x,y和time值进行拼接
    
    result = ''
    for i in traceList:
        result += f"{i['x']}{i['y']}{i['time']}"
    print('拼接后的内容:::',result)
    print('滑动轨迹:::',traceList)
    return result, traceList

6.滑动轨迹加密

F10进入下一个函数调用,鼠标悬浮后发现生成了一个32位字符,盲猜是md5加密。因为JS代码网上看几眼,有出现过md5,通过控制台和在线md5加密校验一下,确认是md5

所以这里逻辑主要是对步骤5中拼接的字符串,进行了md5加密。

7.验证码校验请求中的加密载荷分析:

继续F10,进入下一个函数调用,发现这里就是载荷的加密为止,这里需要仔细分析。

sign就是上一步经过md5加密后的值

track就是模拟生成的滑动轨迹列表

aesKey就是请求验证码时返回的key值。参数全部搞定,我们主要分析_0x3725f6加密即可。

8._0x3725f6加密函数分析

点进去_0x3725f6之后 发现是aes加密。并且是将上一步的数据,

                                    'data': {
                                        'sign': _0x2f155e,
                                        'track': _0x12e2ee
                                    }
                                  

进行json序列化之后,又进行了加密。混淆还原后,发现是没有iv偏移量的,只有key和加密数据。 AES加密中不需要iv偏移量的,也就是ECB加密模式,盲猜一波。使用在线工具校验一下。

截图这里只对比了前几个字符,实际结尾字符也是一样的,所以确定是AES-ECB加密模式。

9.加密分析完成,进行验证码校验

需要注意的是,验证码校验的url,还需要第一步生成的uuid

至此,验证码的获取–滑动轨迹–滑动轨迹加密–校验载荷加密分析全部完成,总结如下:

1.生成UUID唯一值,进行验证码参数获取(checkId,clientIp,key,pointX,pointY,背景图url和滑块图url等,后面分析都需要用到)经过测试UUID不能重复使用,服务器会检测是否被使用过。

2.下载背景图和滑块图

3.使用打码平台或者ddddocr模块,计算滑动距离

4.得到滑动距离x_length之后,模拟生成滑动轨迹

        需要注意,当x小于x_length时,x是需要递增的。 当x大于等于x_length时,x赋值成x_length即可,及滑动到缺口的位置,并且最后需要随机模拟生成停留的轨迹(经过验证,这个滑块并未校验是否停留,不模拟停留轨迹也可以通过校验)

5.生成滑动轨迹后,循环获取字典,并且将x,y,time值取出,拼接成一个字符串

6.字符串拼接:clientIp + checkId + UUID + 步骤5得到的字符串

7.对步骤7拼接的字符串进行md5加密

8.   {
                                    'data': {
                                        'sign': 步骤7的md5加密值,
                                        'track': 步骤4生成的滑动轨迹列表
                                    },
                                    'aesKey': 步骤1获取验证码时得到的key
                                }

对'data'进行序列化后,得到字符串

对字符串进行AES-ECB加密,key就是aesKey,最终得到的加密值

9.携带步骤8生成的加密值,对校验验证码的url发起请求,验证码校验的url需要使用步骤1中生成的UUID。

验证码校验代码执行结果如下,目前成功率测试是99%,本文只贴出了滑动轨迹相关的代码,剩余的请求,下载验证码,滑动距离计算,以及md5,aes加密相关的代码不做详细描述。

10.验证码校验后,会返回token值,携带token值再发起登录请求,即可完成登录逆向。登录逆向后期会更新再本文中。

欢迎评论区交流指导~如果有其他经典逆向网站,也可以贴在评论区中,博主会实践后根据情况,更新再下一系列的文章中。 新年快乐!

作者:爬虫练习生

物联沃分享整理
物联沃-IOTWORD物联网 » 某巢登录滑块逆向–python还原

发表回复