emi*_*emi 4 javascript google-chrome google-chrome-devtools
我正在尝试对一个严重混淆的JS进行反向工程,作者的一个技巧是debugger在匿名函数中不断调用该语句:
不幸的是,我无法右键单击并且从不暂停它,因为每次调用该函数时都会生成一个新的匿名函数.我打开DevTools检查代码的唯一方法是切换Disable all breakpoints按钮,但也会禁用我的断点.
有没有办法在Chrome中专门禁用所有debugger语句?
如果没有,可以做些什么来绕过这个反篡改技巧?
将违规webworker.js文件下载到本地驱动器,并使用文本编辑器将所有出现的"debugger"替换为";".
然后使用Chrome扩展程序将远程资源替换为您当地的修改版本.
https://chrome.google.com/webstore/detail/resource-override/pkoacgokdfckfpndoffpifphamojphii?hl=en
仅供参考:我不赞同上述延期.这是我通过谷歌发现的第一个.
使用 devtools-on-devtools 破解 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)
笔记:
resources.pakChrome 应用程序目录中的文件并不难。有多种工具可以反编译/构建该文件,因此只需将代码添加到任何包含 SDK.DebuggerModel.Events.DebuggerPaused 之类内容的脚本中即可。甚至可以编写一个工具,在 Chrome 更新时自动执行此操作。