滑块

本文仅用于学习,如有侵权,联系站长删除
禁止商业,否则后果自负
bg

今天我们来搞易盾官网的demo滑块,这个我是一点没写,这个是一起来做的那种
依旧是先滑动一手,看看校验的是什么地方

可以看见,校验的接口就是这个,里面包含了一些信息和校验的轨迹,返回值依旧是token值

{
    "data": {
        "result": false,
        "zoneId": "CN31",
        "token": "0dd7784e6f664e039a285d122a419082",
        "validate": ""
    },
    "error": 0,
    "msg": "ok"
}

好,我们基本理清楚了,我们来搞前置请求

前置请求

通过对图片的搜索我们发现接口是在

这个后面也肯定会有东西,我们再来多次重放测试 chayi 来吧,开始我们的逆向之旅了,我们首先就搞一下cb值,依旧是搜索大法,看值在什么地方
这个值很好发现,可以搜到,并且函数都是一个,调用一下发现很像,我们就暂且说它是,然后我们来进入这个函数,发现有点复杂,来补环境吧 易盾环境检测不狠,补环境更简单一些,补环境这就属于基本操作了,未定义补了,报错和浏览器进行对比

function get_enviroment(proxy_array) {
    for (var i = 0; i < proxy_array.length; i++) {
        handler = '{\n' +
            '    get: function(target, property, receiver) {\n' +
            '        console.log("方法:", "get  ", "对象:", ' +
            '"' + proxy_array[i] + '" ,' +
            '"  属性:", property, ' +
            '"  属性类型:", ' + 'typeof property, ' +
            // '"  属性值:", ' + 'target[property], ' +
            '"  属性值类型:", typeof target[property]);\n' +
            // 'if (typeof target[property] == "undefined"){debugger}' +
            '        return target[property];\n' +
            '    },\n' +
            '    set: function(target, property, value, receiver) {\n' +
            '        console.log("方法:", "set  ", "对象:", ' +
            '"' + proxy_array[i] + '" ,' +
            '"  属性:", property, ' +
            '"  属性类型:", ' + 'typeof property, ' +
            // '"  属性值:", ' + 'target[property], ' +
            '"  属性值类型:", typeof target[property]);\n' +
            '        return Reflect.set(...arguments);\n' +
            '    }\n' +
            '}'
        eval('try{\n' + proxy_array[i] + ';\n' +
            proxy_array[i] + '=new Proxy(' + proxy_array[i] + ', ' + handler + ')}catch (e) {\n' + proxy_array[i] + '={};\n' +
            proxy_array[i] + '=new Proxy(' + proxy_array[i] + ', ' + handler + ')}')
    }
}
proxy_array = ['window', 'document', 'location', 'navigator', 'history', 'screen']
// 这里写你要补的环境
get_enviroment(proxy_array)

各位可以多尝试重放特定参数,其实需要逆向的只有cb值,irTokentoken值去掉依旧可以拿到, 然后就是下载保存图片了,这次我们来使用ddddorc进行图片识别,这个各位自己安装一下吧也就是个pip的事情,

def ddddocr(self, slider_bytes, background_bytes):
    det = ddddocr.DdddOcr(det=False, ocr=False, show_ad=False)
    res = det.slide_match(slider_bytes, background_bytes)
    logger.success(f"滑动的距离是:{res['target'][0]}")
    os.remove("dd.png")
    os.remove("ee.png")
    return res["target"][0]

初始化出来OCR然后再调用滑动就可以了,然后我是选择把图片给删除,看起来不乱 下一步就是去看易盾的轨迹了,易盾轨迹校验也不是很严格,依旧是打鼠标断点然后来单步调试,会来到

this['onVerifyCaptcha']({
    'data': JSON[a0_0x1e60(0x138)]({
        'd': _0xa8a0c6(_0x4a4a62['join'](':')),
        'm': '',
        'p': _0x15278a,
        'f': _0xa8a0c6(_0x564a9f(_0x319bb4, _0x4d98f2['join'](','))),
        'ext': _0xa8a0c6(_0x564a9f(_0x319bb4, this['mouseDownCounts'] + ',' + this['traceData']['length']))
    })
});

这个地方,这就是轨迹最终加密的地方,解决办法依旧是补环境,然后导出函数进行调用,对于轨迹的生成我这里不方便说了,我使用的是我朋友的轨迹,不是我自己的轨迹,各位可以自己找AI或者身边大佬乞讨一手, 说不定就会议欧意外收获,最终拼接调用就可以了,依旧是放点通过案例(我朋友轨迹过于牛逼,100成功) success