避免检测“Chrome DevTools(控制台)是否打开”

nbewdwxp  于 2023-11-14  发布在  Go
关注(0)|答案(5)|浏览(329)

今天我看到这篇文章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不会断检测,怎么走?
最后,我不得不说我不喜欢被监视。希望有一个适当的方式走动。

vhipe2zx

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.exe --remote-debugging-port=9222

字符串
然后,您可以使用不同的用户配置文件启动单独的客户端Chrome示例:

chrome.exe --user-data-dir=<some directory>


现在,您可以从客户端导航到给定的端口,并附加到任何已发现的选项卡进行调试:http://localhost:9222

cbeh67ev

cbeh67ev2#

检测开发工具是否打开的最流行的方法是调用console.log(),这只在开发工具打开时发生。
下面是一个例子:

var image = new Image();
Object.defineProperty(image, 'id', {
    get: function() {
        $('#<element_to_remove_on_detection>').remove();
        console.clear();
    }
});
console.log('%c', image);

字符串
在上面的例子中,创建了一个新的image对象,并为“id”重写了getter。当console.log被调用时,getter也被调用。所以基本上,任何时候getter被调用,网站都知道devtools已经打开,因为只有devtools打开时,console.log()才会被调用。这是一种非常聪明的检测方法。尽管如此,当试图调试这样的代码时,简单地使用像Resource Override这样的扩展并注入

console.log = null;


进入页面的头部应该阻止网站检测devtools是否打开。

jjjwad0x

jjjwad0x3#

对我来说,我只是在违规脚本的顶部添加了一个断点,然后在开发人员控制台中运行Image = null
我通过谷歌搜索网站如何做到这一点找到了这个解决方案,这给我带来了this stackoverflow post,我可以在我的控制台中看到一个新的图像正在记录,所以将图像设置为null会导致错误,这会导致检测失败。

qzlgjiam

qzlgjiam4#

你可以尝试这样的东西:

var oldDefineProperty = Object.defineProperty;

Object.defineProperty = function() {
    var firstArg = arguments[0];
    arguments[0] = _.extend({
        get id() {
            return firstArg.id;
        }
    }, arguments[0]);

    return oldDefineProperty.apply(this, arguments);
}

var element = new Image();
element.id = "something";
Object.defineProperty(element, 'id', {
    get: function() {
        alert("detected");
    }
});
console.log('%cHello', element);
<script src="http://underscorejs.org/underscore-min.js"></script>

这似乎阻止了警报显示给我。我正在使用Underscore_extend函数。我不知道我是否错过了什么,只是在玩。
至于__defineGetter__,这是不推荐的,所以你希望它不会被使用。

gorkyyrv

gorkyyrv5#

尝试将视口更改为移动的,然后刷新页面。
有50%的机会会成功。

相关问题