伪造一个MouseEvent?

  • 2018-11-18
  • 2,492
  • 9
  • 13

随着滑块验证码加密越来越变态,

HOOK滑块核心代码, 实现JS注入变的越来越关键

本文含有研究思路, 想看结果的请直接去文末


人们可以使用Selenium来通过滑动

或者更高效的 用js注入的方式

那么问题来了

这是一个Istrusted 的 demo https://googlechrome.github.io/samples/event-istrusted/

直接使用JS的MouseEvent 会出现 isTrusted=false的情况

var greenButton = document.querySelector('#greenButton');
var redButton = document.querySelector('#redButton');

greenButton.addEventListener('click', function(event) {
  if (event.isTrusted) {
    ChromeSamples.log('User clicked the green button. It is a trusted event.');
  } else {
    ChromeSamples.log('User did NOT click the green button.');
  }
});

redButton.addEventListener('click', function() {
  greenButton.click();
});
User did NOT click the green button.

那么我们能不能直接修改isTrusted?

他是只读的, 这并没有什么卵用

那么我们来考虑下思路

1 修改浏览器源码

2 重写MouseEvent

好吧 我们只能尝试第二种

function MouseEvent(){
    this.isTrusted = true;
    //省略10086行代码
}
var mevent = new MouseEvent()

那我们试试dispatch这个Event哈

不行 不是Event

那怎么搞…

查找一番API后发现

getEventListeners

可以获取一个元素上有哪些Event

我们来试试

getEventListeners(greenButton).click.forEach(function(element) {
  element.listener(mevent);
});

It works

User clicked the green button. It is a trusted event.

分析流程到此结束 应用请各位看官自行思考

评论

  • Donnetta Rathel回复

    I¦ve been exploring for a little for any high quality articles or blog posts in this sort of area . Exploring in Yahoo I ultimately stumbled upon this web site. Studying this info So i¦m satisfied to show that I have an incredibly excellent uncanny feeling I found out just what I needed. I most surely will make certain to don¦t omit this site and give it a look on a relentless basis.

  • lengyue回复

    getEventListeners是console的方法

  • xG回复

    MouseEvent 里面有若干个成员函数是直接使用原生实现的,仿冒一个MouseEvent应该是没办法完全仿冒的吧。。。?

  • Glawind回复

    getEventListeners这个API貌似只能在devTool中使用,属于chrome的命令行API,在JS代码中无法使用,所以这个思路也不通吧

  • james回复

    同意条款的checkbox加上了event istrusted
    在上方google的demo中
    getEventListeners(greenButton).click.forEach(function(element) {
    element.listener(mevent);}); 这句是可行的
    但一回到我的那个网页 它就会说Cannot read property ‘forEach’

  • james回复

    请问 可以再说详细一点吗?
    最近刚好遇到有个地方的同意条款中有event.istrusted

    这句是套用在那里?
    getEventListeners(greenButton).click.forEach(function(element) {
    element.listener(mevent);
    });

  • javaichiban回复

    为什么博主坚持用纯JS?用selenium有何问题?

    • lengyue回复

      效率 体验

  • lengyue回复

    延伸思考 0s过滑动的可行性?