极验滑块js逆向破解

这篇不讲图片的还原和滑动轨迹的模拟,直接分析js逆向加密点

1、首先滑动验证码查看请求,发现主要的参数为w,接下来本篇就围绕着w的生成

查看堆栈打断点,最后的第四个堆栈,找到加密点

由代码可以看出:w值为 h+u,h的生成又跟l的有关,最后w参数变为了分析三行代码

var u = r[$_CAGEe(750)]() , l = V[$_CAGEe(342)](gt[$_CAGEe(209)](o), r[$_CAGEe(742)]()) , h = m[$_CAGEe(733)](l)

2、参数加密分析

参数u的分析

打上断点,找到加密点


最后u的生成点找到了,看一下传的16位字符串怎么生成的,进入函数打上断点

函数返回的值为Ot函数,Ot的赋值为rt()函数,进入rt()函数,最后找到t()函数,得到正确的加密,此处打上断点后需要重新刷新页面才能断住

(65536 * (1 + Math[$_BFBDL(75)]()) | 0)[$_BFBDL(396)](16)[$_BFBDL(476)](1)

可以看到16位的字符串最后有4个`(65536 * (1 + Math'random') | 0)'toString''substring'、组成

接下来分析,new X()[$_CBEEc(342)]的加密,

断住new X(),发现了setpublic这个是在RSA中特有的,初步分析为RSA加密。进入函数,扣一下加密

此处就是setpublic,可以得出对应的加密公钥。python构建rsa加密就好。

import rsa
from binascii import b2a_hex


def rsa_encrypt_text(key, _text: str):
    """
    RSA加密
    :param key: 公钥的参数
    :param _text: 待加密的明文
    :return: 加密后的数据
    """
    e = int('010001', 16)
    n = int(key, 16)
    pub_key = rsa.PublicKey(e=e, n=n)
    return b2a_hex(rsa.encrypt(_text.encode(), pub_key)).decode()

此处加密值u就完成了,当然你也可以扣代码,扣代码的时候使用全局的思想,将整个X函数扣下来后分析执行状态。删掉相应的一些代码,让js正常执行就行。

加密值l的分析

由代码可以看到l的生成传递了两个参数。

一个经过转换的o,和生成的随机16位参数,打印出对象o的参数,分析一波

aa:参数为加密值
ep:为和时间戳有关的数组
passtime:和轨迹有关的时间
rp:网站的返回值
userresponse:加密参数

直接分析o的生成,向上分析代码,发现o的生成位置找到对应的aa和userresponse

可以看出加密的aa直接返回为e的值,e由函数传递,aa处打上断点(或者在函数的第一行),向上溯源。

定位到加密点,可以看到此处的加密变为了

var u = parseInt(_)
, l = n[$_CJJIW(1078)][$_CJJJd(1069)](n[$_CJJIW(1078)][$_CJJJd(1051)](), n[$_CJJJd(13)][$_CJJIW(1045)], n[$_CJJIW(13)][$_CJJIW(307)]);
r[$_CJJJd(1034)](u, l, n[$_CJJIW(840)]),

加密值变为分析l的生成,u和n[$_CJJIW(840)]分别为滑动距离和滑动的时间。

分析下l的参数

后两个参数为请求url的时候服务器返回

而第一个参数就是跟轨迹有关的加密了:

打上断点进入函数。向下走可以看到传递的滑动轨迹

此处还是全局扣代码的思想,将包含此处代码的函数都抠出来,也就是整个W[$_CJET(261)]

看下$_CJET(261)的值,命令行打印一下,发现为"prototype"

那么找到W函数,也抠出来,执行代码,扣完的代码结构大概类似这样

按照网站的调用方式调用发现报错,

定位到代码,发现网站中此处传入的是滑动轨迹,而在pycharm中打印直接报错TypeError: $_BEGJJ is not a function

手动将轨迹传递进函数。重新执行

和网页生成的比对一下。

一致,那么接下来扣l的加密函数n[$_CJJIW(1078)][$_CJJJd(1069)]

也是全局的思想,直接扣代码,执行

一致,那么此处的aa就扣完了。

userresponse就相对简单了,直接扣H函数就行,加密参数为滑动距离和challenge

rp参数:对gt、challenge、passtime进行了md5加密

至此所有的参数分析基本完结,给出成功截图

posted @ 2022-01-13 23:17  是四不是十  阅读(2262)  评论(7编辑  收藏  举报