window.keyss=["cookie"];//设定拦截的内容,
let ProxyMaker=function (a){
return new Proxy(a, {
get: function(target, property, receiver) {
//这里对key值监听,如果有符合条件的,自动debugger断点。
if(window.keyss.indexOf(target[property])>=0 ){console.log(property+" property has been accessed");debugger}
return target[property];
},
set: function(target, property, value, receiver) {
////这里对key值写入监听,可以在此处加入相应的条件,让他达到断点的作用。
//console.log(target+"'s "+property+" property has been modified");
return target[property] = value;
},
has: function(target, property) {
//console.log(target+"'s "+property+" property has been checked");
return Reflect.has(target, property); // 10x to @Bergi
}
});
}
使用方法:
比如原本网页中的js代码长这样
var a={key:['cookie','document'],v:[10]}
function _$xah(){
var _$t,_$x;
while((_$t>0?_$t--:_$t=a['v'][0])>0){
if(_$t==5){
_$x=globalThis[a['key'][1]][a['key'][0]];//读取了cookie,在现实中实现可能更加复杂。
}
if(_$t<4)return _$x;
}
}
//因为关键字都在专门的key列表里面。
先提前在网页粘贴执行关于ProxyMaker的代码。
然后断点进入到能够到_$xah函数这里,这里到这个函数里面,肯定是能够访问到变量a的,这个时候在控制台执行a['key']=ProxyMaker(a['key'])
这个时候,再放行继续执行,当读取的a['key']下的值的时候,读取的值如果是cookie,则进行了debugger的断点操作。
小tips:对于js的静态资源,很多网页都是基本静态js,每次刷新网页都不会变,可以使用REDIRECTOR插件,把js的文件放到本地来,这样操作的好处是什么?可以把原本的js文件中,防止debugger的方法给删除,这样就可以破解原本网页的仿debugger的行为了。