今天我看到这篇文章Find out whether Chrome console is open。
@zswang给出了检测Chrome DevTools(控制台)是否打开的方法。这真的让我很惊讶,然后我开始思考是否有任何方法可以绕过这种检测技术?
有两种方法来检测Chrome DevTools是开放的(详细信息在上面的帖子)
1.使用Object.defineProperty
我可以绕过这个,它可以被分配给另一个函数。我已经尝试过Object.defineProperty=null
,然后检测函数死了(我知道写一个mock函数更好,这里只是一个例子)
1.使用obj.__defineGetter__
(Object.prototype.__defineGetter__
)Object.prototype.__defineGetter__= null
不会断检测,怎么走?
最后,我不得不说我不喜欢被监视。希望有一个适当的方式走动。
5条答案
按热度按时间vhipe2zx1#
检测DevTools使用的方法太多了,很难全部阻止它们。随着DevTools获得新功能,有新的方法来检测其使用。任何阻止检测的第三方工具都不能被信任来阻止100%的检测技术。
有一个bug reported to the Chromium team here的想法是将检测阻止直接集成到Chrome中。
关闭JavaScript
唯一的方法来明确阻止任何使用DevTools的检测是disable javascript.你仍然可以在DevTools控制台中执行JavaScript时,javascript的页面被禁用.我发现它足以禁用javascript后立即打开DevTools,像这样:
1.打开DevTools
Command+Option+J
(Mac)或Control+Shift+J
(Windows,Linux)1.键入热键以打开命令菜单-
Cmd+Shift+P
(Mac)或Ctrl+Shift+P
(Windows、Linux)1.键入
dis
并点击return
以选择禁用JavaScript选项。1..查看网站.
1.通过调用命令菜单并键入
ena
并点击return
(选择Enable Javascript选项)重新启用JavaScript当然,这种方法对于监控恶意代码是没用的,因为当JavaScript被禁用时没有代码运行。但至少它可以给予你一个机会,在重新启用javascript之前设置breakpoints。
Chrome DevTools协议
可以使用Chrome DevTools Protocol连接到Chrome的单独示例并检查网站,而无需在该示例中打开DevTools:
开发人员工具前端可以连接到远程运行的Chrome示例进行调试。要使此场景正常工作,您应该使用remote-debugging-port命令行开关启动主机Chrome示例:
字符串
然后,您可以使用不同的用户配置文件启动单独的客户端Chrome示例:
型
现在,您可以从客户端导航到给定的端口,并附加到任何已发现的选项卡进行调试:http://localhost:9222
cbeh67ev2#
检测开发工具是否打开的最流行的方法是调用console.log(),这只在开发工具打开时发生。
下面是一个例子:
字符串
在上面的例子中,创建了一个新的image对象,并为“id”重写了getter。当console.log被调用时,getter也被调用。所以基本上,任何时候getter被调用,网站都知道devtools已经打开,因为只有devtools打开时,console.log()才会被调用。这是一种非常聪明的检测方法。尽管如此,当试图调试这样的代码时,简单地使用像Resource Override这样的扩展并注入
型
进入页面的头部应该阻止网站检测devtools是否打开。
jjjwad0x3#
对我来说,我只是在违规脚本的顶部添加了一个断点,然后在开发人员控制台中运行
Image = null
。我通过谷歌搜索网站如何做到这一点找到了这个解决方案,这给我带来了this stackoverflow post,我可以在我的控制台中看到一个新的图像正在记录,所以将图像设置为null会导致错误,这会导致检测失败。
qzlgjiam4#
你可以尝试这样的东西:
这似乎阻止了警报显示给我。我正在使用Underscore的
_extend
函数。我不知道我是否错过了什么,只是在玩。至于
__defineGetter__
,这是不推荐的,所以你希望它不会被使用。gorkyyrv5#
尝试将视口更改为移动的,然后刷新页面。
有50%的机会会成功。