一、现象
- 无法使用ctrl+s保存网页,但是可以在设置菜单中可以保存;
- 无法使用F12和ctrl+shift+i打开开发者窗口,但是可以在设置菜单中打开;
- 打开开发者窗口后网站快速关闭,说明被检测到了;
二、涉及js
打开设置菜单,网页另存为本地文件
使用vscode等可以打开html源码的软件,一条条script标签注释,保存在本地浏览器打开,最终发现注释以下两个script标签可打开开发者窗口,F12和ctrl+s等快捷键也可以正常使用:
<script type="text/javascript" disable-devtool-auto="" src="./disable-devtool.js">
<script type="text/javascript" src="./comBusiness.js"></script>
由此得知:
comBusiness.js:负责检测快捷键,检测弹出提示;
disable-devtool.js:负责检测开发者窗口,检测到直接关闭整个页面;
三、破解思路
油猴脚本
- 移除相关script标签
- 重写
document.createElement
- 使用MutationObserver 监听 DOM 变化
- 重写
XMLHttpRequest
的open
方法 - 重写
fetch的fetch
函数
都不行,所有js的行为应该都被网站设计人员预判到了,既然在页面内解决不了,那就用页面外的方法,只要是网页就得经过浏览器,我们才是浏览器的主人,直接切断了文件来源,文件都没有也就执行不了。
浏览器插件或扩展
使用扩展直接拦截comBusiness.js和disable-devtool.js的请求
获取要拦截的网络请求
手动调试
这个方法考验手速,打开新标签页,在新标签页上先打开开发者窗口,切换到源代码()选项页面;
跳转链接,出现页面后几秒点击暂停按钮,什么时候暂停看网页什么时候关闭,自己掌握。
因为在前面我已经知道哪个请求的问题,点击该名称即可知道具体url。
油猴脚本
这个网页有个特点,alert弹窗会阻塞当前网页所有进程,只要不关闭alert弹窗,就不会被检测到,所以在alert弹窗打开的同时,直接打开开发者窗口,切换到网络(network)选项页面,查找comBusiness.js和disable-devtool.js的请求url。
那么我只需要在打开指定网页后直接弹出alert就行,代码也很容易实现:
// ==UserScript==
// @name New Userscript
// @namespace http://tampermonkey.net/
// @version 2025-02-25
// @description try to take over the world!
// @author You
// @match *://*
// @icon https://www.google.com/s2/favicons?sz=64&domain=aliyun.com
// @grant none
// ==/UserScript==
(function() {
'use strict';
// Your code here...
alert('暂停');
})();
弹出弹窗之后,方法同上,在开发者窗口中的网络(network)选项页面找到指定网络请求url。
抓包软件
思路与浏览器扩展一样,拦截指定请求,这个我涉猎不深,需要额外安装软件,一般默认会抓取电脑上的全部网络请求,要捕获指定的网络请求不同的软件有不同的方法,这里不过多赘述了。
拦截请求
任何可以自定义网络请求拦截的扩展都可以,这里我随便找了个,edge直接在扩展页面拖进去就行,Chrome还没试过,可能会因为版本问题装不上,所以我一向推荐使用Edge。
HTTP Request Blocker | Chrome扩展 - Crx搜搜t
通过上面的方法我已经知道了两个js文件的网络请求,该扩展支持通配符*匹配:
*://*/disable-devtool.js
*://*/comBusiness.js
点击该扩展的扩展选项
输入要拦截的网络请求,划到最下面有个save保存按钮。
在特定的网站生效
为了避免所有网站中相同的请求都被拦截,可以在扩展设置里面的站点访问权限设置为“在特定站点上”;
比如百度域名下的所有网页:
四、实现效果
能正常打开开发者窗口,快捷键F12、Ctrl+s也能使用。
拦截的网络请求变成红色:
五、扩展
GitCode - 全球开发者的开源社区,开源代码托管平台
Crx搜搜 - 一个牛X的扩展和应用商店