js逆向笔记 绕过某网站开发者工具检测

js逆向笔记 绕过某网站开发者工具检测

在这篇博客中,我将分享我在逆向分析爱企查时的一些发现与绕过技巧。最开始,我是偶然发现了这个网站,它在正常使用浏览器按下 F12 打开开发者工具时,似乎有某种方式禁用了开发者工具。不过,我没有放弃,继续从浏览器的右上角点击手动打开开发者工具。接着,我发现当开发者工具打开时,网站会跳转到一个空白页,并提示:“请关闭浏览器的调试窗口再访问页面!”这引起了我的兴趣,并激发了我开始进行逆向分析的动机。感兴趣的朋友可以去网站探索一番。网站链接如下

aHR0cHM6Ly9haXFpY2hhLmJhaWR1LmNvbS9zP3E9eGlhb21pJnQ9MA==

一、问题的初步发现

打开网站后,我按下了 F12 来打开开发者工具,但发现似乎并没有什么反应。经过一些实验,我发现网站好像禁用了 F12。为了进一步分析,我决定尝试通过浏览器的右上角菜单手动打开开发者工具。令我惊讶的是,当我成功打开开发者工具后,网站立刻跳转到一个空白页面,且显示了一条提示:“ 请关闭浏览器的调试窗口再访问页面!”

这是一个非常有意思的行为,显然网站采用了某种技术手段来防止开发者工具的使用。这让我想深入了解网站是如何检测开发者工具打开的,并尝试找出绕过方法。

二、逆向分析

为了进一步分析,我决定通过 浏览器开发者工具 进行调试。首先,我开始使用 脚本断点 断住了执行的 JS 脚本。通过这一方式,我很快定位到了相关的检测代码,并逐步分析了这段代码的作用。

Qvtd: function(t, e, i) {
    "use strict";
    var a = i("Aso0")
        , s = i.n(a);
    e.a = {
        mounted: function() {
            var t = {
                md5: "65878341e691a6ec",
                disableMenu: !1,
                tkName: "dtk",
                rewriteHTML: "<h3>请关闭浏览器的调试窗口再访问页面!</h3>",
                clearIntervalWhenDevOpenTrigger: !0,
                ondevtoolopen: function(t, e) {
                    e(),
                    setTimeout((function() {
                        window.location.href = "about:blank"
                    }
                    ), 3e3)
                },
                ignore: function(t) {
                    return "open" === localStorage.getItem("devtool") || location.search.includes("qf=monster") || navigator.userAgent.includes("QQBrowser") || [/localhost/, /172\./, /127\.0\.0.1/].some((function(t) {
                        return location.hostname.match(t)
                    }
                    ))
                }
            };
            s()(t)
        }
    }
}

通过阅读这段代码,我们可以发现,ondevtoolopen 函数是关键部分。它被设计成当开发者工具打开时触发,接着会在 3 秒后将页面跳转到 about:blank(即空白页)。从中我们可以看出,开发者工具打开后,网站通过这种方式强制关闭用户的操作。关键在于检测到了浏览器的开发者工具,触发了页面跳转。

三、绕过方法

经过对这段代码的深入分析,我发现,网站主要是通过以下几种方法进行开发者工具检测:

  1. 监听 devtool 状态
    • 通过 localStorage.getItem("devtool") 来判断是否开启了开发者工具。
  2. 检查 location.searchuserAgent
    • 检查 URL 参数是否为 qf=monster,或者浏览器的 userAgent 是否包含 QQBrowser
  3. 匹配本地地址
    • 检查 location.hostname 是否是 localhost127.x.x.x172.x.x.x,这些通常是开发环境中的地址。

为了绕过这些检测,我尝试了以下操作:

  1. 设置 localStorage

    • 在控制台执行以下代码:

      localStorage.setItem('devtool', 'open');
      

    这会将 devtool 状态设置为 open,使得 ignore 函数判断为“开发者工具已开启”,从而绕过检测。

  2. 修改 URL 参数

    • 我还可以通过在地址栏中加入 URL 参数

      qf=monster
      

      来绕过这一检测:

      window.location.search = '?qf=monster';
      
  3. 修改 navigator.userAgent

    • 我也通过修改

      userAgent
      

      ,让其包含

      QQBrowser
      

      ,绕过了检测:

      Object.defineProperty(navigator, 'userAgent', {
          value: navigator.userAgent + ' QQBrowser'
      });
      
  4. 替换js绕过

    • 可以直接把mounted 方法置空

      mounted = function() {
             }
      

      来绕过检测

四、总结

通过这次逆向分析,我了解到了网站是如何通过 JavaScript 检测开发者工具的打开状态,并采用了页面跳转的方式阻止用户进一步操作。幸运的是,通过修改 localStorage、URL 参数和 userAgent,我成功绕过了这道检测,能够继续访问页面。

这次经历不仅让我深入了解了浏览器开发者工具的检测方法,还让我掌握了一些常见的绕过技巧。作为一个学习者,技术分享不仅是展示自己所学的一个途径,也让我在实践中更加深刻地理解了这些技术的应用。

希望这篇技术分享对大家有所启发,尤其是那些对逆向分析和绕过技术感兴趣的朋友们。如果你有任何问题或想进一步讨论,欢迎留言交流!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值