本帖最后由 dolly_yos2 于 2022-7-7 09:50 编辑
补充:
一边写一边想到一个更有意思的方法:更改浏览器的 UA ,把能被识别的部分去掉,例如修改为 none 。由于一些检测指标只对特定的浏览器生效,因此反开发者工具工具中大量的使用了基于 UA 的浏览器类型检测,这种修改会使一些检测指标直接被跳过,经测试 Firefox 在不进行任何其他改动的前提下修改UA即可不被检测到启动了开发者工具。不过注意这可能导致你对站点的访问记录变得醒目。
在有检测的页面上使用楼上所说的独立(分离)式开发者工具页面能够避免被计算尺寸检测到。
可能禁用了 disable-devtool.min.js 后仍无法直接使用 F12 启动开发者工具,经测试楼上的方法大多可行,如在 Ctrl+F 搜索框中按 F12 。
简单的研究了一下感觉还是非常有意思的:虽然说是为了达成不可能达成的目的(阻止网页客户端(浏览器)查看网页代码)而做的,某种程度上是无用功,开发者们还是研究出了花样繁多而且精彩绝伦,甚至令人拍案叫绝的方法。当然,终究是不可能实现的目标,也许这也就是很多服务都处心积虑让用户下载安装使用他们的程序而不是提供完整的网页介面的原因之一——虽然说这也只是进一步提高了分析的难度而已,但是我已经远远的跑题了。
回到具体的这个网页的而问题上。似乎这个网页使用的是一个第三方的禁用调试工具代码,换言之绕过之即可解决使用相同技术的所有站点。楼上提出的禁用 JavaScript 固然可以阻断禁止开发者工具的工作,但是很可能影响站点的正常行为,因此无法完全解决问题。解决此类问题的终极方案之一就是应用一个 HTTP(S) 中间人代理,比如 Fiddler 、mitmproxy 等等,使用这些工具可以对网页内容(对站点)透明的抓取 HTTP 流量,从而获取信息。当然,这些工具在进行调试的能力上自然远不及浏览器的开发者工具,但是这些工具可以作为一个侦查手段:首先我们定位拦截开发者工具的手段,随后我们尝试解决之。
经过侦查我们定位到一个名为 disable-devtool.min.js 的文件,显然是禁用开发者工具的核心组件之一。此时我们已经有一个简单直接的方式解决此问题:使用任何途径拦截此文件的传输,或者使用一个空文件之类的方式进行替换,则其中的代码将不再生效,自然无法禁止使用开发者工具。可能的方法包括设置中间人代理进行拦截或响应伪造,使用开发者工具的拦截路径功能或文件替换功能等等。此站点在拦截此文件后应该仍能正常工作且开启开发者工具不再导致页面关闭。
当然,我们也有更加复杂的方式进行应对,例如分析检测开启开发者工具的手段并加以掩盖,或者拦截注册检测器的代码等等。这有着更多的技巧性且繁杂,不再过多赘述,只是简单的分析一下本站点使用的禁用开发者工具实现的其中两个检测方式,确实非常精彩,很有创意:
1. 尝试向控制台打印一个自定义了 toString 方法的对象,开启开发者工具时控制台处理输出会调用此方法来生成输出内容从而触发后续动作
2. 尝试向控制台打印 id 属性设置为 getter 方法的 DOM 元素实例,开启开发者工具时控制台处理输出会调用此 getter 来获取 id 从而触发后续动作
同时检测指标中充斥着对浏览器类型的判断,不同浏览器的行为在细节处可能有较多出入,可能还需要更细致的分析。如有疏漏或错误敬请指正。