Можно ли избежать взлома оператора отладчика в Chrome? - PullRequest
0 голосов
/ 29 декабря 2018

Я пытаюсь реконструировать сильно запутанный JS, и один из приемов, которые делает автор, заключается в непрерывном вызове оператора debugger из анонимной функции:

demo

К сожалению, я не могу щелкнуть правой кнопкой мыши и Никогда не приостанавливать , потому что каждый раз, когда функция вызывается, создается новая анонимная функция.Единственный способ проверить код с открытым DevTools - это нажать кнопку Отключить все точки останова , но это также отключит мои точки останова.

Есть ли способ отключить исключительновсе debugger операторов в Chrome?

Если нет, , что можно сделать, чтобы обойти этот трюк против взлома?

Ответы [ 2 ]

0 голосов
/ 29 декабря 2018

Взломайте devtools, используя devtools-on-devtools:

  1. отсоедините devtools в отдельное окно
  2. нажмите горячую клавишу full devtools - Ctrl Shift i или 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);
    });
}

Примечания:

  • Вы можете сохранить этот код как фрагмент в devtools для запускаэто позже.
  • Для быстрого переключения режима стыковки в основных устройствах нажмите Ctrl Shift D или D
  • Теоретически, не так сложно поместить этот код в файл resources.pak в каталоге приложений Chrome.Есть несколько инструментов для декомпиляции / сборки этого файла, поэтому просто добавьте код в любой скрипт, который имеет что-то вроде SDK.DebuggerModel.Events.DebuggerPaused внутри.Можно даже написать инструмент, который делает это автоматически при обновлении Chrome.
0 голосов
/ 29 декабря 2018

Загрузите поврежденный файл webworker.js на локальный диск и используйте текстовый редактор, чтобы заменить все вхождения «отладчик» на «;».

Затем используйте расширение Chrome для замены удаленный ресурс с вашей локальной модифицированной версией.

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

FYI : я не поддерживаю вышеуказанное расширение.Это было только первое, что я нашел через Google.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...