JavaScript奇技淫巧:debugger拦截

news2024/12/27 15:02:35

debugger指令,一般用于调试,在如浏览器调试执行环境中,可以在JavaScript代码中产生中断。

如果想要拦截debugger,是不容易的,常用的函数替代、proxy方法均对它无效,如:

window.debugger = (function() {
    var origDebug = console.debugger;
    return function() {
    // do something before debugger statement execution
    origDebug.apply(console, arguments);
    // do something after debugger statement execution
    };
})();

或:

var handler = {
  get: function(target, prop, receiver) {
    if (prop === 'debugger') {
      throw new Error("Debugger statement not allowed!");
    }
    return Reflect.get(target, prop, receiver);
  }
};
var obj = new Proxy({}, handler);

以上两方法,都无法对debugger生效。

甚至连大名鼎鼎的人工智能ChatGPT也认为debugger无法拦截。如下图:ChatGPT的回答。

而debugger有多种写法,如:

1、debugger;
2、Function("debugger").call();
3、eval("debugger");
4、setInterval(function(){debugger;},1000);
5、[].constructor.constructor('debugger')();

最原始的debugger,想要拦截这一个单词,确实是似乎不可行,但它在现实中的使用频率是不高的,更多的是后面几种用法。

这是因为,debugger更多的被人们用于反调试,比如用JShaman对JavaScript代码进行混淆加密后,就可以被加入多种不同的debugger指令用于反调试。

而上面展示的后4种用法,是可以在代码中进行拦截的。

Function("debugger").call()

拦截示例:

Function_backup = Function;
Function = function(a){
    if (a =='debugger'){
        console.log("拦截了debugger,中断不会发生1")
        return Function_backup("console.log()")
    }else{
        return Function_backup(a)
    }
}
Function("debugger").call();

运行效果:

eval("debugger")

拦截示例:

eval_backup = eval;
eval = function(a){
if(a=='debugger'){
console.log("拦截了debugger,中断不会发生0")
        return ''
    }else{
        return eval_backup(a)
    }
}    
eval("debugger");

运行效果:

setInterval(function(){debugger;},1000)

拦截示例:

var setInterval_backup = setInterval
setInterval = function(a,b){
    if(a.toString().indexOf('debugger') != -1){
        console.log("拦截了debugger,中断不会发生2")
        return null;
    }
    setInterval_backup(a, b)
}
setInterval(function(){
    debugger;
},1000);

运行效果:

[].constructor.constructor('debugger')()

拦截示例:

var constructor_backup = [].constructor.constructor;
[].constructor.constructor = function(a){
    if(a=="debugger"){
        console.log("拦截了debugger,中断不会发生3");
    }else{
        constructor_backup(a);
    }
}
try {
    [].constructor.constructor('debugger')();
} catch (error) {
    console.error("Anti debugger");
}

运行效果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/462900.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电脑音乐相册软件推荐 电脑音乐相册制作方法

音乐相册就是把照片剪辑成视频,并配上动听的音乐。音乐相册很适合保存照片,记录生活,传达出拍摄者当时的心情。下面为大家带来电脑音乐相册软件推荐,电脑音乐相册制作方法。 一、电脑音乐相册软件推荐 很多小伙伴在制作音乐相册…

大数据Doris(三):Apache Doris分布式部署准备工作

文章目录 Apache Doris分布式部署准备工作 一、Apache Doris下载 二、节点划分 三、节点配置 1、设置文件句柄数 2、时间同步 3、关闭 Swap 分区 4、调大单个进程的虚拟内存区域数量 Apache Doris分布式部署准备工作 部署Apache Doris时需要分别部署FE、BE、Broker。然…

iOS - RunLoop 基本原理介绍

一、Runloop 简介 Runloop 是通过内部维护事件循环来对事件/消息进行管理的一个对象。 事件循环(状态切换) 没有消息需要处理时,休眠以避免资源占用(用户态 -> 内核态)有消息需要处理时,立刻被唤醒&a…

电视盒子什么牌子好?数码博主盘点2022电视盒子排行榜

网络电视盒子是电视机的标配,开放性的安卓系统能观看海量视频资源,我每年也会进行电视盒子的测评,今天要来分享五款最热门的网络电视盒子推荐,跟着我一起看看网络电视盒子哪个好。 一:泰捷WEBOX60Pro电视盒子 年度…

【华为HCIP | 高级网络工程师】刷题日记(1)

个人名片: 🐼作者简介:一名大二在校生,讨厌编程🎋 🐻‍❄️个人主页🥇:落798. 🐼个人WeChat:落. 🕊️系列专栏:🖼️ 零基础…

03-stable diffusion国风小姐姐

stable diffusion 文生图 – 生成国风小姐姐 一、模型在哪里下载 下载网站civitai: Civitai | Stable Diffusion models, embeddings, LoRAs and more国风主模型:https://civitai.com/models/14171/cutegirlmix4主模型放到sd-webui-aki-v4\models\Stab…

【AUTOSAR】【信息安全】CSM

目录 一、概述 二、依赖模块 三、功能描述 3.1 基本体系结构 3.2 通用行为 3.2.1 正常操作 3.2.2 设计说明 3.3 错误分类 3.3.1 开发错误 3.3.2 运行时错误 四、API接口 4.1 通用接口 4.2 加密接口 4.3 秘钥接口 4.4 Job接口 4.5 回调接口 4.6 调度接口 一、概…

配置中心基本原理

配置中心是如何实现推送的? 背景 传统的静态配置方式想要修改某个配置时,必须重新启动一次应用,如果是数据库连接串的变更,那可能还容易接受一些,但如果变更的是一些运行时实时感知的配置,如某个功能项的…

ROS学习第四十一节——SLAM建图

https://download.csdn.net/download/qq_45685327/87721374 准备工作 请先安装相关的ROS功能包: 安装 gmapping 包(用于构建地图):sudo apt install ros-melodic-gmapping 安装地图服务包(用于保存与读取地图):sudo apt install ros-melodic-map-server 安装 navigation 包…

Java -- 多线程

多线程 并发 在同一时刻,有多个指令在单个CPU上交替执行 CPU在多个线程之间交替执行 并行 在同一时刻,有多个指令在多个CPU上同时执行 多线程的实现方式 继承Thread类的方法进行实现实现Runnable接口的方式进行实现利用Callable接口和Future接口方…

数据库基础篇 《17.触发器》

数据库基础篇 《17.触发器》 在实际开发中,我们经常会遇到这样的情况:有 2 个或者多个相互关联的表,如商品信息和库存信息分别存放在 2 个不同的数据表中,我们在添加一条新商品记录的时候,为了保证数据的完整性&#…

【刷题之路】LeetCode 203. 移除链表元素

【刷题之路】LeetCode 203. 移除链表元素 一、题目描述二、解题1、方法1——在原链表上动刀子1.1、思路分析1.2、代码实现 2、方法2——使用额外的链表2.1、思路分析2.2、代码实现 一、题目描述 原题连接: 203. 移除链表元素 题目描述: 给你一个链表的…

跨数据中心下的 Kafka 高可用架构分析

导语 本文介绍了 Kafka 跨数据中心的两种部署方式,简要分析两种方式下的不同架构以及优缺点,对这些架构可能碰到的问题也提供了一些解决思路;同时也说明了 Kafka 跨数据中心部署的社区解决方案和商业化解决方案。 背景 Kafka 作为世界上最…

laravel5.6.* + vue2 创建后台

本地已经安装好了composer 1.新建 Laravel5.6.*项目 composer create-project --prefer-dist laravel/laravel laravel5vue2demo 5.6.* 2. cd laravel5vue2demo 3. npm install /routes/web.php 路由文件中, 修改 Route::get(/, function () {return view(index); });新建…

第三方jar包引入项目,发布到本地和远程仓库

在开发过程中,往往会遇到对接其他公司的系统。然后对接公司会提供API对接方式,就是给一个jar包。我们只需要把jar包引入到项目中直接用即可。本地引用jar的话可以有两种方式。第一种就是本地包引用,如下将包放下工程下,然后maven指…

【五一劳动节来了】

今年“五一”,4月29日至5月3日放假调休,共5天。 如果你在5月4日到5月6日请假3天,加上5月7日周日,就可以形成9天的假期。 一,五一劳动节的由来⭐ 国际劳动节又称“五一国际劳动节”“国际示威游行日”(英语…

抢先看,甘特图工具DHTMLX gantt 灯箱编辑器通过套件 UI 小部件进行了扩展

DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的大部分开发需求,具备完善的甘特图图表库,功能强大,价格便宜,提供丰富而灵活的JavaScript API接口,与各种服务器端技术&am…

【STL十四】函数对象(function object)_仿函数(functor)——lambda表达式

【STL十四】函数对象(function object)_仿函数(functor)——lambda表达式 一、函数对象(function object)二、函数对象优点三、分类四、头文件五、用户定义函数对象demo六、std::内建函数对象1、 算术运算函…

YARN 远程代码执行(RCE)安全漏洞问题分析与解决方案

YARN 远程代码执行(RCE)安全漏洞问题分析与解决方案 1 YARN RCE 漏洞问题问题现象 某客户使用Tenable.sc扫描安全漏洞后反馈,YARN 存在Remote code execution (RCE) 安全漏洞问题,攻击者可在未经过身份验证的情况下通过该漏洞在…

【21】核心易中期刊推荐——人工智能 | 遥感图像识别

🚀🚀🚀NEW!!!核心易中期刊推荐栏目来啦 ~ 📚🍀 核心期刊在国内的应用范围非常广,核心期刊发表论文是国内很多作者晋升的硬性要求,并且在国内属于顶尖论文发表,具有很高的学术价值。在中文核心目录体系中,权威代表有CSSCI、CSCD和北大核心。其中,中文期刊的数…