JS逆向之无限debugger对抗

文章目录

      • JS中实现debugger的方法
      • 无限Debugger示例
        • Demo1
        • Demo2
        • Demo3
        • Demo4
        • 总结
      • 无限Debugger实战

JS中实现debugger的方法

首先,我们要知道,在浏览器实现debugger的方法有哪些

  1. debugger关键词 ,相当于C++内联汇编的int3,在代码中嵌入这么一个关键词方便调试
  2. eval(‘debugger’) ,原理跟第一个一样,只不过是使用eval方法来调用。这个可操作空间比较大,字符串可以经过混淆或者拼接以后最后变成debugger这个关键词即可。
  3. Function(“debugger”), 原理跟2类似,只不过是在虚拟机里面执行匿名函数,匿名函数里有debugger的方法

这些debugger方法,是实现debugger的基础,可以理解为是三元素。基于三种元素,可以形成多种多样的玩法

无限Debugger示例

Demo1

那么接下来, 我就将上面的三元素进行组合,产生各种无限debugger

setInterval('debugger', 500)

这种是利用定时器的方法,去不断间隔的创造宏任务队列,用来干扰我们的调试 。

解决方案:

  1. 右键-> Never pause here
  2. 在定时器启动之前重写 setInterval
  3. AutoResponse 直接把干扰点干掉
Demo2

html页面生产时,直接自动生成几千个script标签,标签里只写一个debugger

 <script>
        !function (){debugger}()
    </script>
    <script>
        !function (){debugger}()
    </script><script>
        !function (){debugger}()
    </script><script>
        !function (){debugger}()
    </script><script>
        !function (){debugger}()
    </script><script>

如果是这种方式的话,刚刚那种解决方案就不行了。解决方案:AutoResponse 直接把干扰点干掉

Demo3
for (let i=0;i<=5000;i++)
{
    Function('debugger')()  // 原型链 获取Function
    eval('debugger')
    debugger;
}

解决方案

  1. Never pause here
  2. 干掉这个循环进入的函数
  3. AutoResponse 直接把干扰点干掉
Demo4

添加script标签,插入debugger

for (let i=0;i<=5000;i++)
{
	cont = document.body
	var newScript = document.createElement('script');
	newScript.type = 'text/javascript';
	newScript.innerHTML = 'debugger';
	cont.appendChild(newScript);
}

解决方案: document.createElement里面把script重写

总结
  1. 优先尝试 Never pause here (最方便快捷,但是最卡,也最容出问题)
  2. 次优先尝试重写调用函数
  3. 使用 AutoResponse/mapping/overrides 替换

无限Debugger实战

这个是猿人学第五十四题,大家也可以自己动手体验下。

在这里插入图片描述

进入到目标网站,直接打开调试器,就出现了一个反调试

在这里插入图片描述

通过调用栈找到上一层,可以看到这个反调试的函数

s(s(11))
ƒ eval() { [native code] }

直接在控制台敲一下s11,可以看到这个就是eval函数

s(38)+s(56)+s(62)+s(50)
'debugger'

执行一下这四个字符串,就可以看到是debugger这个字符串。

这个反调试只有一层的话,就可以直接Never pause here就可以过掉,也可以采用HOOK的方法,重写一个eval函数,让这个地方不会断下来。

_eval = eval;
eval= function()
{
	if ([arguments[0]].indexOf('debugger'))
	return eval(arguments[0])
}

这样这个反调试的点就过掉了,然后我们进行一个翻页,又出现一个无限debugger,查看一下当前的堆栈

在这里插入图片描述

这里用循环的方式一直去添加一个o的节点,

在这里插入图片描述

o实际上就是一个带debugger关键字的标签,按照之前的思路,我们应该把appendChild这个函数给hook掉。

_appendChild = Node.prototype.appendChild
Node.prototype.appendChild = function()
{
	if (arguments[0].innerHTML && arguments[0].innerHTML.indexOf('debugger') != -1)
    {
		 arguments[0].innerHTML = ''
	}
	return _appendChild.apply(this, arguments)
}

执行一下这段代码,这个无限Debugger就过掉了。

在这里插入图片描述

继续运行,这里也有个无限Debugger,直接右键Never pause here解决

在这里插入图片描述

然后刷新一下页面,这里就会出现一个新的无限debugger,这里有一堆的debugger标签

在这里插入图片描述

这里用Overrides把这几百个debugger关键词替换掉。

在这里插入图片描述

重新刷新页面,这样就过掉了这个无限Debugger

在这里插入图片描述

再继续,这里又出现了一个无限Debugger,因为这个位置只有一行,不管多复杂,其实都可以右键Never pause here搞定,也可以直接Overrides删掉,混淆的太厉害了,原理就不看了。

到这里,整个无限Debugger的案例就结束了。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Flutter】webview页面访问不了 显示err_cleartext_not_permitted

在AndroidManifest.xml中添加语句 android:usesCleartextTraffic"true"位置如图&#xff1a;

Python 使用input函数从键盘输入数据

在Python中&#xff0c;input()函数可以从键盘获取用户的输入数据。当我们使用input()函数时&#xff0c;会暂停程序的执行&#xff0c;等待用户输入数据&#xff0c;并将用户输入的数据作为字符串返回。 如&#xff1a; name input("请输入你的姓名&#xff1a;"…

2024年1月10日 十二生肖 今日运势

小运播报&#xff1a;2024年1月10日&#xff0c;星期三&#xff0c;农历十一月廿九 &#xff08;癸卯年乙丑月癸酉日&#xff09;&#xff0c;法定工作日。 红榜生肖&#xff1a;龙、牛、蛇 需要注意&#xff1a;鸡、狗、兔 喜神方位&#xff1a;东南方 财神方位&#xff1…

扩展学习|数据融合助推商务智能与分析

文献来源&#xff1a;[1]李爱华,续维佳,石勇.基于数据融合的商务智能与分析架构研究[J].计算机科学,2022,49(12):185-194. 一、信息融合 &#xff08;一&#xff09;信息融合定义演变 早期信息融合的定义指出&#xff0c;其主要任务是综合分析若干传感器观测到的信息[9,…

pod探针2:

就绪探针演示&#xff1a; 演示探针失败 存活探针&#xff08;livenessProde&#xff09;&#xff1a;探测容器是否是否运行正常&#xff0c;如果探测失败则kubelet杀掉容器&#xff08;不是Pod&#xff09;&#xff0c;容器会根据重启策略决定是否重启 就绪探针&#xff08;re…

LINE网页版使用方法(内含LINE网页版特点总结)

如果想要在电脑上使用LINE&#xff0c;但是又觉得下载客户端很累赘的话&#xff0c;LINE网页版是你最好的选择。但是LINE网页版相对于其他平台来说使用方式比较少。所以今天就来讲讲&#xff0c;我们有什么方式可以在电脑中使用LINE。 LINE网页版使用方法 1.需要使用Chrome浏览…

Nginx配置反向代理实例一

Mac 安装Nginx教程 提醒一下&#xff1a;下面实例讲解是在Mac系统演示的&#xff1b; 反向代理实例一实现的效果 在浏览器地址栏输入www.testproxy.com, 跳转到系统Tomcat主页面。 反向代理准备工作 第一步&#xff1a;在系统的 hosts 文件进行ip和域名对应关系的配置。 …

利用“与非”运算实现布尔代数中的与,或,非三种运算

什么是“与非”运算&#xff1f; 要想明白“与非”运算&#xff0c;首先要明白“与”运算和“非”运算。 “与”运算在离散数学中叫做合取式&#xff0c;也就是A和B相同时为1的时候结果才为1&#xff0c;其余情况都为0 下面是“与”运算的真值表 “非”运算在离散数学中叫做否…

GAMES101-Assignment4

一、问题总览 实现de Casteljau算法来绘制由4个控制点表示的Bzier曲线。需要修改main.cpp中的如下函数&#xff1a; bezier&#xff1a;该函数实现绘制Bzier曲线的功能。它使用一个控制点序列和一个OpenCV::Mat对象作为输入&#xff0c;没有返回值。它会使t在0到1的范围内进行…

改进的yolov5目标检测-yolov5替换骨干网络-yolo剪枝(TensorRT及NCNN部署)

YOLOv5改进点 2022.10.30 复现TPH-YOLOv5 2022.10.31 完成替换backbone为Ghostnet 2022.11.02 完成替换backbone为Shufflenetv2 2022.11.05 完成替换backbone为Mobilenetv3Small 2022.11.10 完成EagleEye对YOLOv5系列剪枝支持 2022.11.14 完成MQBench对YOLOv5系列量化支持…

Qt之基本数据类型

Qt 基本数据类型定义在#include <QtGlobal>中&#xff0c;如表下表所示。 (1)打开Qt Creator&#xff0c;新建一个控制台项目&#xff0c;项目名为test。 (2)在 main.cpp 中输入如下代码: #include <QCoreApplication> #include <QtGlobal> int main(int…

《数据结构、算法与应用C++语言描述》-红黑树的C++实现-百万级数据量测试通过

红黑树 完整可编译运行代码见仓库&#xff1a;GitHub - Jasmine-up/Data-Structures-Algorithms-and-Applications/_3matrix。 如有问题请在评论区指出。另外&#xff0c;Github仓库会根据我的学习情况持续更新&#xff0c;欢迎大家点star&#xff0c;谢谢。 基本概念 红-黑…

实验笔记之——服务器链接

最近需要做NeRF相关的开发,需要用到GPU,本博文记录本人配置服务器远程链接的过程,本博文仅供本人学习记录用~ 连上服务器 首先先确保环境是HKU的网络环境(HKU AnyConnect也可)。伙伴已经帮忙创建好用户(第一次登录会提示重新设置密码)。用cmd ssh链接ssh -p 60001 <u…

软件测试|MySQL逻辑运算符使用详解

简介 在MySQL中&#xff0c;逻辑运算符用于处理布尔类型的数据&#xff0c;进行逻辑判断和组合条件。逻辑运算符主要包括AND、OR、NOT三种&#xff0c;它们可以帮助我们在查询和条件语句中进行复杂的逻辑操作。本文将详细介绍MySQL中逻辑运算符的使用方法和示例。 AND运算符 …

Spark SQL基础知识

一.DataFrame详解 1.清洗相关的API 去重API:dropDuplicates 总结:用来删除重复数据,如果没有指定参数subset,那么要比对行中的所有字段内容,如果全部相同,就认为是重复数据,会被删除;如果有指定参数subset,那么只比对subset中指定的字段范围,如果指定不存在的字段会报错. 删…

小红书素人种草笔记铺量推广,有素人资源合作吗?

小红书&#xff0c;作为国内领先的社交电商平台&#xff0c;以其独有的口碑效应和海量素人资源&#xff0c;成为了品牌推广界的新宠。如何利用小红书素人笔记进行铺量推广&#xff0c;提升品牌知名度呢&#xff1f;本文伯乐网络传媒将来给大家进行全面解析。 一、小红书素人笔记…

C#封装服务

C#封装服务 新建服务项目&#xff1b;重构 OnStart 和 OnStop using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Linq; using System.ServiceProcess; using System.Text; using S…

进阶学习——Linux网络

目录 一、网络配置命令 1.ifconfig——IP地址 1.1ifconfig的基础用法 1.1.1ifconfig命令详解 1.2常用格式 1.3修改网卡名称 1.3.1临时修改 1.3.2永久修改 1.4临时修改网卡 1.4.1设置虚拟网卡 1.4.2延伸——ethtool 1.5永久修改网卡 1.6实验 —— 双网卡配置 1.…

@PolarDB,你的动手体验搭子,来啦

前言 PolarDB是阿里云自研的新一代云原生数据库&#xff0c;在计算存储分离架构下&#xff0c;利用了软硬件结合的优势&#xff0c;为用户提供具备极致弹性、高性能、海量存储、安全可靠的数据库服务。100%兼容MySQL和PostgreSQL生态&#xff0c;高度兼容Oracle语法。 1月17日…