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.hqwc.cn/news/286875.html

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

相关文章

Linux基础入门笔记

Linux基础入门笔记,具体可见下载链接 大家阅读时可善用目录功能,可以提高大家的阅读效率 下载地址:Linux笔记 初始linux 操作系统:操作系统是用户和计算机硬件之间的桥梁,调度和管理计算机硬件进行工作常见操作系统 W…

【算法Hot100系列】删除链表的倒数第 N 个结点

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

什么牌子猫粮比较好?质量口碑较好的主食冻干猫粮分享

由于猫咪是肉食动物,对蛋白质的需求很高,如果摄入的蛋白质不足,就会影响猫咪的成长。而冻干猫粮本身因为制作工艺的原因,能保留原有的营养成分和营养元素,所以冻干猫粮蛋白含量比较高,营养又高,…

自定义 spring-boot组件自动注入starter

1&#xff1a;创建maven项目 2&#xff1a;pom文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocati…

javaSE学习-4-类和对象

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

SQL面试题挑战01:打折日期交叉问题

目录 问题&#xff1a;SQL解答&#xff1a;第一种方式&#xff1a;第二种方式&#xff1a; 问题&#xff1a; 如下为某平台的商品促销数据&#xff0c;字段含义分别为品牌名称、打折开始日期、打折结束日期&#xff0c;现在要计算每个品牌的打折销售天数&#xff08;注意其中的…

【IDEA】Intellij IDEA相关配置

IDEA 全称 IntelliJ IDEA&#xff0c;是java编程语言的集成开发环境。IntelliJ在业界被公认为最好的Java开发工具&#xff0c;尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超…

lua安装

lua安装 1.Lua介绍 特点&#xff1a;轻量、小巧。C语言开发。开源。 设计的目的&#xff1a;嵌入到应用程序当中&#xff0c;提供灵活的扩展和定制化的功能。 luanginx&#xff0c;luaredis。 2.windows安装lua windows上安装lua&#xff1a; 检查机器上是否有lua C:\U…

双向链表、双向循环链表

目录 多级双向链表 力扣 430. 扁平化多级双向链表 双向循环链表 力扣 426. 将二叉搜索树转化为排序的双向链表 多级双向链表 力扣 430. 扁平化多级双向链表 你会得到一个双链表&#xff0c;其中包含的节点有一个下一个指针、一个前一个指针和一个额外的 子指针 。这个子指…

有损编码——Wyner-Ziv理论

有损编码是一种在信息传输和存储中常见的编码技术&#xff0c;其主要目标是通过牺牲一定的信息质量&#xff0c;以换取更高的压缩效率。相比于无损编码&#xff0c;有损编码可以在保证一定程度的信息还原的前提下&#xff0c;使用更少的比特数来表示信息。Wyner-Ziv理论是一种重…

Eclipse_03_如何加快index速度

1. ini配置文件 -Xms&#xff1a;是最小堆内存大小&#xff0c;也是初始堆内存大小&#xff0c;因为堆内存大小可以根据使用情况进行扩容&#xff0c;所以初始值最小&#xff0c;随着扩容慢慢变大。 -Xmx&#xff1a;是最大堆内存大小&#xff0c;随着堆内存的使用率越来越高&a…

maven仓库导入jar和mvn命令汇总

目录 导入远程仓库 命令结构 命令解释 项目pom 输入执行 本地仓库导入 命令格式 命令解释 Maven命令汇总 mvn 参数 mvn常用命令 web项目相关命令 导入远程仓库 命令结构 mvn deploy:deploy-file -Dfilejar包完整名称 -DgroupIdpom文件中引用的groupId名 -Dartifa…