吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1731|回复: 11
收起左侧

[求助] 无限debugger问题

[复制链接]
waLR 发表于 2023-11-23 15:17
网址脱敏:'aHR0cHM6Ly93d3cuYWh1LmVkdS5jbi8xODMvbGlzdC5odG0='
打开控制台会出现3处debugger, 求教虚拟机里的debugger怎么过
无限debugger.png

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

ceyowa 发表于 2023-11-23 16:09
LoveCode 发表于 2023-11-23 22:05
本帖最后由 LoveCode 于 2023-11-23 22:50 编辑

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

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

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

// ==UserScript==
// @name         My_Hook
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try 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[0].toString();
        if (s.includes("debugger")) {
            console.log("发现 debugger in setInterval");
            s = s.replaceAll("debugger", "");
            arguments[0] = 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 了。

image-20231123215140088.png

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

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

image-20231123212219994.png

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

海是倒过来的天 发表于 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
[md]查看了一下网站,既然 `debugger` 语句在 `VM` 中,那么可以 `hook Function、eval` 这两个函数来过掉 ...

感谢, 我开始试了, hook了以后还是会不断执行,准备先还原看看,或者看看那个96个数组是怎么生成的,能不能将里面的debugger值给替换了
 楼主| waLR 发表于 2023-11-24 10:32

不是4代, 有点像新版的
 楼主| waLR 发表于 2023-11-24 10:32
海是倒过来的天 发表于 2023-11-23 15:48
学校网页敢搞,如果是学生的话不要学分啦

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

我根据 5 楼坛友的提示搜过,这是瑞数,据说是反爬虫的天花板。可以先看其他文章或者 B 站视频了解一下、积累经验。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-22 02:41

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表