防止它人代码调试?分享 1 段优质 JS 代码片段!

大家好,我是大澈!

本文约 600+ 字,整篇阅读约需 1 分钟。

每日分享一段优质代码片段。

今天分享一段 JS 代码片段,是防止代码被调试或篡改的基础。

老规矩,先阅读代码片段并思考,再看代码解析再思考,最后评论区留下你的见解!

复制代码
(()=>{
function ban(){
   setInterval(()=>{debugger;}, 50);
   try {
      ban();
   } catch(err){}
}
ban();
})();

分享原因

这段代码展示了如何使用立即执行函数表达式 (IIFE) 和 setInterval 方法,通过在短时间内持续触发 debugger 语句来迫使调试器频繁中断,从而使调试变得极为困难。

同时,通过递归调用 ban 函数进一步增加了复杂性,即使捕获到异常也会继续执行,确保防护措施持续生效。

这种技巧常用于防止代码被调试或篡改,是一些反调试和反破解技术的基础。

代码解析

1. 立即执行函数 (()=>{ ... })();

立即执行函数在定义时立即执行,不需要显式调用。

用于创建一个独立的作用域,避免变量污染全局作用域。

2. setInterval(()=>{debugger;}, 50);

setInterval 方法会每隔 50 毫秒执行一次传入的箭头函数。

箭头函数中包含 debugger 语句,会导致浏览器或开发工具中的调试器不断中断执行。

3. try {ban(); } catch(err){}

尝试调用 ban 函数自身,形成递归调用。

如果递归调用过程中出现错误(例如栈溢出),错误会被捕获并忽略,不会终止程序执行。

  • end -
相关推荐
架构师汤师爷12 小时前
一文彻底搞懂 OpenClaw 的架构设计与运行原理(万字图文)
前端·agent
苑若轻航12 小时前
防抖和节流:解决高频事件性能
前端
小黑的铁粉12 小时前
什么是事件循环?调用堆栈和任务队列之间有什么区别?
前端·javascript
小黑的铁粉12 小时前
常见的内存泄漏有哪些?
前端·javascript
喝水的长颈鹿12 小时前
JavaScript 基础入门
前端
喝咖啡的女孩12 小时前
call、apply、bind 原理与实现
前端
雨落Re12 小时前
从设计到开发,过年我用十天使用AI搭建了一个完整的博客系统
前端·后端
追风筝的人er12 小时前
企业管理系统如何实现自定义首页与千人千面?RuoYi Office 给出了完整方案
vue.js·spring boot·spring cloud
冴羽12 小时前
100s 带你了解 Bun 为什么这么火
前端·node.js·bun
Sylvia33.12 小时前
火星数据:解构斯诺克每一杆进攻背后的数字语言
java·前端·python·数据挖掘·数据分析