Skip to content

Latest commit

 

History

History
169 lines (92 loc) · 4.86 KB

[楼兰学习网络安全]-2023-3-13-浏览器JS反调试与绕过.md

File metadata and controls

169 lines (92 loc) · 4.86 KB

浏览器JS反调试与绕过

原创 楼兰 楼兰学习网络安全

楼兰学习网络安全

微信号 LLSecurity

功能介绍 分享计算机知识


__发表于

收录于合集

一、背景介绍

在读《风控要略:互联网业务反欺诈之路》的时候,设备指纹章节中提到了可以通过检测控制台是否开启作为WEB作弊环境的检测方案之一。

可见:第四章 设备指纹

又想到之前在真实环境中遇到过,所以学习一下。

二、反调试

有时候我们在测试一个站点的时候,刚打开F12,就发现暂停了,如下图所示,便可以判断目标页面做了JS反调试处理

做JS反调试通常是通过检测控制台是否开启,当检测到控制台开启了,则进入反调试逻辑

检测控制台是否开启的一些方案:

1、监听按键

如用户按F12、Ctrl+Shift+i的时候

2、窗口尺寸变化

利用打开控制台后HTML窗口的尺寸变化作为判断标准,如下是一个采用此方案作为检测依据的项目

https://github.com/sindresorhus/devtools-detect

3、debugger命令的执行时间

打开开发者工具后,在遇到debugger时,会进入暂停,在debugger之前记录时间start,debugger之后记录时间end,通过判断end与start的时间差来判断用户是否开启控制台。

尝试写一个简单的反调试代码,用浏览器访问的时候正常显示,打开开发者工具后则会暂停

<!DOCTYPE html>  
<html>  
<head>  
    <meta charset="utf-8">  
    <title>Debugger</title>  
</head>  
<body>  
    <h2>Hello Debugger</h2>  
    <script type="module">  
        setInterval(function() {  
            debugger  
        }, 1000);  
    </script>  
</body>  
</html>

三、绕过反调试

我的Chrome是英文显示,Firefox是中文显示

1.停用断点功能

停用断点功能,简单粗暴,缺点是你自己也无法使用断点。

Chrome - Sources - Deactivate breakpoints (Ctrl + F8)

FireFox - 调试器 - 停用断点

2.设置断点条件

为断点设置条件,当设置的条件表达式为真时,调试器才会暂停。当设置为false时,则永远不会暂停。

Chrome - 右键 - Add Contitional Breakpoint

设置为false

Firefox - 右键 - 添加条件

3.不在此处暂停

类似白名单,在指定的位置不暂停。

Chrome - 右键 - Never Pause Here

Firefox - 右键 - 永不在此处暂停

4.响应包替换关键字

可以直接替换响应包中的debugger关键字

BurpSuite - Proxy - Options - Match and Replace 将debugger关键字设置为console.log('debugger')

这个时候我们再打开开发者工具时,便可以看到没有进入暂停页面

四、案例分析

在fofa中搜索body里面有bebugger关键字的WEB站点,选一个 http://www.fyw0.cn/

反调试逻辑

1、每1ms执行一次检测

2、在开启开发者工具的时候进入调试

2、通过debugger语句执行的时间是否小于50ms,判断是否重载页面

这里的逻辑比较简单且只有一个debugger,所以通过 设置断点条件不在此处暂停 绕过反调试非常快捷。

五、相关文档

https://stackoverflow.com/questions/7798748/find-out-whether-chrome-console- is-open

预览时标签不可点

微信扫一扫
关注该公众号

知道了

微信扫一扫
使用小程序


取消 允许


取消 允许

: , 。 视频 小程序 赞 ,轻点两下取消赞 在看 ,轻点两下取消在看