李恒道 发表于 2021-10-2 17:34:32

[油猴脚本开发指南]破解鼠标移出限制实战

# 前言

由于他人账号,无法提供具体网址,这节课主要跟大家聊一下思路,火狐浏览器我研究了一下没找到监听器,所以这节课用chrome浏览器的f12

# 目标

移除网页的鼠标移出检测

我们查看事件监听器

![图片.png](data/attachment/forum/202110/02/172515e411tg6hdtrc67hh.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "图片.png")

根据测试,是点击其他页面的时候触发停止消息。

查阅各个消息,我将其注意力放在了

![图片.png](data/attachment/forum/202110/02/172843zd8eldih6hmg8xd1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "图片.png")



https://developer.mozilla.org/zh-CN/docs/Web/API/Document/visibilitychange_event

visibilitychange

当其选项卡的内容变得可见或被隐藏时,会在文档上触发 `visibilitychange` (能见度更改)事件。

所以我们点击移除再进行测试一下

发现这时候移出检测依然存在。

所以这里我直接暴力测试了,对所有监听器进行逐个移除。

最后确定了blur监听器起到了检测屏幕移出的功能。

点击右边代码,发现了

![图片.png](data/attachment/forum/202110/02/173306qim3l66oy7so69wl.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "图片.png")

在你浏览其他窗口页面、或是浏览器最小化、又或是点击了其他程序等等,都算是浏览器窗口失去焦点,那么 **`window.onblur`** 事件就会触发。

当你浏览别的窗口或者别的程序,直接点就是当你的窗口失去焦点的时候,就会触发window.onblur

所以解决方法也非常简单

直接window.onblur=null;即可

经过测试解除成功!

# 后续

通过测试,发现最小化标签页依然会暂停,这里我们不得不怀疑上visibilitychange了。

我们直接移除visibilitychange事件,发现已经解除这个问题了。

这里证明是visibilitychange的问题,我们点击

![图片.png](data/attachment/forum/202110/02/173700ubn7s4xjxxx9n3xz.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "图片.png")

进入源码

![图片.png](data/attachment/forum/202110/02/173737i2slyyuo62yyloy7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "图片.png")

下方有一个document.addEventListener函数,e是事件名,s是回调函数,这里我们跳到了s

根据之前的

![图片.png](data/attachment/forum/202110/02/173812ltj7hif8enn7a7bt.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "图片.png")

可以确定,事件名是visibilitychange,函数则是这个,这时候我们想到了之前学的addeventlistener事件劫持。

直接用代码邦邦上去就是两拳,顺便解决onblur

```javascript
let oldadd=EventTarget.prototype.addEventListener
EventTarget.prototype.addEventListener=function (...args){
    if(window.onblur!==null){
      window.onblur=null;
    }
    console.log('addEventListener',...args)
    oldadd.call(this,...args)
}
```

然后刷新一下页面看输出,因为输出了一大堆addeventlistener的消息,所以这里我们过滤一下

![图片.png](data/attachment/forum/202110/02/174203nkykvoe3bwzd75vu.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "图片.png")

这里可以看到只有一个,所以我们直接写代码过滤!

```javascript
let oldadd=EventTarget.prototype.addEventListener
EventTarget.prototype.addEventListener=function (...args){
    if(window.onblur!==null){
      window.onblur=null;
    }
    if(args.length!==0&&args==='visibilitychange'){
      console.log('劫持visibilitychange成功,奥利给!')
      return;
    }
    return oldadd.call(this,...args)
}
```

跑一下测试看看

![图片.png](data/attachment/forum/202110/02/174410oll0dkseszr7eagr.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "图片.png")

发现提示了消息。

这时候再看事件监听器,发现不存在了blur监听器以及visibilitychange监听器,拿捏!

![图片.png](data/attachment/forum/202110/02/174422zbg5v12uvhvvzr1i.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "图片.png")

经过测试没有问题,我们已经成功破解鼠标移出限制。

李恒道 发表于 2021-10-2 17:48:03

终于找到一个addeventlistener实战例子,太难了...

脚本体验师001 发表于 2021-10-2 20:12:29

李恒道 发表于 2021-10-2 17:48
终于找到一个addeventlistener实战例子,太难了...

能开前人未有之先河,别出机杼,自成一体,流传千古者,皆为大宗师

pocoloco 发表于 2023-4-29 16:33:41

网站的js在我的油猴脚本执行前就添加了匿名事件怎么搞,劫持不了之前的事件了

李恒道 发表于 2023-4-29 22:50:49

pocoloco 发表于 2023-4-29 16:33
网站的js在我的油猴脚本执行前就添加了匿名事件怎么搞,劫持不了之前的事件了 ...

尝试上document-start试试

pocoloco 发表于 2023-8-1 11:51:51

李恒道 发表于 2023-4-29 22:50
尝试上document-start试试

感谢!成功了
页: [1]
查看完整版本: [油猴脚本开发指南]破解鼠标移出限制实战