JavaScript如何使用代理对象

JavaScript如何使用代理对象

小编给大家分享一下JavaScript如何使用代理对象,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

代理对象

代理对象是目前JavaScript中最有用的一个工具,这种对象可以帮助我们了解代码中的其他对象,包括修改其行为以及触发特定环境下的对象活动。比如说,我们可以创建一个嗲哩对象并跟踪每一次document.createElemen调用,然后记录下相关信息:

JavaScript如何使用代理对象

consthandler={//Ourhooktokeepthetrackapply:function(target,thisArg,args){console.log("InterceptedacalltocreateElementwithargs:"+args);returntarget.apply(thisArg,args)}}document.createElement=newProxy(document.createElement,handler)//Createourproxyobjectwithourhookreadytointerceptdocument.createElement('div');

接下来,我们可以在控制台中记录下相关参数和信息:

VM64:3InterceptedacalltocreateElementwithargs:div

我们可以利用这些信息并通过拦截某些特定函数来调试代码,但是本文的主要目的是为了介绍反调试技术,那么我们如何检测“对方”是否使用了代理对象呢?其实这就是一场“猫抓老鼠”的游戏,比如说,我们可以使用相同的代码段,然后尝试调用toString方法并捕获异常:

//Calla"virgin"createElement:try{document.createElement.toString();}catch(e){console.log("Isawyourproxy!");}

信息如下:

"functioncreateElement(){[nativecode]}"

但是当我们使用了代理之后:

//Thenapplythehookconsthandler={apply:function(target,thisArg,args){console.log("InterceptedacalltocreateElementwithargs:"+args);returntarget.apply(thisArg,args)}}document.createElement=newProxy(document.createElement,handler);//Callournot-so-virgin-after-that-partycreateElementtry{document.createElement.toString();}catch(e){console.log("Isawyourproxy!");}

没错,我们确实可以检测到代理:

VM391:13Isawyourproxy!

我们还可以添加toString方法:

consthandler={apply:function(target,thisArg,args){console.log("InterceptedacalltocreateElementwithargs:"+args);returntarget.apply(thisArg,args)}}document.createElement=newProxy(document.createElement,handler);document.createElement=Function.prototype.toString.bind(document.createElement);//AddtoString//Callournot-so-virgin-after-that-partycreateElementtry{document.createElement.toString();}catch(e){console.log("Isawyourproxy!");}

现在我们就没办法检测到了:

"functioncreateElement(){[nativecode]}"

就像我说的,这就是一场“猫抓老鼠“的游戏。

以上是“JavaScript如何使用代理对象”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注恰卡编程网行业资讯频道!

发布于 2022-03-18 22:52:16
收藏
分享
海报
0 条评论
18
上一篇:python如何判断一个列表中的数值是否全部小于某个数 下一篇:JavaScript如何实现隐式流完整性控制
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码