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

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

作者: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.mzph.cn/news/232847.shtml

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

相关文章

C语言--字符函数与字符串函数

大家好,我是残念,希望在你看完之后,能对你有所帮助,有什么不足请指正!共同学习交流 本文由:残念ing 原创CSDN首发,如需要转载请通知 个人主页:残念ing-CSDN博客,欢迎各位…

Java 数据结构篇-实现二叉搜索树的核心方法

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 二叉搜索树的概述 2.0 二叉搜索树的成员变量及其构造方法 3.0 实现二叉树的核心接口 3.1 实现二叉搜索树 - 获取值 get(int key) 3.2 实现二叉搜索树 - 获取最小…

程序流程图的意义(合集)

程序流程图的意义 1、矩形 作用:一般用作要执行的处理(process),在程序流程图中做执行框。 在axure中如果是画页面框架图,那么也可以指代一个页面。有时候我们会把页面和执行命令放在同一个流程中做说明,这个时候将两类不同的矩形…

算法(2)——滑动窗口

前言: 步骤及算法模板: 确定两个指针变量,left0,right0; 进窗口: 判断: 出窗口 更新结果 接下来我们的所用滑动窗口解决问题都需要以上几个步骤。 一、长度最小的子数组 209. 长度最小的子数组 - 力扣(L…

Ebullient第一阶段开发小结

一. 简介 距离Ebullient硬件发布已有一段时间,小一个月吧,在这段时间内在努力的编写代码,现在终于完成了第一阶段的功能设计,算是一个小型的样机吧,基本的代码框架基本确定了,相信后续的会快一点(希望如此…

Nodejs 第二十六章(反向代理)

什么是反向代理? 反向代理(Reverse Proxy)是一种网络通信模式,它充当服务器和客户端之间的中介,将客户端的请求转发到一个或多个后端服务器,并将后端服务器的响应返回给客户端。 负载均衡:反向代理可以根…

二、W5100S/W5500+RP2040之MicroPython开发<DHCP示例>

文章目录 1 前言2 相关网络信息2 .1 简介2.2 DHCP工作原理2.3 DHCP的优点2.4 应用场景 3 WIZnet以太网芯片4 DHCP网络设置示例概述以及使用4.1 流程图4.2 准备工作核心4.3 连接方式4.4 主要代码概述4.5 结果演示 5 注意事项6 相关链接 1 前言 在这个智能硬件和物联网时代&#…

在Python中使用Kafka帮助我们处理数据

Kafka是一个分布式的流数据平台,它可以快速地处理大量的实时数据。Python是一种广泛使用的编程语言,它具有易学易用、高效、灵活等特点。在Python中使用Kafka可以帮助我们更好地处理大量的数据。本文将介绍如何在Python中使用Kafka简单案例。 一、安装K…

C到C++笔记记录

C到C笔记记录 输入(cin) and 输出(cout)bool内联(inline)重载缺省函数哑元引用(&)C动态内存分配笔记扩充&#xff1a; 输入(cin) and 输出(cout) #include<iostream>using namespace std;void main() {int i;//输入 cincin >> i;//输出 coutcout << i &…

浅谈云性能测试的关键要点

随着云计算的广泛应用&#xff0c;云性能测试成为确保云服务质量和性能的关键环节。云性能测试不仅涵盖了传统性能测试的方面&#xff0c;还需要考虑云环境的特殊性。以下是云性能测试的几个关键要点&#xff1a; 1. 模拟真实云环境 云环境具有虚拟化、弹性扩展等特点&#xff…

IDEA tomcat内存不足

-Xms256m -Xmx256m -XX:MaxNewSize256m -XX:MaxPermSize256m

API资源对象StorageClass;Ceph存储;搭建Ceph集群;k8s使用ceph

API资源对象StorageClass;Ceph存储;搭建Ceph集群;k8s使用ceph API资源对象StorageClass SC的主要作用在于&#xff0c;自动创建PV&#xff0c;从而实现PVC按需自动绑定PV。 下面我们通过创建一个基于NFS的SC来演示SC的作用。 要想使用NFS的SC&#xff0c;还需要安装一个NFS…

Kubernetes 的用法和解析 -- 5

一.企业级镜像仓库Harbo 准备&#xff1a;另起一台新服务器&#xff0c;并配置docker yum源&#xff0c;安装docker 和 docker-compose 1.1 上传harbor安装包并安装 [rootharbor ~]# tar xf harbor-offline-installer-v2.5.3.tgz [rootharbor ~]# cp harbor.yml.tmpl harbor…

不会代码循环断言如何实现?只要6步!

对于使用jmeter工具完成接口测试的测试工程师而言。在工作中&#xff0c;或者在面试中&#xff0c;都会遇到一个问题—— “CSV文档做了一大笔测试数据后&#xff0c;怎么去校验这个结果呢&#xff1f;” 现在大部分测试工程师可能都是通过人工的方法去查看结果&#xff0c;十…

作业--day33

基于UDP的TFTP文件上传 #include <myhead.h>#define PORT 69 #define IP "192.168.125.59"int down(const char *); int up(const char *);int main(int argc, const char *argv[]) {while(1){system("clear");//打印菜单puts("**************…

STM32F407-14.3.12-01使用断路功能

使用断路功能 使用断路功能时&#xff0c;根据其它控制位&#xff08;TIMx_BDTR 寄存器中的 MOE⑨、OSSI⑪ 和 OSSR⑩ 位以及 TIMx_CR2 寄存器中的 OISx⑰ 和 OISxN⑱ 位&#xff09;修改输出使能信号和无效电平。任何情况下&#xff0c;OCx③ 和 OCxN④ 输出都不能同时置为有效…

LD2450-24G人体移动跟踪轨迹雷达模块

文章目录 前言一、LD2450简介特点引脚定义 二、使用步骤上位机使用方法通信协议协议格式数据输出协议 雷达命令配置方式串口解析示例 前言 运动目标跟踪是指在区域内实时跟踪运动目标所在的位置&#xff0c;实现对区域内运动目标测距、测角和测速。LD2450是海凌科24G毫米波雷达…

基于paddlepaddle的FPS最远点采样

什么是FPS最远点采样&#xff1f; 最远点采样&#xff08;Farthest Point Sampling&#xff0c;FPS&#xff09;是一种常用的采样算法&#xff0c;主要用于点云数据&#xff08;如激光雷达点云数据、分子坐标等&#xff09;的采样。 为了方便解释&#xff0c;定义一下待采样点…

深入解析线程安全的Hashtable实现

目录 引言 1. Hashtable简介 2. Hashtable线程安全实现原理 2.1. 锁机制 2.2. 分段锁 2.3. CAS操作 3. 线程安全策略 3.1. 同步方法 3.2. 分段锁优化 3.3. 乐观锁和CAS 4. 性能优化 4.1. 负载均衡 4.2. 惰性加载 5. 注意事项 5.1. 死锁和性能问题 5.2. 内存开销…

嵌入式软件测试(黑盒测试)---三年嵌入式软件测试的理解

文章内容为本人这三年来在嵌入式软件测试&#xff08;黑盒&#xff09;上的一些积累吧&#xff0c;说起来也挺快的&#xff0c;毕业三年的时间就这样过去了&#xff0c;在两家公司工作过&#xff08;现在这家是第二家&#xff09;&#xff0c;这几年的测试项目基本都是围绕着嵌…