是否可以避免破坏Chrome中的调试器语句?

emi*_*emi 4 javascript google-chrome google-chrome-devtools

我正在尝试对一个严重混淆的JS进行反向工程,作者的一个技巧是debugger在匿名函数中不断调用该语句:

演示

不幸的是,我无法右键单击并且从不暂停它,因为每次调用该函数时都会生成一个新的匿名函数.我打开DevTools检查代码的唯一方法是切换Disable all breakpoints按钮,但也会禁用我的断点.

有没有办法在Chrome中专门禁用所有debugger语句

如果没有,可以做些什么来绕过这个反篡改技巧?

Rea*_*lar 5

将违规webworker.js文件下载到本地驱动器,并使用文本编辑器将所有出现的"debugger"替换为";".

然后使用Chrome扩展程序将远程资源替换为您当地的修改版本.

https://chrome.google.com/webstore/detail/resource-override/pkoacgokdfckfpndoffpifphamojphii?hl=en

仅供参考:我不赞同上述延期.这是我通过谷歌发现的第一个.


wOx*_*xOm 5

使用 devtools-on-devtools 破解 devtools:

  1. 将 devtools 取消停靠到一个单独的窗口中
  2. 按完整的 devtools 热键 -CtrlShifti??i
  3. 将以下代码粘贴到这个新的 devtools 窗口控制台中并运行它

{
  const rx = /\bdebugger\b/y;
  const eventSymbol = SDK.DebuggerModel.Events.DebuggerPaused;
  const original = [...SDK.targetManager._modelListeners.get(eventSymbol)]
    .find(v => v.listener.name === '_debuggerPaused');
  const debuggerModel = SDK.targetManager.models(SDK.DebuggerModel)[0];

  SDK.targetManager.removeModelListener(
    SDK.DebuggerModel,
    eventSymbol,
    original.listener,
    original.thisObject);

  SDK.targetManager.addModelListener(
    SDK.DebuggerModel,
    eventSymbol,
    async function({data}) {
      if (data._debuggerPausedDetails.reason === 'other') {
        const frame = data._debuggerPausedDetails.callFrames[0];
        const code = await frame._script.requestContent();
        let {columnNumber: x, lineNumber: y} = frame._location;
        let pos = 0;
        while (y--)
          pos = code.indexOf('\n', pos) + 1;
        rx.lastIndex = Math.max(0, pos + x);
        if (rx.test(code)) {
          debuggerModel.resume();
          return;
        }
      }
      original.listener.apply(original.thisObject, arguments);
    });
}
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 您可以将此代码保存为devtools 中的一个片段,以便稍后运行。
  • 要在主开发工具中快速切换对接模式,请按CtrlShiftD??D
  • 理论上,将这段代码放入resources.pakChrome 应用程序目录中的文件并不难。有多种工具可以反编译/构建该文件,因此只需将代码添加到任何包含 SDK.DebuggerModel.Events.DebuggerPaused 之类内容的脚本中即可。甚至可以编写一个工具,在 Chrome 更新时自动执行此操作。


ori*_*dam 5

右键单击包含该debugger语句的行上的装订线,然后选择“永不在此暂停”。

在此输入图像描述