【技术专题】JsHook绕过反调试无限Debugger

科技   其他   2024-01-29 10:00   江苏  

编者按:不少小伙伴在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(){};


干掉定时器类触发的无限debugger

for (var i = 1; i < 99999; i++)window.clearInterval(i);


重写eval函数绕过

eval_bak = evaleval = function(val){  debugger;  return eval_bak(val);}eval.toString = function(){  return "function eval() { [native code] }"}


重写constructor的debugger

Function.prototype.constructor_old = Function.prototype.constructorFunction.prototype.constructor = function(){    if(argument==='debugger'){}       else{  return Function.prototype.constructor_old.apply(this,arguments)}}


暴力破解

window.open = function(){}window.setInteval = function(){}

易语言自习室
致力于易语言的推广,打造自学者的编程学习乐园,扎根易语言,面向全编程!
 最新文章