js逆向笔记 绕过某网站开发者工具检测
在这篇博客中,我将分享我在逆向分析爱企查时的一些发现与绕过技巧。最开始,我是偶然发现了这个网站,它在正常使用浏览器按下 F12 打开开发者工具时,似乎有某种方式禁用了开发者工具。不过,我没有放弃,继续从浏览器的右上角点击手动打开开发者工具。接着,我发现当开发者工具打开时,网站会跳转到一个空白页,并提示:“请关闭浏览器的调试窗口再访问页面!”这引起了我的兴趣,并激发了我开始进行逆向分析的动机。感兴趣的朋友可以去网站探索一番。网站链接如下
aHR0cHM6Ly9haXFpY2hhLmJhaWR1LmNvbS9zP3E9eGlhb21pJnQ9MA==
一、问题的初步发现
打开网站后,我按下了 F12 来打开开发者工具,但发现似乎并没有什么反应。经过一些实验,我发现网站好像禁用了 F12。为了进一步分析,我决定尝试通过浏览器的右上角菜单手动打开开发者工具。令我惊讶的是,当我成功打开开发者工具后,网站立刻跳转到一个空白页面,且显示了一条提示:“ 请关闭浏览器的调试窗口再访问页面!”
这是一个非常有意思的行为,显然网站采用了某种技术手段来防止开发者工具的使用。这让我想深入了解网站是如何检测开发者工具打开的,并尝试找出绕过方法。
二、逆向分析
为了进一步分析,我决定通过 浏览器开发者工具 进行调试。首先,我开始使用 脚本断点 断住了执行的 JS 脚本。通过这一方式,我很快定位到了相关的检测代码,并逐步分析了这段代码的作用。
Qvtd: function(t, e, i) {
"use strict";
var a = i("Aso0")
, s = i.n(a);
e.a = {
mounted: function() {
var t = {
md5: "65878341e691a6ec",
disableMenu: !1,
tkName: "dtk",
rewriteHTML: "<h3>请关闭浏览器的调试窗口再访问页面!</h3>",
clearIntervalWhenDevOpenTrigger: !0,
ondevtoolopen: function(t, e) {
e(),
setTimeout((function() {
window.location.href = "about:blank"
}
), 3e3)
},
ignore: function(t) {
return "open" === localStorage.getItem("devtool") || location.search.includes("qf=monster") || navigator.userAgent.includes("QQBrowser") || [/localhost/, /172\./, /127\.0\.0.1/].some((function(t) {
return location.hostname.match(t)
}
))
}
};
s()(t)
}
}
}
通过阅读这段代码,我们可以发现,ondevtoolopen
函数是关键部分。它被设计成当开发者工具打开时触发,接着会在 3 秒后将页面跳转到 about:blank
(即空白页)。从中我们可以看出,开发者工具打开后,网站通过这种方式强制关闭用户的操作。关键在于检测到了浏览器的开发者工具,触发了页面跳转。
三、绕过方法
经过对这段代码的深入分析,我发现,网站主要是通过以下几种方法进行开发者工具检测:
- 监听
devtool
状态:- 通过
localStorage.getItem("devtool")
来判断是否开启了开发者工具。
- 通过
- 检查
location.search
或userAgent
:- 检查 URL 参数是否为
qf=monster
,或者浏览器的userAgent
是否包含QQBrowser
。
- 检查 URL 参数是否为
- 匹配本地地址:
- 检查
location.hostname
是否是localhost
、127.x.x.x
或172.x.x.x
,这些通常是开发环境中的地址。
- 检查
为了绕过这些检测,我尝试了以下操作:
-
设置
localStorage
:-
在控制台执行以下代码:
localStorage.setItem(‘devtool’, ‘open’);
这会将 `devtool` 状态设置为 `open`,使得 `ignore` 函数判断为“开发者工具已开启”,从而绕过检测。
-
-
修改 URL 参数:
-
我还可以通过在地址栏中加入 URL 参数
qf=monster
来绕过这一检测:
window.location.search = ‘?qf=monster’;
-
-
修改
navigator.userAgent
:-
我也通过修改
userAgent
,让其包含
QQBrowser
,绕过了检测:
Object.defineProperty(navigator, ‘userAgent’, {
value: navigator.userAgent + ’ QQBrowser’
}); -
-
绕过本地地址限制:
-
如果你在本地开发环境中测试,还可以通过修改
location.hostname
为
localhost
来绕过检测:
Object.defineProperty(location, ‘hostname’, {
value: ‘localhost’
}); -
四、总结
通过这次逆向分析,我了解到了网站是如何通过 JavaScript 检测开发者工具的打开状态,并采用了页面跳转的方式阻止用户进一步操作。幸运的是,通过修改 localStorage
、URL 参数和 userAgent
,我成功绕过了这道检测,能够继续访问页面。
这次经历不仅让我深入了解了浏览器开发者工具的检测方法,还让我掌握了一些常见的绕过技巧。作为一个学习者,技术分享不仅是展示自己所学的一个途径,也让我在实践中更加深刻地理解了这些技术的应用。
希望这篇技术分享对大家有所启发,尤其是那些对逆向分析和绕过技术感兴趣的朋友们。如果你有任何问题或想进一步讨论,欢迎留言交流!
标签:逆向,浏览器,检测,js,开发者,userAgent,工具,绕过 From: https://blog.csdn.net/m0_75266682/article/details/145198744