Hook 技术

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 “*******”

}