补环境之鼠标轨迹模拟

在补环境时,有时候需要模拟鼠标轨迹,生成轨迹,对轨迹加密后发到到服务端进行验证。

鼠标轨迹一般有点击、滑动等,这里主要说下思路以及分享部分代码提供参考。

首先页面肯定会注册点击、滑动这些事件,那么我们可以监听这些事件从而获取响应得点击、滑动事件函数,获取到函数后,就可以使用算法生成轨迹,参考代码如下。都是白嫖,就别太挑剔了,至少给大家提供了一个思路,好多人连思路都没有。

window["onload"]();//注册页面事件
let clickEventList;
if(ldvm.memory.asyncEvent.listener){
    clickEventList = ldvm.memory.asyncEvent.listener["click"];//鼠标单击
}

let onmousemoveFunc = document["onmousemove"];

let clickEvent = clickEventList[0];
let mself = clickEvent.self;//当前对象
let listener = clickEvent.listener;//调用函数,就是单击事件函数
//listener.call(self);//进行调用
//模拟鼠标事件轨迹

let mdiv = document.createElement('div');

let myClick = function myClick(x,y){

    x = parseInt(x);
    y = parseInt(y);

    var pointerEvent = {
        "altKey":false,
        "isTrusted":true,
        "target":mdiv,
        "srcElement":mdiv,
        "clientX":x,
        "clientY":y,
        "layerX":x,
        "layerY":y,
        "pageX":x,
        "pageY":y,
        "screenX":x,
        "screenY":y,
        "pointerType":"mouse",
        "type":"click",
        "view":window
    };
    pointerEvent = ldvm.toolsFunc.createProxyObj(pointerEvent,PointerEvent,"pointerEvent");

    listener.call(mself,pointerEvent);
}

let mourseMoveByZb = function mourseMoveByZb(x,y){
    x = parseInt(x);
    y = parseInt(y);
    var mouseEvent = {
        "target":mdiv,
        "clientX":x,
        "clientY":y,
        "altKey":false,
        "isTrusted":true,
        "target":mdiv,
        "srcElement":mdiv,
        "layerX":x,
        "layerY":y,
        "pageX":x,
        "pageY":y,
        "screenX":x,
        "screenY":y,
        "type":"mousemove",
        "view":window
    };
    mouseEvent = ldvm.toolsFunc.createProxyObj(mouseEvent,MouseEvent,"mouseEvent");

    onmousemoveFunc.call(document,mouseEvent);
}

let zuobiaoMn = function(){


    debugger;
    let zbArr = [
        {'x':303,'y':108},
        {'x':406,'y':232},
        {'x':503,'y':391},
        {'x':609,'y':478},
        {'x':705,'y':553},
        {'x':835,'y':602},
        {'x':992,'y':732},
        {'x':1008,'y':441},
        {'x':671,'y':521},
        {'x':1202,'y':723}
    ];

    var num1 = ldvm.toolsFunc.getSuijishu(0,9);
    var num2 = ldvm.toolsFunc.getSuijishu(0,9);
    var num3 = ldvm.toolsFunc.getSuijishu(0,9);

    var ele1 = zbArr[num1];
    var ele2 = zbArr[num2];
    var ele3 = zbArr[num3];
  
    let x1 = ele1.x;
    let y1 = ele1.y;

    let x2 = ele2.x;
    let y2 = ele2.y;

    let x3 = ele3.x;
    let y3 = ele3.y;

    //159,81,19|55,56,1609|219,89,3361
    //先生成轨迹
    var param = x1 + ',' + y1 + '|' + x2 + ',' + y2 + '|' + x3 + ',' + y3;
    var traceStr = ldvm.toolsFunc.getTrace(param);

    var arr = traceStr.split('|');

    // mourseMoveByZb(x1,y1);
    myClick(x1, y1);

    for (let i = 0; i < arr.length; i++) {
        var mrr = arr[i];
        var brr = mrr.split(',');
        var x = brr[0];
        var y = brr[1];

        mourseMoveByZb(x, y);
        //moursemove

        if (x == x2 && y == y2) {
            myClick(x2, y2);
        }
    }

    mourseMoveByZb(x3, y3);
    myClick(x3, y3);
}

纯技术交流,请勿用于非法用途,如有权益问题可以发私信联系我删除.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liberty888

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值