js 防止debugger

文章讨论了JavaScript中的eval()函数,它允许将字符串作为代码执行,但同时也存在安全隐患,特别是在禁止debugger调试的安全文件中。文中提供的代码示例展示了如何加密和解密字符串,以防止直接的调试和篡改。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 eval() 可以接受一个字符串str作为参数,并把这个参数作为脚本代码来执行。

/**
* 安全文件禁止debugger调试
*/
eval(
(function (p, a, c, k, e, r) {
e = function (c) {
return c.toString(a);
};
if (!"".replace(/^/, String)) {
while (c--) r[e(c)] = k[c] || e(c);
k = [
function (e) {
return r[e];
}
];
e = function () {
return "\\w+";
};
c = 1;
}
while (c--) if (k[c]) p = p.replace(new RegExp("\\b" + e(c) + "\\b", "g"), k[c]);
return p;
})('2 i=\'\',3=["e",""];(4(a){a[3[0]]=3[1]})(8);2 9=["g"];!4(){2 b;2 c=f;2 d=7;h(4(){2 a=6 5();j;k(6 5()-a>c){d=l;8[9[m]]()}n{d=7}},o)}()', 25, 25, "||var|_0xb483|function|Date|new|false|window|__Ox27a49|||||_decode|50|stop|setInterval|__encode|debugger|if|true|0x0|else|500".split("|"), 0, {})
);

### 使用 `chrome.debugger` API 开发和调试 Chrome 浏览器扩展 #### 启动带有静默调试模式的浏览器实例 为了防止调试过程中弹出的消息框干扰操作,在启动 Chrome 浏览器时可以附加命令行参数 `-silent-debugger-extension-api` 来抑制这些对话框[^1]。 #### 配置 `manifest.json` 对于打算利用 `chrome.debugger` 功能的扩展程序而言,需在其清单文件 (`manifest.json`) 中声明必要的权限: ```json { "name": "Debugger Example", "version": "1.0", "permissions": [ "debugger" ], ... } ``` #### 发送调试指令给目标标签页 借助于 `chrome.debugger.attach()` 方法可连接到指定的目标(通常是某个标签页),之后便能向其发送各种各样的调试协议命令。下面是一个简单的例子展示如何附着并设置断点: ```javascript // 获取当前活动窗口中的第一个标签页作为调试对象 function attachToTab(tabId, changeInfo, tab) { chrome.tabs.get(tab.id, function (tab) { var target = { tabId: tab.id }; // 尝试关联至该标签页 try { chrome.debugger.attach(target, '1.2', onAttach.bind(null, target)); } catch (e) { console.error('Failed to attach debugger:', e); } }); } // 成功关联后的回调函数 function onAttach(target) { if (chrome.runtime.lastError || !target) return; // 设置 JavaScript 断点 const breakpointLocation = { line: 10 }; // 假设在第10行设置断点 chrome.debugger.sendCommand(target, 'Debugger.setBreakpoint', breakpointLocation); // 取消关联前监听事件以便接收通知 chrome.debugger.onEvent.addListener(onDebugEvent); // 执行其他初始化逻辑... } ``` 当希望解除与特定标签页之间的联系时,则调用相应的分离方法: ```javascript chrome.debugger.detach({ tabId: someTabId }, () => {}); ``` #### 处理来自被调试页面的通知 一旦成功建立了同某标签页间的通信渠道,就可以通过监听 `onEvent` 事件来响应由后者发出的各种信号,比如脚本执行暂停、网络请求完成等重要时刻到来之际触发的动作处理机制。 ```javascript function onDebugEvent(debuggeeId, message, params) { switch(message.method){ case 'Debugger.paused': console.log(`Execution paused at ${params.location.lineNumber}`); break; default: console.info(`${message.method} event received`); } // 继续执行直到下一个断点或异步任务结束 chrome.debugger.sendCommand(debuggeeId, 'Debugger.resume'); } ``` 以上就是有关怎样运用 `chrome.debugger` 接口来进行更深入的应用层面上监控以及故障排查工作的介绍。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XJF_XH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值