今天我看到了这个帖子查找Chrome控制台是否打开。
@zswang提供了检测Chrome DevTools(控制台)是否打开的方法。这真让我吃惊,然后我开始想,有没有办法绕过这种探测技术?
有两种方法可以检测铬DevTools是开放的(详见上面的文章)
Object.defineProperty
我可以四处走动,它可以分配给另一个函数,我尝试过Object.defineProperty=null
,然后检测函数死了(我知道写一个模拟函数更好,这里只是一个例子)obj.__defineGetter__
(Object.prototype.__defineGetter__
)
Object.prototype.__defineGetter__= null
不会打破检测,该怎么走呢?最后,我不得不说我不喜欢做monitored.Hope
发布于 2018-12-08 20:55:28
检测DevTools的使用有很多种方法,因此很难阻止它们的使用。随着DevTools获得新的特性,有新的方法来检测它的使用。任何阻止检测的第三方工具都不能被信任来阻止100%的检测技术。
有一个向这里的铬小组报告了错误的想法集成检测阻塞直接进入Chrome。
禁用javascript
唯一确定地阻止对DevTools使用的任何检测的方法是禁用javascript。当禁用页面的javascript时,仍然可以在DevTools控制台中执行javascript。我发现打开DevTools后立即禁用javascript就足够了,如下所示:
Command+Option+J
(Mac)或Control+Shift+J
(Windows )Cmd+Shift+P
(Mac)或Ctrl+Shift+P
(Windows,Linux)的热键。dis
并按return
选择禁用Javascript选项。ena
并点击return
重新启用javascript (选择启用Javascript选项)当然,此方法对于监视恶意代码毫无用处,因为在禁用javascript时没有运行任何代码。但至少在重新启用javascript之前,它可能给您一个设置断点的机会。
铬DevTools协议
可以使用铬DevTools协议连接到单独的Chrome实例并检查网站,而无需在该实例中打开DevTools:
开发工具前端可以附加到远程运行的Chrome实例进行调试。要使此方案工作,您应该使用远程调试端口命令行开关启动主机Chrome实例: chrome.exe --远程调试-端口=9222 然后,您可以使用不同的用户配置文件启动单独的客户端Chrome实例: chrome.exe --用户-数据-dir= 现在您可以从客户端导航到给定的端口,并附加到任何已发现的调试选项卡上:http://localhost:9222
发布于 2021-04-11 12:11:09
最常用的检测开发工具是否打开的方法是调用console.log(),这只在打开devtools时才会发生。
以下是一个例子:
var image = new Image();
Object.defineProperty(image, 'id', {
get: function() {
$('#<element_to_remove_on_detection>').remove();
console.clear();
}
});
console.log('%c', image);
在上述情况下,将创建一个新的图像对象,并将getter重写为“id”。当调用console.log时,也会调用getter。因此,基本上,无论何时调用getter,网站都知道devtools已经打开,因为直到devtools打开之后,console.log()才会被调用。这是一种非常聪明的检测方法。尽管如此,在尝试调试此类代码时,只需使用扩展(如资源覆盖 )和注入
console.log = null;
进入页面的头部应该阻止网站检测devtools是否打开。
发布于 2020-11-08 02:06:17
对我来说,我只是在违规脚本的顶部添加了一个断点,然后在开发人员控制台中运行Image = null
。
我通过谷歌搜索网站如何做到这一点找到了这个解决方案,这给我带来了这个堆叠溢出柱,我可以在我的控制台中看到一个新的图像正在被记录,所以将Image设置为null会导致错误,这会导致检测失败。
https://stackoverflow.com/questions/38910904
复制相似问题