js反调试

前言

我们在挖src的时候有时会需要调试一下js,但是有时又会遇到js反调试技术,这里就总结一下绕过反调试的几种常见方法

什么是js反调试

JS反调试(Anti-Debugging)是指在JavaScript代码中使用各种技术和方法来阻止或干扰对代码的调试和分析。它是一种用于保护代码免受逆向工程或黑客攻击的技术手段。
JS反调试的目标是阻止或干扰常见的调试技术和工具,例如使用浏览器的开发者工具或调试器来检查和修改代码、设置断点、查看变量值等操作。通过实施反调试技术,开发人员可以增加攻击者分析和调试代码的难度,从而提高代码的安全性。

总而言之,所谓js反调试就是一种实现防止他人调试、动态分析自己的代码的技术

image.png

常见的js检测调试的方法

1.检测console对象:使用console.log输出调试信息是常见的调试方式,因此可以尝试检测console对象是否存在。

2.检测调试器是否开启:通过捕获异常来判断是否有调试器开启,因为调试器运行时往往会阻止异常抛出。

3.检测调试器的钩子(Hook):一些调试器会在运行时给调试页面注入特定的全局变量或方法,通过检测这些变量或方法是否存在来判断调试器是否开启

4.检测源代码修改:检测document对象或其内部元素是否被修改,来判断是否有人试图修改源代码。

5.检测浏览器的高度插值

6.检测开发者人员工具变量是否为true

7.利用代码运行的时间差

8.利用toString

9.检测非浏览器

常见绕过方法

下面就来谈一谈常见的绕过js反调试的方法

-禁用断点法

-条件断点法

-此处暂停法

-置空函数法

-本地覆盖法

禁用断点法

举个例子

https://jx.qqqjx.com/?url=https://www.luffycity.com/play/5812

这是一个在线视频解析网站,当打开F12的时候就会发现无法动弹,自动在这里卡住了,不让我们进行调试

image-20230713233054108

当你取消F12的时候就可以继续正常访问了,那我们该怎么进行在F12的情况下正常运行呢?

image-20230713233606356

这时我们发现网站可以正常运行了

但是这时候我们会发现,这时我们自己的断点也不起作用了,这就很尴尬

条件断点法

image-20230714003933735

首先在debugger这一行打一个断点,然后右击,编辑断点

image-20230714004025331

image-20230714004050450

按照上图进行操作,这时再刷新网站,回答先还有一处debugger,用同样的的操作添加条件断点,这是刷新网站发现可以正常运行了

此处暂停法

直接在断点处右击,选择永不在此处暂停再刷新也可以进行绕过

image-20230714004540141

置空函数法

找到这个debug方法名,在控制台重写替换,将其置空(需要找到debug的函数,然后将它置空,但是这里我没找到)

置空函数法是一种常见的绕过 JavaScript 反调试的方法之一。它的基本原理是将调试器检测代码中的关键函数或变量进行修改,使其在调试环境下失效,以此来防止或绕过反调试机制。

下面是一个示例代码,演示了置空函数法绕过反调试的实现:

1
2
3
4
5
6
7
8
9
10
11
// 检测调试器的函数
function detectDebugger() {
// 检测到调试器打开
alert("Debugger detected!");
}

// 将检测调试器的函数置空
detectDebugger = function() {};

// 调用检测调试器的函数
detectDebugger();

在这个示例中,原本用于检测调试器的 detectDebugger 函数被重新赋值为空函数,从而使得检测调试器的功能失效。当调试器尝试调用 detectDebugger 函数时,实际上调用的是空函数,不会触发任何反调试机制。

本地覆盖法

https://www.aqistudy.cn/

来尝试一下这个网站,会发现打开该网站之后无法调试

image-20230714114408289

F12,右击都没办法使用

image-20230714114520258

在这里进入管理者工具之后也是进入了断点

image-20230714114612618

经过一系列操作也是没办法进行调试,该如何解决?

image-20230714120033232

注意看这里,浏览器基本上都有这个覆盖,就使用本地的js文件代替网站js文件,思路就是先将页面导出来,去掉反调试代码,进行覆盖

image-20230714120448762

选择之后有一个允许或拒绝的提示,允许一下就好

然后就是将带有反调试代码的文件保存到本地修改,一般是js文件或者脚本文件

image-20230714121332170

思路是这样,但是要改的地方蛮多的我就不一一展示了,感兴趣的朋友可以研究研究


js反调试
https://zzhnohikari.github.io/2023/07/13/js反调试/
作者
John Doe
发布于
2023年7月13日
许可协议