js逆向-无限debugger的原理及绕过

2023-11-10

前言

转载自: 爬虫从入门到精通(12) | js调试中的一些问题(无限debugger,调试干扰,内存爆破)
转载自: js 无限debugger 的原理,以及解决办法

一级目录

二级目录

三级目录

一、调试检测

1.无法打开f12

解决方案:

  • 使用鼠标右键打开
  • 更换其他浏览器,例如火狐浏览器

2.开发工具js干扰

解决方案:

打script断点找到检测点,重写该方法
在这里插入图片描述

二、内存爆破

  • 内存爆破指js通过死循环/频繁操作数据库(包括cookie)/频繁调取history等方式,使浏览器崩溃的一种反调试手段。
  • 还有一种特殊情况:js文件很大,电脑内存不足(这种情况在调试层面几乎无解)
  • 同样的js代码,在浏览器可以运行,自己调试却内存疯长,大部分情况是检测到了代码格式化(利用正则/toString() 判断代码是否进行格式化),其他情况可能就是检测了浏览器的指纹,判断是否为浏览器环境

解决是否判断js格式化的内存爆破

如果是使用正则或者toString的方式检测代码格式化,那么我们在本地运行的时候,搜索RegExp,把可以项删除或者取反即可

三、无限debugger

1.js中创建debugger的常见方式

1.1.直接创建debugger

debugger;

1.2.通过eval关键字创建debugger

此类为虚拟机中创建

eval('debugger');

在这里插入图片描述

1.3.通过Function创建debugger

此类为虚拟机中创建

Function是创建匿名函数,然后去执行

Function('debugger').call()
Function('debugger').apply()
Function().constructor('debugger').apply('action')

在这里插入图片描述
大部分debugger都是这三种的变形或者叠加

2.创建无限debugger

  • 无限debugger是指很频繁的执行debugger逻辑,并不是死循环,这样会造成浏览器卡死。
  • 常见的无限debugger就是通过上述三种方式变形,再配合定时器或者一个循环来创建的。

3.解决无限debugger

3.1.Never pause here 不在此处下断

在 debugger 位置,点击行号,右键 Never pause here,永远不在此处断下即可:
在这里插入图片描述

3.2.Add conditional breakpoint 条件断点

不适用于一直新开虚拟机的debugger
同样右键选择 Add conditional breakpoint,输入 false 即可跳过无限 debugger,其原理是添加条件断点,不管前面代码的逻辑是什么,运行到 debugger 的时候必定是 true 才能执行,只需要将其改为 false,那么它就不执行了:
在这里插入图片描述

3.3.重写定时器debugger

setInterval这种我们可以通过hook,即重写或者置空的方式过掉

setInterval_back = setInterval;

setInterval = function(a,b){
	if(a.toStirng().indexOf('debugger')!= -1){
		return setInterval_back;
	}
}

3.4.重写constructor的debugger

基本搞Function的通用形式

Function.prototype.constructor_back= Function.prototype.constructor_back;

Function.prototype.constructor_back= function(a,b){
	if(arguments==='debugger'){
	}else{
		// arguments由于不知道多少参数,所以用apply
		return Function.prototype.constructor_back.apply(this,arguments);
	}	
}

3.5.重写eval形式的debugger

在这里插入图片描述

eval_back=eval
eval=function(a){
	if (a==="debugger"){
	}else{
		return eval_back(a);
	}
}

3.6.中间人拦截替换无限debugger

①简单的静态js可以使用浏览器替换

在这里插入图片描述
在这里插入图片描述
此时文件变为紫色,此时可以修改该文件,ctrl+s保存刷新可以生效
在这里插入图片描述

②通过fiddler替换

fiddler界面右屏幕的AutoResponseder配置好,然后将需要修改的文件拖过来,选择find a file,找到我们已经修改好的源码文件
在这里插入图片描述

在这里插入图片描述

3.7.其他情况

如果上述方法失效,我们断到无限debugger的地方,向上找函数,把包含无限debugger的函数中的触发无限debugger的语句删掉即可。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

js逆向-无限debugger的原理及绕过 的相关文章

随机推荐

  • 高性能RTL仿真器ESEENT专题2:firrtl编译和安装

    由于essent使用的是firrtl工具生成的中间表达式文件 fir 所以要使用和测试essent首先要编译和安装firrtl 因此本节将介绍firrtl的编译和安装 前期准备 安装varilator 参考 verilator安装 安装yo
  • django向前端填充HTML标签,防止django自动转义为字符串

    在外面嵌套一个autoescape即可 autoescape on 填充的内容 endautoescape 官方文档请参考 https docs djangoproject com zh hans 4 0 ref templates bui
  • USB过压保护芯片,高输入电压充电器(OVP)

    PW2606B是一种前端过电压和过电流保护装置 它实现了广泛的输入电压范围从2 5VDC到40VDC 过电压阈值可在外部或外部编程设置为内部默认设置 集成功率路径nFET开关的低电阻确保了更好的性能电池充电系统应用的性能 它可以提供高达1A
  • 02链路预测

    什么是链路预测 链路预测是一个利用图网络做预测的经典任务 所谓链路 Link 指节点与节点之间的连接 也就是图论中的边 如上图所示 所谓链路预测就是预测原本不相连的两个节点之间是否有边存在 若是在有权图中 那就顺便还预测下相邻边的权重 如果
  • 微信小程序——image图片组件宽高自适应方法(可详细了!)

    前言 第一次做小程序的时候使用了image图片组件 src引用一张图片后 给图片的样式设置了width 100 发现图片变形了 我想要的效果是 图片在父级中的宽是占据父级元素的100 高度自动适应 按照html中的图片在浏览器中默认显示逻辑
  • 如何解决Linux删除文件但是磁盘空间大小并没有释放的问题?

    一句话解释是因为删除的文件正在使用 关键词 文件已删除 但是df没有正确显示磁盘剩余容量 lsof grep deleted 磁盘剩余空间明显不符合预期 删除一个大文件 但还是提示磁盘空间已满 No space left on device
  • 从0写bootloader — 最简单的bootloader和App

    地址空间划分 对于空间划分是人为定义的 bootloader编写 启动文件start s PRESERVE8 instruct is aligned by 8 bytes 指令集8字节对齐 THUMB use Thumb instructi
  • CISCN2022全国初赛题解WriteUp-MapleLeaves

    MapleLeaves WriteUp 队员 Do1phln b477ery sfc9982 0HB Web Ezpop thinkphp 6 0 12lts 存在反序列化漏洞 https www freebuf com vuls 3215
  • Unity销毁对象的问题

    最近踩了一点坑 对象有时立即销毁比较好 不然有奇怪的错误发生 比如新旧同名骨骼替换 之前的最好parent null 然后Destroy obj 如果只写Destroy的话 由于Destroy是延迟销毁对象 那么新骨骼Instantiate
  • stm32 IO输出举例

    以控制有源蜂鸣器为例 有源蜂鸣器是自带震动源的器件 无源蜂鸣器则需要方波来模拟震动源 1 硬件连接 我们可以看到蜂鸣器接在PB8 而且不是直接使用IO驱动蜂鸣器 蜂鸣器功率比较大 一般都会使用三极管作为输出控制 我们可以看到黄色部分说明了P
  • zookeeper配置

    基本事件单元 以毫秒为单位 必须 tickTime 2000 监听客户端连接的端口 必须 clientPort 2181 存储快照的目录 必须 dataDir F server0 zookeeper 3 4 6 dataTmp log目录
  • C语言—总结2—数组,字符数组与字符串的关系,字符串操作函数,输入输出函数

    一 数组 1 一维数组的创建 数组是一组同类型元素的集合 类型符 数组名 常量表达式 lt 1 gt 一般方法 lt 2 gt 宏定义 数组创建时 内必须是一个常量 2 数组的初始化 数组的初始化是指在创建数组的同时 给数组一些对应的初始化
  • 嵌入式Linux系统上的GCC编译器——编译过程.c .i .s .o

    开发板上没有GCC编译器需要安装 sudo apt install gcc 查看gcc版本 gcc v 下图内为gcc版本 基本语法 o 指定生成的可执行文件的名字 o 后面直接跟输出的名字就可以 E 只进行预处理 S 只编译 c 编译并汇
  • JDK8新特性-Stream流

    一 介绍 Java 8 API添加了一个新的抽象称为流Stream 可以让你以一种声明的方式处理数据 Stream 主要用于集合操作 极大的简化了代码 同时支持链式编程 Stream API可以极大提高Java程序员的生产力 让程序员写出高
  • 基于混沌搜索策略的鲸鱼优化算法-附代码

    基于混沌搜索策略的鲸鱼优化算法 文章目录 基于混沌搜索策略的鲸鱼优化算法 1 鲸鱼优化算法 2 改进鲸鱼优化算法 2 1 混沌反向学习初始化策略 2 2 收敛因子和惯性权重混沌扰动协同更新策略 2 3最优个体混沌搜索策略 3 实验结果 4
  • ajax传php变量,使用Ajax将Javascript变量传递给PHP

    目前 我正在使用Ajax来开发现有脚本 这是我以前从未使用过的东西 我在javascript文件中设置了一个变量 该变量从页面上的输入字段获取其值 我只需要使用Ajax将其发布到我的PHP页面 不知道从哪里开始 我不确定您需要查看什么代码
  • 基于支持向量机SVM的沪深300股票预测股票涨跌方向

    结果参考 https www bilibili com video BV1nY411z7Kk spm id from 333 999 0 0 附完整代码 数据
  • Linux中FTP配置文件详解

    Linux中FTP的配置文件是 etc vsftpd vsftpd conf 1 登录和对匿名用户的设置 anonymous enable YES 设置是否允许匿名用户登录FTP服务器 默认为YES local enable YES 是否允
  • 从五个方面参与孩子的编程教育

    很多家长在考虑是否让孩子学习编程的时候 会因为自己不懂编程 觉得无法参与孩子的学习过程 也不知道如何检验孩子的学习成果 内心的一系列不确定性 导致再三犹豫 其实 少儿编程的学习也是有阶段性的 家长最重要的责任往往不是所谓的 辅导 而是在启蒙
  • js逆向-无限debugger的原理及绕过

    前言 转载自 爬虫从入门到精通 12 js调试中的一些问题 无限debugger 调试干扰 内存爆破 转载自 js 无限debugger 的原理 以及解决办法 文章目录 前言 一级目录 二级目录 三级目录 一 调试检测 1 无法打开f12