无限debugger问题
网址脱敏:'aHR0cHM6Ly93d3cuYWh1LmVkdS5jbi8xODMvbGlzdC5odG0='打开控制台会出现3处debugger, 求教虚拟机里的debugger怎么过
可以参考(https://blog.csdn.net/wtchhb/article/details/129664738) 本帖最后由 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` 设置的。
楼上坛友说是 ”瑞数“,我特地去查了一下…………溜了溜了,不是我惹得起的存在。
学校网页敢搞,如果是学生的话不要学分啦 先还原,后改debug 这不是瑞4嘛 LoveCode 发表于 2023-11-23 22:05
查看了一下网站,既然 `debugger` 语句在 `VM` 中,那么可以 `hook Function、eval` 这两个函数来过掉 ...
感谢, 我开始试了, hook了以后还是会不断执行,准备先还原看看,或者看看那个96个数组是怎么生成的,能不能将里面的debugger值给替换了 xiaopacI 发表于 2023-11-23 17:38
这不是瑞4嘛
不是4代, 有点像新版的 海是倒过来的天 发表于 2023-11-23 15:48
学校网页敢搞,如果是学生的话不要学分啦
仅做学习使用{:1_918:}{:1_918:} waLR 发表于 2023-11-24 10:29
感谢, 我开始试了, hook了以后还是会不断执行,准备先还原看看,或者看看那个96个数组是怎么生成的,能不能 ...
我根据 5 楼坛友的提示搜过,这是瑞数,据说是反爬虫的天花板。可以先看其他文章或者 B 站视频了解一下、积累经验。
页:
[1]
2