JS逆向实战——开发者工具检测

news2024/12/23 20:03:00

说明:仅供学习使用,请勿用于非法用途,若有侵权,请联系博主删除

作者:zhu6201976

一、背景

在JS逆向领域,Chrome开发者工具是核心,抓包、调试、看调用栈等都离不开它。可以说,逆向人员少了它,犹如失去左膀右臂,寸步难行。网站反爬人员自然深知该点。因此,必须想尽一切办法阻扰逆向人员使用开发者工具。或者需要付出一定的代价,如时间、精力成本。因此,针对开发者工具的检测和拦截,各种反调试应运而生。

二、常见检测和拦截方式

1.检测控制台输出

通过监测控制台输出可以检测到开发者工具的使用。下面的JavaScript代码会在控制台输出一些信息,网站可以通过检查这些信息来判断是否有人打开了开发者工具。

// 在控制台输出一些信息
console.log('Hello, developer!');

// 监听控制台输出
console.log = function(message) {
    if (message === 'Hello, developer!') {
        // 开发者工具被检测到,可以执行相应的处理
        alert('Developer tools detected!');
    }
};

 

2.检测页面元素变化

可以通过监测document对象的变化来检测开发者工具的打开。例如,监测document.documentElement的变化。

// 监听document元素变化
var lastElement = document.documentElement;
setInterval(function() {
    if (lastElement !== document.documentElement) {
        // 页面元素发生变化,可能是开发者工具被打开
        alert('Developer tools detected!');
    }
    lastElement = document.documentElement;
}, 1000); // 检查频率,可以根据需要调整

3.检测性能API

使用性能API可以检测页面加载性能,开发者工具的打开可能会导致性能数据的变化。

// 使用性能API
if (performance.mark) {
    performance.mark('start-detection');
    performance.measure('end-detection', 'start-detection');
    var entries = performance.getEntriesByName('end-detection');
    if (entries.length > 0) {
        // 开发者工具被检测到
        alert('Developer tools detected!');
    }
}

4.浏览器窗口尺寸变化

监听window对象的resize事件,检测浏览器窗口尺寸的变化。正常用户在使用浏览器时,窗口尺寸不太可能频繁变化。

window.addEventListener('resize', function() {
    // 窗口尺寸变化,可能是开发者工具被打开
    alert('Developer tools detected!');
});

5.按键F12的使用

监听keydown事件,检测是否按下了F12键。F12通常是打开浏览器开发者工具的快捷键。

document.addEventListener('keydown', function(event) {
    if (event.keyCode === 123) {
        // 按下了F12键,可能是开发者工具被打开
        alert('Developer tools detected!');
    }
});

6.鼠标右键的使用

监听contextmenu事件,检测是否右键菜单被触发。

document.addEventListener('contextmenu', function(event) {
    // 右键菜单被触发,可能是开发者工具被打开
    alert('Developer tools detected!');
    event.preventDefault(); // 阻止默认右键菜单
});

7.禁用复制黏贴快捷键

监听keydown事件,检测是否按下了复制(Ctrl+C、Command+C)或黏贴(Ctrl+V、Command+V)的快捷键。

document.addEventListener('keydown', function(event) {
    if ((event.ctrlKey || event.metaKey) && (event.keyCode === 67 || event.keyCode === 86)) {
        // 按下了复制或黏贴快捷键,可能是开发者工具被打开
        alert('Developer tools detected!');
    }
});

8.禁用控制台输出

禁用console.log等控制台方法,使得爬虫无法通过控制台输出数据。

// 禁用console.log
console.log = function() {
    alert('Console log is disabled!');
};

 

9.无限debugger的加入

在JavaScript代码中插入无限循环的debugger语句,这会导致页面在打开开发者工具时停止响应。

(function anonymous(
) {
    debugger
})

10.代码执行时间的判断

监测某段代码的执行时间,如果执行时间超过预定阈值,可能是爬虫工具在试图处理页面内容。

var startTime = new Date().getTime();

// 一些需要监测的代码

var endTime = new Date().getTime();
var executionTime = endTime - startTime;

if (executionTime > 1000) { // 设置阈值,单位为毫秒
    // 代码执行时间过长,可能是爬虫
    alert('Developer tools detected!');
}

三、某网盘站点反调试

url:aHR0cHM6Ly9jaGlsbHgudG9wL3YvY3FPcm5xUGFyZ1dQLw==

在页面加载过程中,加载了一个名为devtools-detector.min.js的文件,从文件名看,大概率就是检测拦截开发者工具,它到底如何检测的呢?

在这2000多行代码中,检测方式是多种方法的综合应用,得到最终权重,如图所示:

可以看到,该方法每0.5秒执行一次,反复校验上述8个函数的返回结果,经调试得知,最终它通过性能差异检测出正在使用开发者工具的,类似本文中常见检测和拦截方式第3点:检测性能API。

一旦检测到使用了开发者工具,会执行以下代码,反复刷新页面:

devtoolsDetector.addListener(function(isOpen, detail) {
    if (isOpen) {
        location.reload(true);
    }
});
devtoolsDetector.launch();

此处只需要在devtoolsDetector.launch()执行之前,将launch()置空,即可过反调试。

devtoolsDetector.launch=function(){}

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

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

相关文章

PFA洗瓶耐温范围广应用化学实验耐强酸

PFA洗瓶:科技让实验更便捷 在实验室里,洗瓶是常用工具之一。而PFA洗瓶则是一种特殊塑料制作的洗瓶,它的外观半透明,方便观察液体。 PFA洗瓶的耐温范围非常广,可以承受-200℃到260℃的温度,这意味着它可以…

vmware离线安装docker-compose

vmware离线安装docker-compose 最近安装docker-compose,发现git取拉取,不是拒绝连接就是报443错误,或者其他错误 最后发现用包直接传上去好用,不用git拉取了 离线安装docker-compose 本文章给的docker-compose离线包,…

超短焦投影仪是不是智商税?实测分享,当贝U1用起来是真的香

选购投影仪的时候,很多人都是先看亮度、分辨率等参数,而我的建议是先看投射比。因为用过投影仪的朋友都知道,投影仪对空间的距离是有要求的,如果你买的是投射比为1.2:1的投影仪,那么可能在小空间里就没法施展&#xff…

HTML_有哪些字体样式及使用

文章目录 🐱‍🐉一、字体样式的基本概念:🐱‍🐉二、css字体样式属性有:🤣1、设置字体类型(font-family)🤣2、设置字体大小(font-size)…

CogVLM与CogAgent:开源视觉语言模型的新里程碑

引言 随着机器学习的快速发展,视觉语言模型(VLM)的研究取得了显著的进步。今天,我们很高兴介绍两款强大的开源视觉语言模型:CogVLM和CogAgent。这两款模型在图像理解和多轮对话等领域表现出色,为人工智能的…

B038-Spring基础

目录 mybatis高级查询(动态sql)springspring简介IOC和AOP介绍入门案例导包核心配置文件获取对象 迫切加载和懒加载BeanFactory和ApplicationContext区别和联系spring管理beanDI依赖注入xml注入注解注入(简单介绍 后面用) Spring测试bean的作用域bean的生命周期多例默认是懒加载…

Unity3d C#利用Editor编辑器拓展实现配置UI背景样式一键设置UI背景样式功能(含源码)

前言 在开发UI滚动列表的时候,经常会有每项的背景图不统一的情况,会间隔重复的情况居多。这种情况下,手动去设置间隔一行的背景图或者颜色是比较麻烦的。在此背景下,笔者尝试写个小工具,在搭建UI时配置一下循环背景的…

如何打造自己的知识付费小程序平台

在当今知识付费的浪潮中,我们经常可以看到各种知识付费平台如雨后春笋般涌现。然而,这些平台往往只是一个过客,让我们短暂停留后,便淹没在信息的海洋中。如果你有一个出色的课程,为什么不让它在一个属于你自己的平台上…

人工智能与自动驾驶:智能出行时代的未来之路

一、前言 首先,我们先来说下什么是人工智能,人工智能(Artificial Intelligence,简称AI)是一门研究如何使计算机系统能够模拟、仿真人类智能的技术和科学领域。它涉及构建智能代理,使其能够感知环境、理解和…

Linux多版本cuda切换

目标 将cuda版本从10.0切换为11.1 步骤 查看当前cuda版本: nvcc -V编辑.bashrc文件: vim ~/.bashrc在文件中添加以下几行(若已存在则忽略): export PATH$PATH:/usr/local/cuda/bin export LD_LIBRARY_PATH$LD_LI…

Android解决报错 superclass access check failed: class

Android解决报错 superclass access check failed: class 前言: 最近在打开之前的项目demo时,出现一个错误Cause: superclass access check failed: class butterknife.compiler.ButterKnifeProcessor$RScanner 1.错误信息如下: Executio…

【Ehcache技术专题】「入门到精通」带你一起从零基础进行分析和开发Ehcache框架的实战指南(3-储存方式)

这里写目录标题 Ehcache的存储方式堆内存(MemoryStore)指定可用内存Xml代码Xml代码Xml代码 驱除策略元素过期Xml代码 非堆内存(BigMemory)磁盘(DiskStore)指定可用容量Xml代码 元素过期 Ehcache的存储方式 …

外卖系统海外版:技术智能引领全球美食新潮流

随着全球数字化浪潮的推动,外卖系统海外版不仅是食客们品味美食的便捷通道,更是技术智能在美食领域的引领者。本文将深入剖析其背后的技术实现,揭开代码带来的美食革新。 多语言支持:构建全球美食沟通桥梁 def multilingual_su…

【UE5.1】M4自动地形材质+UltraDynamicSky+Oceanology插件的使用记录

目录 效果 步骤 一、项目准备 二、插件使用记录 准备过程 M4自动地形插件使用过程 超动态天空插件使用过程 运行时修改天空效果 运行时修改天气效果 海洋插件使用过程 在海洋中游泳 效果 步骤 一、项目准备 1. 创建一个第三人称游戏工程 2. 将M4文件夹和Ultr…

【Java】网络编程-UDP字典服务器客户端简单代码编写

上文讲了UDP回响服务器客户端简单代码编写 本文将讲述UDP字典服务器客户端简单代码编写。所谓回显,就是指客户端向服务器发送一个报文,从服务器那里得到一条一模一样的回响报文 而我们的字典功能呢,则是实现了输入中文,得到对应…

Spring事务浅析

一:Spring事务简介 什么是事务: 数据库事务是指作为单个逻辑工作单元执行的一系列操作,这些操作要么一起成功,要么一起失败,是一个不可分割的工作单元。 在我们日常工作中,涉及到事务的场景非常多,一个…

MyBatis持久层框架

四、MyBatis持久层框架 目录 一、Mybatis简介 1. 简介2. 持久层框架对比3. 快速入门(基于Mybatis3方式) 二、日志框架扩展 1. 用日志打印替代sout2. Java日志体系演变3. 最佳拍档用法4. Lombok插件的使用 4.1 Lombok简介4.2 Lombok安装4.3 Lombok使用注…

Kioptrix-1

信息收集 # nmap -sn 192.168.1.0/24 -oN live.nmap Starting Nmap 7.94 ( https://nmap.org ) at 2023-12-18 20:02 CST Nmap scan report for 192.168.1.1 (192.168.1.1) Host is up (0.00025s latency). MAC Address: 00:50:56:C0:00:08 (VMware) Nmap scan report for 0bc…

卷积神经网络的学习与实现

基于matlab的卷积神经网络(CNN)讲解及代码_matlab中如何查看cnn损失函数-CSDN博客 可以看到与BP神经网络相比,卷积神经网络更加的复杂,这里将会以cnn作为学习案例。 1.经典反向传播算法公式详细推导 这里引用经典反向传播算法公式详细推导_反向目标公…

javaSE学习-4-类和对象

1. 面向对象的初步认知 1.1 什么是面向对象 面向对象编程(OOP)是一种程序设计范式,它将程序中的数据和操作数据的方法封装到对象中。在面向对象的世界里,一切都被视为对象,这些对象可以拥有数据(成员变量&…