waLR 发表于 2023-11-23 15:17

无限debugger问题

网址脱敏:'aHR0cHM6Ly93d3cuYWh1LmVkdS5jbi8xODMvbGlzdC5odG0='
打开控制台会出现3处debugger, 求教虚拟机里的debugger怎么过

ceyowa 发表于 2023-11-23 16:09

可以参考(https://blog.csdn.net/wtchhb/article/details/129664738)

LoveCode 发表于 2023-11-23 22:05

本帖最后由 LoveCode 于 2023-11-23 22:50 编辑

查看了一下网站,既然 `debugger` 语句在 `VM` 中,那么可以 `hook Function、eval` 这两个函数来过掉它。

另外,它的 `setInterval` 也可以直接 `hook` 掉,似乎并不影响逻辑(没有详细测试)。



这是简单测试之后精简的代码,最好是利用油猴插件执行该脚本。**另外水平所限,此脚本可能在其它网页出现 bug**。

```js
// ==UserScript==
// @name         My_Hook
// @namespace    http://tampermonkey.net/
// @version      0.1
// @descriptiontry to take over the world!
// @AuThor       You
// @match       https://www.ahu.edu.cn/*
// @Icon         https://www.google.com/s2/favicons?sz=64&domain=csdn.net
// @grant      none
// @run-at       document-start
// ==/UserScript==

console.log("========== my hook start ==========");

function hook_Function() {
    let raw_F_c = Function.prototype.constructor;
    let _constructor = function (params) {
      console.log("调用 Function.prototype.constructor: ", params);
      if (params.includes("debugger")) {
            console.log("发现 debugger in Function.prototype.constructor");
            params = params.replaceAll("debugger", "");
      }
      return raw_F_c(params);
    }
    Object.defineProperty(window.Function.prototype, "constructor", { value: _constructor })
}

function hook_setInterval() {
    let raw_set = setInterval;
    let _setInterval = function () {
      console.log("调用 setInterval: ", arguments)
      // 直接置空似乎没有什么影响
      return;// 如果出现问题可以删除该语句
      
      
      let s = arguments.toString();
      if (s.includes("debugger")) {
            console.log("发现 debugger in setInterval");
            s = s.replaceAll("debugger", "");
            arguments = eval(s);
      }
      raw_set(...arguments);
    }
    Object.defineProperty(window, "setInterval", { value: _setInterval })
}

function hook_eval() {
    let raw_eval = eval;
    let _eval = function(param) {
      console.log("调用 eval: ", param);
      if (param.includes("debugger")) {
            console.log("发现 debugger in eval");
            if (param === "(function() {var a = new Date(); debugger; return new Date() - a > 100;}())") {
                param = "(function() { return false; })()";
            }
            param = param.replaceAll("debugger", "");
      }
      raw_eval(param);
    }
    Object.defineProperty(window, "eval", { value: _eval })
}


hook_setInterval();
hook_eval();
// hook_Function();// 如果置空 setInterval 出现了其它问题,可以取消该注释
```



如下,现在就不会触发无限 `debugger` 了。






如果置空 `setInterval` 出现了其它问题,那么可以删除上面的 `hook_setInterval 函数中的 return;` 语句。

这样也能过掉 `debugger`,但 ”检测控制台打开“ 的代码会不断运行。毕竟它是通过 `setInterval` 设置的。




楼上坛友说是 ”瑞数“,我特地去查了一下…………溜了溜了,不是我惹得起的存在。

海是倒过来的天 发表于 2023-11-23 15:48

学校网页敢搞,如果是学生的话不要学分啦

xixicoco 发表于 2023-11-23 15:49

先还原,后改debug

xiaopacI 发表于 2023-11-23 17:38

这不是瑞4嘛

waLR 发表于 2023-11-24 10:29

LoveCode 发表于 2023-11-23 22:05
查看了一下网站,既然 `debugger` 语句在 `VM` 中,那么可以 `hook Function、eval` 这两个函数来过掉 ...

感谢, 我开始试了, hook了以后还是会不断执行,准备先还原看看,或者看看那个96个数组是怎么生成的,能不能将里面的debugger值给替换了

waLR 发表于 2023-11-24 10:32

xiaopacI 发表于 2023-11-23 17:38
这不是瑞4嘛

不是4代, 有点像新版的

waLR 发表于 2023-11-24 10:32

海是倒过来的天 发表于 2023-11-23 15:48
学校网页敢搞,如果是学生的话不要学分啦

仅做学习使用{:1_918:}{:1_918:}

LoveCode 发表于 2023-11-24 10:34

waLR 发表于 2023-11-24 10:29
感谢, 我开始试了, hook了以后还是会不断执行,准备先还原看看,或者看看那个96个数组是怎么生成的,能不能 ...

我根据 5 楼坛友的提示搜过,这是瑞数,据说是反爬虫的天花板。可以先看其他文章或者 B 站视频了解一下、积累经验。
页: [1] 2
查看完整版本: 无限debugger问题