Hook – 钩子函数
在系统没有调用某个函数前,钩子程序就先捕获该消息,钩子函数先得到控制权,此时钩子函数既可以加工处理函数的执行行为,还能强制结束消息传递
hook方式 : 手动/自动(油猴插件)
hook 函数
old_func = func
func = function(argument){
my task;
return old_func.apply(argument)
}
func.prototype… = …
func : hook 函数
hook 属性
old_attr = obj.attr
Object.defineProperty(obj,’attr’,{
get:function(){
console.log(cookie)
debugger;
return
},
set:function(val){
debugger;
return
}
})
Hook eval
eval_bk = eval;
eval = function(val){
debugger;
return eval_bk(val)
}
* 伪造指纹
eval.toString = function(){
return “function eval() { [native code] }”
}
或者
window.eval.toString = function (){return eval_bk.toString();}
Hook 缺点
函数 hook 一般不会失败,只有 __proto__ 模拟不好被检测
属性 hook 当网站都采用 Object.defineProperty 绑定 则 属性 hook 就会失效
局部 hook 作用域内触发时 hook
原型链 Hook
String.prototype.xxx_bk = String.prototype.xxx;
String.prototype.xxx = function(val){
str = this.toString();
debugger;
return str.xxx_bk(val)
}
String.prototype.xxx_bk.toString = function(){
return “*******”
}