爱企查无法使用F12问题
起因
最近突然需要找一下自己爱企查的账号cookie,于是上来一个F12结果发现半天按不出来(刚开始在想是不是键盘的F12坏了,但是换了其他的页面就是正常的) 在B站看到了id为”无名的Coder”大佬的视频在此做个学习记录
Hyperlink: js逆向-爱企查:F12检测绕过,头部参数加密_哔哩哔哩_bilibili
开搞
先打开F12(不用管是否正常显示,当然正常显示你就不用继续看了)
之后 Sources
-> Event Listeners Breakprints
-> ‘Script’ 国语的话应该是 ‘’源代码’’ -> ‘’事件监听器断点’’ -> ‘’脚本’’
之后尝试调试
然后我们把它复制下来,放到VSCode(个人习惯,自己选择)看看具体是在哪个地方
以下介绍两个方法:
01. 导入替换代码
以下是限制功能的代码
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)
}
))
}
};
解读:
首先其中定义了一个对象 t
,它包含了一些属性和方法,用于检测并防止开发者工具被打开
ondevtoolopen方法
ondevtoolopen: function(t, e) {
e(),
setTimeout((function() {
window.location.href = "about:blank"
}), 3e3)
}
这是一个回调函数,当检测到出发开发者工具时触发:
- 调用
e()
(可能是一个清理或回调函数) - 3 秒后(
3e3
毫秒),将页面重定向到about:blank
(空白页)
ignore方法
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)
})
}
这是一个条件判断函数,用于在某些情况下忽略开发者工具的检测:
- 如果
localStorage
中devtool
的值为"open"
。 - 如果 URL 的查询参数中包含
qf=monster
。 - 如果用户代理(
navigator.userAgent
) - 如果当前主机名(
location.hostname
)匹配以下任意一个正则表达式:localhost
- 以
127.
开头的 IP 地址(内网 IP) 127.0.0.1
(本地回环地址)
对此有两种解决方法(以下代码是ai生成的,因为不是很懂Javascript)
一、自己写脚本并进行替换(未经测试)
// 覆盖检测函数
Object.defineProperty(window, 'devtool', {
get: () => false,
configurable: false
});
// 阻止检测脚本执行
window.addEventListener('devtoolschange', e => e.stopImmediatePropagation(), true);
// 设置本地存储标记(如果检测依赖localStorage)
localStorage.setItem('devtool', 'open');
// 重写检测对象
if (window._devt) {
window._devt.ignore = () => true;
window._devt.ondevtoolopen = () => {};
}
将原先的代码替换为以上脚本
二、使用油猴脚本
// ==UserScript==
// @name Disable DevTools Detection
// @namespace http://tampermonkey.net/
// @version 0.1
// @description 禁用开发者工具检测
// @author You
// @match *://目标网站.com/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
// 阻止原始检测脚本加载
const oldCreateElement = document.createElement;
document.createElement = function(tagName) {
const el = oldCreateElement.call(document, tagName);
if (tagName === 'script') {
const oldSrc = Object.getOwnPropertyDescriptor(el, 'src');
Object.defineProperty(el, 'src', {
get: () => oldSrc?.get.call(el),
set: (value) => {
if (!value.includes('devtool-detector')) {
oldSrc?.set.call(el, value);
}
}
});
}
return el;
};
// 覆盖检测函数
window.devtool = { isOpen: false };
Object.defineProperty(window, 'devtool', {
get: () => ({ isOpen: false })
});
// 设置本地存储标记
localStorage.setItem('devtool', 'open');
})();
三、一种一劳永逸的方法,但对所有网站失效,可能面临一定的安全风险
在console
中输入:
localStorage.setItem('devtool','open')
以上方法的原理为:
JavaScript的动态性:允许运行时修改对象属性和函数行为。
浏览器沙箱环境:网页脚本无法直接检测扩展或用户手动执行的代码。
检测逻辑的单向依赖:检测脚本通常依赖特定的全局变量或事件,破坏这些依赖即可绕过。
注意事项
这些方法可能随着检测技术升级而失效(如最新的基于 Performance API 的检测)。
部分网站会结合服务端验证(如接口返回加密数据,需前端解密),单纯绕过前端检测可能导致功能异常。
仅供学习浏览器安全原理使用,实际应用需遵守网站规则。