某手势验证码协议分析 二 (获取验证码地址)

某手势验证码协议分析 二 (获取 还原)

地址:aHR0cHM6Ly93d3cudmFwdGNoYS5jb20v

文章只提供学习,如有侵权请立即联系我。

继上篇我们分析了config请求 并且获取到了 config 请求的响应 下面我们进行分析 get 请求 获取图片验证吗的请求

首先我们看一下 config 请求响应的响应体

在这里插入图片描述

我们看一下 get 请求的请求参数

在这里插入图片描述
我们 发现 k 是有 config 请求返回的 knock d 为我们第一篇 分析的 加密参数
重点则是 en ??????????????

en 到底是什么???

我们查看调用堆栈 然后进行拦截分析
在这里插入图片描述

在这里插入图片描述
我们发现此处已经生成了 我们向上分析

在这里插入图片描述

我们向上发现 在这个对应里面 有两个 方法 其中是 getImage 一个 是 verify

getImage 则是我们这次获取 图片的方法

我们进行debugger 分析

在这里插入图片描述

我们能看到 请求传入的参数 都是config 响应体 里面的 进行传入的 就不进行解释

GenerateFp 这个函数我们在上一章节已经进行介绍 此处就不再进行介绍 不明白的可以返回上一章节

_0x2dfb74[‘hb’] 这个为 conifg 里面的 hb

_0x2dfb74 这个函数我们可以进入看一下

在这里插入图片描述

ua 和 host 就不进行叙述了

那么我们继续看下一个

secretc 是在上面固定写的 通过搜索可以查询到

在这里插入图片描述
继续
_0x517b31[‘uaDelExtra’] 这个函数 我们进入查看发现这个函数我们可以直接 进行扣出

在这里插入图片描述
_0x17365e[‘hex_md5’] 这个函数是进行 md5

在这里插入图片描述

在这里插入图片描述
这个 globalMd5 是什么地方来的???

我们发现 globalMd5 是从这个地方进行 传入的 那么我们进行调用堆栈往上分析

在这里插入图片描述

在这里插入图片描述
在这个地方已经存在了 那么我们继续向上分析

在这里插入图片描述
我们通过搜索 发现有两个 地方进行 赋值 那么 我们进行 debugger 进行分析

在这里插入图片描述

(_0x4c7848['splicingObj']({
   
                            'cdn_servers': this['config']['cdn_servers'],
                            'css_version': this['config']['css_version'],
                            'guideVersion': this['config']['guideVersion'],
                            'hb': this['config']['hb'],
                            'help': this['config']['help'],
                            'ip': this['config']['ip'],
                            'is_vip': this['config']['is_vip'],
                            'js_path': this['config']['js_path'],
                            'knock': this['config']['knock'],
                            'net_way': this['config']['net_way'],
                            'node': this['config']['node'],
                            'origin_url': this['config']['origin_url'],
                            'sdk_ver': this['config']['sdk_ver'],
                            'u': this['config']['u'],
                            'ua': this['config']['ua']
                        })

_0x4c7848[‘splicingObj’] 这个函数 传入进入 的数据 正是第一步 config 获取的所有数据 就不进行叙述

通过_0x4c7848[‘splicingObj’] 这个把数据进行拼装

'statics-cn.vaptcha.net2.9.123.1.00dea7true120.244.142.161verify.2.0.19.js1639290144JD2bWl3a669-1CNhttps://www.vaptcha.com/vaptcha-sdk.1.0.96.6195c14a.js0'

然后进行 md5

就获取到 _0x2dfb74[‘globalMd5’]

 _0x517b31['encryFunc'](_0x517b31['selectFrom'](0x3, 0xf), _0x92549c);

_0x517b31[‘selectFrom’] 这个函数 以及 _0x517b31[‘encryFunc’] 都能很容易找到

在这里插入图片描述
这次 我们分析 完毕

通过把所有代码进行 整合 我们 就可以拿到获取图片的代码



function _0x299ebc(_0x220365, _0x53dfe6) {
   
    var _0x13ccef = '';
    _0x13ccef = (parseInt(_0x220365) - _0x53dfe6)['toString']();
    if (_0x13ccef['length'] < 0xa) {
   
        _0x13ccef = '0' + _0x13ccef;
    }
    return _0x13ccef;
}

function _0x91a4aa(_0xd139c6) {
   
    var _0x5a35f5 = _0xd139c6['length'], _0x328f74 = new Array(_0x5a35f5), _0x1ecf8b;
    for (var _0x4e8ee8 = 0x0; _0x4e8ee8 < _0x5a35f5; _0x4e8ee8++) {
   
        _0x1ecf8b = _0xd139c6['charCodeAt'](_0x4e8ee8);
        if (0x30 <= _0x1ecf8b && _0x1ecf8b < 0x3a) {
   
            _0x1ecf8b -= 0x30;
        } else {
   
            _0x1ecf8b = (_0x1ecf8b & 0xdf) - 0x41 + 0xa;
        }
        _0x328f74[_0x4e8ee8] = _0x1ecf8b;
    }
    var _0x43c8e3 = _0x328f74['reduce'](function (_0x74d7f4, _0x27841f) {
   
        _0x74d7f4 = 0x10 * _0x74d7f4 + _0x27841f;
        return _0x74d7f4;
    }, 0x0);
    return _0x43c8e3;
}

function _0x2dc288(_0x4eab36, _0x4449ef) {
   
    var _0x119692;
    var _0x237b64 = '';
    var _0x112f7 = '0123456789abcdefghijklmnopqrstuvwxyz';
    var _0x38266c = '8';
    var _0x2bba31 = _0x50d390(_0x4eab36 * 0x2, 0x0, 0x23);
    for (var _0x269f48 = 0x0; _0x269f48 < _0x2bba31['length']; _0x269f48++) {
   
        _0x237b64 += _0x112f7['charAt'](_0x2bba31[_0x269f48]);
    }
    for (var _0x269f48 = 0x0; _0x269f48 < _0x4eab36; _0x269f48++) {
   
        _0x4449ef = _0x1b0d46(_0x4449ef, _0x237b64['charAt'](_0x269f48 * 0x2), _0x237b64['charAt'](_0x269f48 * 0x2 + 0x1));
    }
    _0x119692 = _0x4eab36['toString'](0x10) + parseInt(_0x38266c) + _0x237b64 + _0x2dacb9(_0x4449ef);
    return _0x119692;
}

function _0x2dacb9(_0x58784e) {
   
    return _0x1b0d46(_0x58784e, 'e', '9');
}

function _0x5e1ee8(_0x2637ad, _0x35468a) {
   
    var _0x5ecf28 = _0x35468a - _0x2637ad + 0x1;
    return Math['floor'](Math['random']() * _0x5ecf28 + _0x2637ad);
}

function _0x50d390(_0xf6d341, _0x52ceaa, _0x5c0b03) {
   
    var _0x31e068 = [];
    for (var _0x1e5aae = 0x0; _0x1e5aae < _0xf6d341; _0x1e5aae++) {
   
        _0x31e068[_0x1e5aae] = _0x5e1ee8(_0x52ceaa, _0x5c0b03);
        for (var _0x43fa48 = 0x0; _0x43fa48 < _0x1e5aae; _0x43fa48++) {
   
            if (_0x31e068[_0x1e5aae] == _0x31e068[_0x43fa48]) {
   
                _0x1e5aae--;
                break;
            }
        }
    }
    return _0x31e068;
}

function _0x1b0d46(_0x563a68, _0x353d0d, _0x2f92bb) {
   
    _0x563a68 = _0x563a68['replace'](new RegExp(_0x353d0d, 'g'), '+');
    _0x563a68 = _0x563a68['replace'](new RegExp(_0x2f92bb, 'g'), _0x353d0d);
    _0x563a68 = _0x563a68['replace'](/\+/g, _0x2f92bb);
    return _0x563a68;
}

function _0x405f04(_0x49a762) {
   
    if (_0x49a762['indexOf']('\x20webCore') > -0x1)
        return _0x49a762['substr'](0x0, _0x49a762['indexOf'](
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值