首页 > 其他分享 >过瑞数中的高级debugger

过瑞数中的高级debugger

时间:2023-12-15 11:01:28浏览次数:27  
标签:Function debugger 高级 过瑞数 toString originalFunction var 重写

(function() {
    var a = new Date();
    debugger ;return new Date() - a > 100;
}())

这种debugger 如果是用‘一律不在此处暂停’是过不去的。

 

要在浏览器的控制台中执行并阻止 debugger 语句,你可以使用 JavaScript 的 toString() 方法来重写原函数的定义。

这种方法更复杂,因为它需要操纵函数的字符串表示形式,但它可以在不直接修改原始代码的情况下绕过 debugger

这里是一个示例代码,它展示了如何通过重写 Function.prototype.toString 方法来实现这一目的:

(function() {
    // 保存原始的 toString 方法
    var originalToString = Function.prototype.toString;

    // 重写 toString 方法
    Function.prototype.toString = function() {
        var originalCode = originalToString.call(this);
        // 检查并移除 debugger 语句
        var modifiedCode = originalCode.replace(/debugger;/g, '');
        return modifiedCode;
    };

    // 假设这是要绕过的原始函数
    var originalFunction = function() {
        var a = new Date(); 
        debugger; 
        return new Date() - a > 100;
    };

    // 测试重写后的函数
    console.log(originalFunction.toString());
    console.log(originalFunction());
})();

详细中文注释:

  1. var originalToString = Function.prototype.toString;:保存原始的 toString 方法,以便于在重写的方法中调用。

  2. Function.prototype.toString = function() {...}:重写 Function 对象的 toString 方法。任何函数调用 toString 方法时,都会调用这个新的方法。

  3. var originalCode = originalToString.call(this);:通过原始的 toString 方法获取当前函数的源代码。

  4. var modifiedCode = originalCode.replace(/debugger;/g, '');:使用正则表达式移除源代码中的所有 debugger; 语句。

  5. var originalFunction = function() {...}:这是你想要绕过的原始函数。

  6. console.log(originalFunction.toString());console.log(originalFunction());:分别测试重写后的 toString 方法和修改后的函数执行。

当你在浏览器控制台中运行这段代码时,它将重写 Function.prototype.toString 方法,并自动移除任何函数的 debugger; 语句。这样,即使原始函数包含 debugger 语句,它也不会触发调试器暂停。

标签:Function,debugger,高级,过瑞数,toString,originalFunction,var,重写
From: https://www.cnblogs.com/lyt263/p/17902906.html

相关文章

  • 2023最新高级难度ThinkPHP面试题,包含答案。刷题必备!记录一下。
    好记性不如烂笔头内容来自面试宝典-高级难度ThinkPHP面试题合集问:请深入解释ThinkPHP框架的核心架构和运行机制。ThinkPHP的核心架构主要由三大部分组成:核心层(Core)、行为层(Behavior)和服务层(Service)。核心层是框架的基础,提供了基本的HTTP请求处理、路由分发、模板引擎等功......
  • 四、ts高级类型
    四、ts高级类型四、ts高级类型今天也是一个小透明关注IP属地:青海0.1032022.03.0722:50:41字数2,354阅读2,398主要:class类、类型兼容性、交叉类型、泛型和keyof、索引签名类型和索引查询类型、映射类型1、class类ts全面支持es6的class关键字,并为其添加了类型注解和......
  • 聊一聊 .NET高级调试 内核模式堆泄露
    一:背景1.讲故事前几天有位朋友找到我,说他的机器内存在不断的上涨,但在任务管理器中查不出是哪个进程吃的内存,特别奇怪,截图如下:在我的分析旅程中都是用户态模式的内存泄漏,像上图中的异常征兆已经明确告诉你了,不是用户态程序吃的内存,那就是内核态程序吃的,比如:某些驱动程序操......
  • Unity3D 开发中有那些提升效率的高级技巧详解
    Unity3D是一款强大的游戏开发引擎,它提供了许多功能和工具来帮助开发者提高效率。本文将详细介绍Unity3D开发中的一些高级技巧,包括资源管理、内存优化、代码优化以及性能调优等方面。对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏开发......
  • OJAC高级会员权益:让AI助力您探索更多职业可能性
    在科技日新月异的今天,人工智能已经存在于我们生活的各个角落。除了“AIGC星辰大海:大模型工程师与产品专家深度训练营”课程外,加入OJAC高级会员权益,“AI大模型探索者计划+星辉职路塑造家”服务将帮助你在职场中发现更多可能。成为OJAC高级会员,您将得到我们专属的就业导师服务。我们......
  • 记录--7个Js async/await高级用法
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助7个Jsasync/await高级用法JavaScript的异步编程已经从回调(Callback)演进到Promise,再到如今广泛使用的async/await语法。后者不仅让异步代码更加简洁,而且更贴近同步代码的逻辑与结构,大大增强了代码的可读性与可......
  • PHP高级面试题-1
    1、谈谈你在写sql语句需要注意有哪些点?答:select*问题,客户端需要什么,就给什么,不要给多余的字段,这种情况可能还会导致本来可以走覆盖索引的语句不能走覆盖索引。不要在查询语句字段上做函数运算,这样会让索引失效。一定要避免mysql自动类型转换,比如where‘9’=9。能不设置允许......
  • PHP高级面试题-2
    1、什么事面向对象?主要特征是什么?面向对象是程序的一种设计方式,它利于提高程序的重用性,使程序结构更加清晰。主要特征:封装、继承、多态。2、SESSION与COOKIE的区别是什么,请从协议,产生的原因与作用说明?A、http无状态协议,不能区分用户是否是从同一个网站上来的,同一个用户请求......
  • Python高级之装饰器
    装饰器【一】装饰器介绍装饰器的由来软件的设计应该遵循开放封闭原则,即对扩展是开放的,而对修改是封闭的。对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。对修改封闭,意味着对象一旦设计完成,就可以独立完成其工作,而不要对其进行修改。软件包......
  • Net 高级调试之十三:托管堆的几个经典破坏问题
    一、介绍今天是《Net高级调试》的第十三篇文章,这篇文章写作时间的跨度有点长。这篇文章我们主要介绍经典的案例,如何查找问题,如何解决问题,最重要我们看到了问题,要有解决的思路,没有思路就是死路一条了,当然,这个过程也不是一帆风顺的,我是做了很多遍,最终猜得到了想要的东......