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



在整个调试过程中,我只想禁用"debugger"关键字。我正在调试一个模糊的脚本,该脚本使用一个eval生成一个[VM],然后,这个[VM]与另一个同样具有debugger关键字的eval有一个设置的间隔,它会被执行好几次(我猜至少会执行数百次(。


复制方法:克隆https://github.com/krpar/pooky-browser,并且从第10周开始使用README中的pooky。然后,运行"nodeindex.js",打开devtools并启用断点


我的想法是:获取chromium源代码,编辑"debugger"关键字,使其没有实际用途。为什么这不高效:在我的机器上编译需要13个小时;我不知道该怎么做;我将把这作为最后的手段;


我在Chrome上查看了如何禁用调试器关键字或禁用暂停,我看到了Wener的回答,我不确定我是否能成功复制它,因为我克隆的存储库已经将pooky.js脚本"注入"到了hypertenework.com网站中

我也试着寻找更多的答案,但他们只是破坏了所有的断点,或者试图对脚本进行黑框处理;缺点:我试着使用"never stop here",但当它被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;
}
}
}
}
)()
}
)();

我希望我的谷歌chrome开发工具不会停留在"调试器"关键字

这是一个非常巧妙的想法,但一种可能性是对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);
};
`});

最新更新