有一天,我收到了一封来自参加我的开发人员工具课程的人的电子邮件,他说他发现了一个无法调试的网站。所以我看了看,发现了一个令人讨厌的脚本,并向您展示了如何解决该脚本。您可以在 YouTube 上观看视频或继续阅读…
我很好奇,问我是否可以看到它。事实证明,它就是其中之一,假设一个网站有大量视频和大量流媒体内容,但不一定全部都可以安全工作,也不一定全部都是合法的。我进入隐私浏览模式,打开VPN ,然后查看 Firefox 的情况。
我查看了源代码,发现了一个实际上非常好的脚本,可以阻止您使用开发人员工具。那么让我们来看看它的作用以及我们实际上如何解决这个问题。我对脚本进行了简化并记录下来,它所做的是一些非常令人讨厌的事情。
var 尝试计数 = 0;
var 最小用户响应毫秒 = 200;
函数检查(){
控制台.clear();
之前 = new Date().getTime();
调试器;
之后 = new Date().getTime();
if (之后 – 之前 >minimumUserResponseInMiliseconds) {
document.write(“不要打开开发者工具。”);
self.location.replace(
window.location.protocol + window.location.href.substring(
窗口位置协议长度
)
);
} 别的 {
之前=空;
之后=空;
删除之前;
之后删除;
}
setTimeout(检查, 100);
}
查看();
window.onload = 函数() {
document.addEventListener(“contextmenu”, function (e) {
e.preventDefault();
}, 错误的);
document.addEventListener(“keydown”, function (e) {
// Ctrl+Shift+I
if (e.ctrlKey && e.shiftKey && e.keyCode 73) {
禁用事件(e);
}
// Ctrl+Shift+J
if (e.ctrlKey && e.shiftKey && e.keyCode 74) {
禁用事件(e);
}
// Ctrl+S
if (e.keyCode 83 && (navigator.platform.match(“Mac”) ? e.metaKey : e.ctrlKey)) {
禁用事件(e);
}
// Ctrl + U
if (e.ctrlKey && e.keyCode 85) {
禁用事件(e);
}
// F12
if (event.keyCode == 123) {
禁用事件(e);
}
}, 错误的);
函数禁用事件(e){
如果(e.stopPropagation){
e.stopPropagation();
} else if (window.event) {
window.event.cancelBubble = true;
}
e.preventDefault();
返回假;
}
};
第一个也是常见的事情是通过在文档上添加处理程序来阻止上下文菜单中的所有键盘快捷键来打开开发人员工具。 Control + Shift + I 被阻止,Control+Shift+J、Ctrl+U 和F12也被阻止。他们还屏蔽了 Control+S,以防止保存网站以查看源代码。所有这些处理程序都会调用disabledElement 函数,该函数会停止传播、取消气泡、防止默认并返回 false 以进行良好的测量。
因此,这意味着当您在浏览器中打开该网站时,打开开发人员工具的所有正常方式都不应该可用。
他们所做的另一件聪明的事情实际上是将其嵌入到主HTML文档中,而不是像我们这里那样使用杀手脚本。因此,您不能阻止脚本资源,因为这意味着您根本看不到该页面。
如果你尝试这个脚本,它似乎会阻止你。我使用的是 Mac,由于某种原因 Option+Command+I 仍然有效,这允许我打开开发人员工具。然后我遇到了他们在这里做的下一件顽皮的事情,那就是他们在那里有一个调试器语句。我在几个网站上看到过这种情况——它们会让你陷入带有调试器语句的无限循环中。如果您尝试跳过该点,它会继续前往同一点并在那里阻止您。
该脚本还会读取您打开和关闭调试器所需的时间。然后,如果发生这种情况,它会执行文档写入并重新加载页面。我不知道为什么会在那里。我从来没有成功触发过它。但。好的,祝你好运。可能人们还尝试做其他事情。如果你知道,请告诉我。
然后,他们设置 100 毫秒的超时并继续调用该检查函数,该函数会清除控制台并调用该调试器。现在我们该如何解决这个问题呢?最简单的方法是关闭所有断点。当您重新加载页面时,您将不再遇到调试器问题。
您仍然可以看到他们正在做另一件顽皮的事情,即不断清除控制台以阻止您输入任何内容。解决这个问题的一种方法是打开保留日志。这样您就会收到控制台已清除的报告,但您仍然可以使用它。
脚本创建者犯的最大错误是没有使用闭包(可能是因为他们需要超时)。因此,由于 check() 函数是一个全局函数,我也可以简单地用 function check(){return true;} 覆盖它,它就不会再烦我了。
看到人们竭尽全力阻止您查看他们的代码是很有趣的。关闭某些网站的调试器工具是有正当理由的。例如,当我在 Microsoft Edge 上工作时,我们考虑提出一个标准HTTP标头,该标头将禁止银行网站等的开发人员工具。不良行为者确实会使用带有远程访问软件的开发人员工具来伪造银行转账等行为,因此采用标准方法是有意义的。这个黑客脚本令人印象深刻,但最终只是一个麻烦。
原文: https://christianheilmann.com/2023/11/14/cracking-a-developer-tools-killer-script/