Chrome拓展开发之JS自动注入Hook
Chrome拓展开发之JS自动注入Hook
接下来,我们需要编写一个content_scripts脚本文件,让它在页面DOM渲染之前自动注入JS脚本文件,从而达到过反调试的效果。
我们在页面创建一个script节点,里边放入我们注入的代码。
实现了Hook Cookies,JSON.stringify,JSON.parse,eval和debugger以及检测Chome安装的插件。
(function(){
'use strict';
var s=document.createElement('script');
//Hook Cookies
s.innerHTML=`
var cookie_cache=document.cookie;
Object.defineProperty(document,'cookie',{
get:function(){
return cookie_cache;
},
set:function(val){
console.log("setting cookie:",val);
//debugger;
var cookie=val.split(";")[0];
var ncookie=cookie.split("=");
var flag=false;
var cache=cookie_cache.split(";");
cache=cache.map(function(a){
if (a.split("=")[0]==ncookie[0]){
flag=true;
return cookie;
}
return a;
})
cookie_cache=cache.join(;");
if(!flag){
cookie_cache+=cookie+";";
}
this._value=val;
return cookie_cache;
}
});
//Hook JSON stringify
var rstringify=JSON.stringify;
JSON.stringify=function(a){
console.log("Detect JSON.stringify:",a);
debugger;
return rstringify(a);
}
//Hook JSON parse
var strparse=JSON.parse;
JSON.parse=function(b){
console.log("Detect JSON.parse:",b);
return strparse(b);
};
//Detect Chrome plugins
var plugins_cache=window.navigator;
Object.defineProperty(navigator,"plugins",{
set:function(val){
console.log("navigator set:",val);
debugger;
},
get:function(){
console.log("get plugins");
//debugger
return plugins_cache;
},
});
//Hook eval
var _eval=eval;
eval=function(c){
_eval(c.replace("debugger","");
};
eval.toString=_eval.toString;
//Hook Function
var _construtor=constructor;
Function.prototype.constructor=function(d){
if (d=="debugger"){
console.log("constructor:",d);
return null;
}
return _construtor(d);
};
`
})
在实际开发中,并没有万能的JS Hook代码,我们需要根据具体的业务逻辑来微调上边的JS代码。