微步在线 模拟登录 某验4代滑块验证

可以说 jy4代 比3代 简单的非常多 并且4代是蝌蚪文 看着唬人 其实逻辑没变

比起jy3代 也不用整 什么图片还原 滑动轨迹 无感轨迹 巨多指纹 等信息 废话不多说开始分析

地址

aHR0cHM6Ly9wYXNzcG9ydC50aHJlYXRib29rLmNuL2xvZ2lu

jy4 验证分析

获取滑块图片 以及 验证id

URI
aHR0cHM6Ly9nY2FwdGNoYTQuZ2VldGVzdC5jb20vbG9hZA==
请求体

这里要逆向的就 challenge 下方就是代码

def uuid():
    chars = list('xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx')
    for i, c in enumerate(chars):
        if c in ['x', 'y']:
            r = random.randint(0, 16)
            v = r if c == 'x' else (r & 0x3 | 0x8)
            chars[i] = hex(v)[2:]
    return ''.join(chars)

这个栈点进去可以直接看到

响应体

里面有响应的图片 id 等值

滑动验证

通过跟栈就可以找到 w生成位置

rsakey

这个值是随机的 也可以写死

看下图就是生成key的位置 随便一扣就可以

这里是python还原后的代码

def uuid():
    chars = list('xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx')
    for i, c in enumerate(chars):
        if c in ['x', 'y']:
            r = random.randint(0, 16)
            v = r if c == 'x' else (r & 0x3 | 0x8)
            chars[i] = hex(v)[2:]  
    return ''.join(chars)
_ 加密

这个的话还是RSA加密

下面2个值也是 和 jy3 没变的

因为他是另一种RSA加密方式

直接用 node-jsencrypt 把下面这个导出 直接用就行

也可以像其他老哥 直接补环境 把字符串还原给本地调用 然后把整个方法扣出来

然后 把你生成的key进行加密 即可

u加密

这个是AES

去_ᖂᖗᖗᖘ 中找 第1个 symmetrical 是什么

进来当前加密方法中 进行混淆还原就可以知道是 AES

如果是新手 或者不太懂我是咋知道的 这个其实是逆向经验 这个没技巧主要是猜 或者看网上文献(前提是有)

直接用node的三方库 crypto-js 实现

加密参数

下面这个框框中 是需要分析的 并且 写固定的因为电脑指纹不同 可能需要换

我这里直接贴框中的还原代码 主要还是用 crypto-js来实现哈希

function msg_and_sign(_ᕵᖁᕿᕵ, _ᕺᕸᖗᕸ, _ᕹᖄᖘᕿ, _ᖁᕷᖂᖄ, _ᖀᖂᖘᕿ, _ᕵᕿᕹᖙ, _ᖙᕿᕺᕾ) {
    var _ᖘᖚᖁᖂ = _ᖀᖂᖘᕿ % 4
        , _ᕹᖁᕾᕺ = parseInt(_ᖀᖂᖘᕿ / 4, 10)
        , _ᖂᖗᖗᖘ = function _ᖄᖁᖆᖗ(_ᕵᖁᕿᕵ, _ᕺᕸᖗᕸ) {

            return new Array(_ᕺᕸᖗᕸ + 1)['join'](_ᕵᖁᕿᕵ)
        }('0', _ᕹᖁᕾᕺ)
        ,
        _ᕴᖉᕸᕵ = _ᖁᕷᖂᖄ + '|' + _ᖀᖂᖘᕿ + '|' + _ᕹᖄᖘᕿ + '|' + _ᕵᕿᕹᖙ + '|' + _ᕺᕸᖗᕸ + '|' + _ᕵᖁᕿᕵ + '|' + _ᖙᕿᕺᕾ + '|';
    while (1) {
        var h = rsa_key
            , l = _ᕴᖉᕸᕵ + h
            , p = void 0;
        switch (_ᕹᖄᖘᕿ) {
            case 'md5':
                p = CryptoJS.enc.Hex.stringify(CryptoJS.MD5(l));
                break;
            case 'sha1':
                p = CryptoJS.enc.Hex.stringify(CryptoJS.SHA1(l));
                break;
            case 'sha256':
                p = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(l))
        }
        if (0 == _ᖘᖚᖁᖂ) {
            if (0 === p['indexOf'](_ᖂᖗᖗᖘ))
                return {
                    pow_msg: _ᕴᖉᕸᕵ + h,
                    pow_sign: p
                }
        } else if (0 === p['indexOf'](_ᖂᖗᖗᖘ)) {
            var f = void 0
                , d = p[_ᕹᖁᕾᕺ];
            switch (_ᖘᖚᖁᖂ) {
                case 1:
                    f = 7;
                    break;
                case 2:
                    f = 3;
                    break;
                case 3:
                    f = 1
            }
            if (d <= f)
                return {
                    pow_msg: _ᕴᖉᕸᕵ + h,
                    pow_sign: p
                }
        }
    }
}

加密位置在这里 有兴趣 去还原一下 加密参数的话自己定位到这里看吧

到这里 w值就成功生成了 其他值都是 第一个请求返回的 不做分析

坐标识别

关于坐标识别 我用的 ddddocr 如果嫌通过率低 可以自己收集图片标注训练

或者 用cv2 去识别

发送LOGIN请求

可以看到 我打码的是 我手机号和密码 是明文 其他的都是滑块成功后响应的内容

下面也是 通过验证发送了登录请求

本文到此也就结束了

感谢观看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值