编者按:不少小伙伴在JS逆向的时候遇到过无限debugger的反爬,就是页面一打开控制台就不断的debugger,网站并不想让你舒舒服服地调试。此前,我已经分享『过debugger』的方法,现在结合JsHook,再聊一聊这块的过debugger技术。
1
JsHook简介
Hook是一种常用的钩子技术,在系统没有调用函数之前,钩子程序首先得到控制权,这时钩子函数既可以加工处理该函数的执行行为,也可以强制结束消息的传递;Js Hook简单来说,就是对某个函数、对象进行“加工”,修改原来js代码的功能。
直接替换函数。这种方式简单、但是太粗暴,容易影响原有代码的正常执行,也容易被检测到。
利用Object.defineProperty为对象的属性赋值的方式进行 Hook。这种方式会更优雅一些,但当网站所有的逻辑都采用Object.defineProperty绑定时,属性hook就会失效。同时,Object.defineProperty无法进行二次hook。
2
Js Hook反调试干扰的方法
置空debugger函数
在开发者工具下,在执行debugger功能的函数前下断点,然后在控制台输入代码:
window.debugger函数 = function(){};
for (var i = 1; i < 99999; i++)window.clearInterval(i);
重写eval函数绕过
eval_bak = eval
eval = function(val){
debugger;
return eval_bak(val);
}
eval.toString = function(){
return "function eval() { [native code] }"
}
重写constructor的debugger
Function.prototype.constructor_old = Function.prototype.constructor
Function.prototype.constructor = function(){
if(argument==='debugger'){}
else{
return Function.prototype.constructor_old.apply(this,arguments)
}
}
暴力破解
window.open = function(){}
window.setInteval = function(){}