javascript - 如何仅禁用 chrome 中的 "debugger"关键字,该关键字由循环内的 eval 执行?

标签 javascript google-chrome debugging

我只想在整个调试过程中禁用“调试器”关键字。 我正在调试一个被混淆的脚本,它使用 eval 生成一个 [VM],然后,这个 [VM] 与另一个 eval 有一个设置的间隔,另一个 eval 也有 debugger 关键字,它被执行了很多次(我的猜测至少会是数百次)。


复制方式:克隆https://github.com/krpar/pooky-browser , 并从 README 使用第 10 周的 pooky。之后,运行“node index.js”,打开 devtools 并启用断点


我的想法是:获取 chromium 源代码,编辑“调试器”关键字,使其没有实际用途。 为什么效率不高:在我的机器上编译需要 13 个小时;我不完全知道我将如何做到这一点;我会把它作为最后的手段;


我看过Chrome how to disable debugger keyword or disable pause我已经看到 Wener 的回答,我不确定我是否可以成功复制它,因为我克隆的存储库已经将 pooky.js 脚本“注入(inject)”到 supremenewyork.com 网站

我也尝试寻找更多答案,但他们只是禁用所有断点或试图将脚本黑盒化;这样做的缺点:我尝试使用“永不停止”,但是当它被 eval 执行时,它没有用


此代码来自生成的第一个 [VM]

(function() {
    (function a() {
        var c = new Date().valueOf();
        eval(" try { setTimeout(a, 2000); (function b () { debugger; if((R0ggg() - this) > 30) { b.call(R0ggg()); } }).call(R0ggg()); } catch (e) { } ");
        if ((new Date().valueOf() < c) || (new Date().valueOf() - c) > 1062) {
            var k0gggg = 2;
            for (; k0gggg !== 1; ) {
                switch (k0gggg) {
                case 2:
                    (function() {
                        var D3wg = 2;
                        for (; D3wg !== 7; ) {
                            switch (D3wg) {
                            case 3:
                                return;
                                break;
                            case 4:
                                D3wg = p3wg[t3wg] ? 3 : 9;
                                break;
                            case 2:
                                var X3wg = "u";
                                X3wg += "n";
                                X3wg += "d";
                                X3wg += "e";
                                X3wg += "f";
                                X3wg += "i";
                                X3wg += "n";
                                X3wg += "e";
                                X3wg += "d";
                                var t3wg = "_";
                                t3wg += "p";
                                t3wg += "Z";
                                t3wg += "6";
                                t3wg += "R";
                                t3wg += "H";
                                t3wg += "z";
                                t3wg += "K";
                                t3wg += "3";
                                t3wg += "L";
                                t3wg += "T";
                                t3wg += "1";
                                t3wg += "I";
                                var p3wg = typeof window !== X3wg ? window : typeof global !== X3wg ? global : this;
                                D3wg = 4;
                                break;
                            case 9:
                                try {
                                    var J3wg = 2;
                                    for (; J3wg !== 1; ) {
                                        switch (J3wg) {
                                        case 2:
                                            AtCB();
                                            J3wg = 1;
                                            break;
                                        }
                                    }
                                } catch (S3wg) {}
                                p3wg[t3wg] = function() {}
                                ;
                                D3wg = 7;
                                break;
                            }
                        }
                    }());
                    k0gggg = 1;
                    break;
                }
            }
        }
    }
    )()
}
)();

我希望我的 google chrome devtools 不会停在“调试器”关键字处

最佳答案

这是一个非常 hacky 的想法,但一种可能性是 monkeypatch window.eval,它在脚本运行之前用任何东西替换 debugger 的所有实例。在 index.js 中,在第一个 addScriptTag 调用的正上方,放置:

await page.addScriptTag({content: `
  const origEval = window.eval;
  window.eval = (str) => {
    const replaced = str.replace(/debugger/g, 'undefined');
    return origEval(replaced);
  };
`});

关于javascript - 如何仅禁用 chrome 中的 "debugger"关键字,该关键字由循环内的 eval 执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58777826/

相关文章:

google-chrome - 如何让 Chromium 发送新的 WebSocket 握手?

google-chrome - jQuery 日期选择器在 Chrome 和 Firefox 上显示不同

c# - 有没有办法在 VS 调试器中自定义自定义对象的工具提示?

javascript - 将文本输入乘以选定的单选按钮

html - Chrome 内容/页脚空白错误

android - 无法在 Jelly Bean 中使用 systrace

delphi - 某些 HTTP 请求上的奇怪 TCP 重置 (RST)

javascript - $http Post 不发送数据

javascript - MOS 6502 仿真器增强了科学记数法的基本输出

javascript - js 对象的属性分配出现 lint 错误