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')()  // 原型链 获取Functioneval('debugger')debugger;
}

解决方案

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

添加script标签,插入debugger

for (let i=0;i<=5000;i++)
{cont = document.bodyvar 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的案例就结束了。

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

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

相关文章

网工内推 | 运维工程师,国企、上市公司,RHCE认证优先

01 广东机场白云信息科技股份有限公司 招聘岗位&#xff1a;基础架构运维工程师&#xff08;中级&#xff09; 职责描述&#xff1a; 1、参与公司业务系统的监控、巡检、维护、故障定位、原因分析&#xff1b; 2、负责业务系统的上线、升级割接工作&#xff1b; 3、负责服务器…

Unity 踩坑记录 AnyState 切换动画执行两次

AnySate 切换动画 Can Transition To Self 将这个勾选去掉&#xff01;&#xff01;&#xff01;

Python学习之路-Hello Python

Python学习之路-Hello Python Python解释器 简介 前面说到Python是解释型语言&#xff0c;Python解释器的作用就是用于"翻译"Python程序。Python规定了一个Python语法规则&#xff0c;根据该规则可编写Python解释器。 常见的Python解释器 CPython&#xff1a;官方…

文件或目录损坏的磁盘修复方法

文件或目录损坏是一种常见的计算机问题&#xff0c;可能由多种原因导致&#xff0c;如磁盘故障、病毒或恶意软件攻击、文件系统错误等。这些损坏可能导致数据丢失或无法访问文件&#xff0c;因此及时修复至关重要。本文将深入探讨文件或目录损坏的原因&#xff0c;并提供相应的…

试用统信服务器操作系统UOS 20

作者&#xff1a;田逸&#xff08;formyz&#xff09; 试用统信Linux操作系统UOS&#xff0c;想了解一下用已有的Linux经验能否轻松驾驭它。以便在某些场景下&#xff0c;可以多一种选择。本次试验在Proxmox VE 8&#xff08;以下简称PVE 8&#xff09;平台下进行&#xff0c;采…

唠一唠Java线程池

第1章&#xff1a;引言 大家好&#xff0c;我是小黑&#xff0c;咱们今天来聊聊Java线程池&#xff0c;如果没有线程池&#xff0c;每个线程都需要手动创建和销毁线程&#xff0c;那将是多么低效和耗资源啊&#xff01; 线程池的核心作用就是复用已创建的线程&#xff0c;减少…

一个初级测试工程师的经历--我在阿里的两年

工作两年了&#xff0c;我一直希望让自己每年对测试的理解更深入一层。 谈轮了自己对各种测试的理解&#xff0c;这一年来&#xff0c;虽然对那些理概念的有所加强&#xff0c;自我感觉没有什么质的变化。前些天听我们公司的一位测试经理讲《敏捷测试》豁然开朗。他在学造飞机&…

【AnyText】文字处理AI,让平面设计如虎添翼 —— 登录和使用:详细指南!

AnyTex 关于Anytext登录魔搭社区魔搭社区链接魔搭社区登录登录完毕 登录AnyText使用Anytext生成带文字的图片手绘拖框随机 编辑图片中的文字 总结 关于Anytext 2024年1月5日&#xff0c;阿里达摩院宣布推出名为“AnyText”的算法&#xff0c;旨在解决AI绘图在处理文字创作时面临…

java解析json复杂数据的两种思路

文章目录 一、原始需求二、简单分析三、具体实现一1. api接口2. 接口返回3. json 数据解析1.&#xff09;引入Jackson库2.&#xff09;定义实体3.&#xff09;解析json字符串4.&#xff09;运行结果 4. 过程分析 四、具体实现二1. 核心代码2.运行结果 五、方案比较六、源码传送…

c++学习:STL库(框架)+字符串模板类string+vector容器+list链表

目录 stl库 常用组件包括 字符串库 字符串模板类string 头文件 最常用的字符串模板类 字符串类型 模板原型 模板的成员数据类型 模板成员函数 有些函数会有重载&#xff0c;可以去下面网址查看std::basic_string - cppreference.comhttps://zh.cppreference.com/w/cp…

1.8 day6 IO进程线程

使用有名管道实现两个进程之间的通信 进程A #include <myhead.h> int main(int argc, const char *argv[]) {//创建两个文件描述符用于打开两个管道int fd1-1;int fd2-1;//创建一个子进程int pid-1;if((fd1open("./mkfifo1",O_RDWR))-1){perror("open er…

STM32-04-STM32时钟树

STM32时钟树 什么是时钟&#xff1f; 时钟是具有周期性的脉冲信号&#xff0c;最常用的是占空比50%的方波。&#xff08;时钟是单片机的脉搏&#xff0c;搞懂时钟走向及关系&#xff0c;对单片机使用至关重要&#xff09;。 时钟树 时钟源 2个外部时钟源 高速外部振荡器(HSE…

教你如何将本地虚拟机变成服务器,供其它电脑访问

场景&#xff1a;最近在做数据仓库的作业&#xff0c;需要团队协作&#xff0c;买不起阿里云服务器&#xff0c;所以想到能不能将我本地机上的虚拟机变成服务器&#xff0c;供其它同学的电脑访问。在虚拟机上安装hadoop和hive&#xff0c;然后同学机子上安装kettle进行连接。最…

离线安装jenkins:使用rpm安装包

目录 一、安装jdk1.8二、安装yum软件包三、下载rmp安装包四、安装jenkins的rpm安装包五、创建jenkins文件目录六、设置环境变量七、配置jdk位置八、配置Jenkins配置文件九、启动Jenkins十、访问Jenkins十一、安装Jenkins插件 一、安装jdk1.8 根据博客Linux操作系统安装jdk1.8并…

实战经验分享,Python 连接 Oracle 踩坑实录

最近的一个测试任务需要测试 oracle 同步 hive 数据库的性能&#xff0c;那就需要对 oracle 数据库灌注测试数据。我就又打开了我的IDE&#xff0c;准备把我之前一下可以灌50w数据到 MySQL 的代码&#xff0c;改一改&#xff0c;直接用。 因为我在网上看到&#xff0c;语法上也…

网络安全复习--简答整理

-----------------------------------------------------教材如上图------------------------------------------------------------ 1.对称加密和非对称加密各有什么特点&#xff1f;加密解密过程中有什么区别&#xff1f;优点P38【考】 对称加密的特点&#xff1a;在针对同一…

MVC设计模式和与三层架构的关系

MVC设计模式和与三层架构的关系 MVC是一种设计模式&#xff0c;将软件按照模型、视图、控制器来划分&#xff1a; M&#xff1a;Model&#xff0c;模型层&#xff0c;指工程中的JavaBean&#xff0c;作用是处理数据 JavaBean分为两类&#xff1a; 一类称为数据承载Bean&#x…

用C语言实现动态数组Vector

代码仓库地址 1. 动态数组原理 定义一个结构体类型&#xff0c;在结构体中用指针指向一个在堆空间开辟的一块内存。 2. 编写头文件 在头文件里定义Vector的数据结构和相关操作&#xff0c;可以通过修改 “typedef char* Element;” 来修改存储的数据的类型&#xff1b; #ifn…

歌手荆涛演唱的春节回家:传统与现代的交织,歌声里的乡愁与期盼

随着冬日渐寒&#xff0c;春节的脚步愈发临近。这是一个充满温馨与期待的时刻&#xff0c;一个穿越时空、凝聚亿万华夏儿女情感的盛大节日。春节&#xff0c;它不仅仅是一个传统习俗的展现&#xff0c;更是一种心灵的归宿&#xff0c;一种文化的传承。 在悠久的历史长河中&…

Selenium 学习(0.18)——软件测试之基本路径测试

1、基本路径法测试的概念 是一种白盒测试方法&#xff0c;它在程序控制流图的基础上&#xff0c;通过分析控制构造的环行复杂性&#xff0c;导出基本可执行路径集合&#xff0c;从而设计测试用例的方法。 要保证在测试中程序的每一个可执行语句至少执行一次 【这和语句…