吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6350|回复: 98
上一主题 下一主题
收起左侧

[Web逆向] 油猴脚本-通过Hook来禁用disable-devtool插件

    [复制链接]
跳转到指定楼层
楼主
evlon 发表于 2025-7-10 18:53 回帖奖励
本帖最后由 evlon 于 2025-7-10 18:55 编辑

01. 背景

项目中,习惯看网站的浏览器源码,但是这次只要一打开开发者工具(devtool),浏览器就跳转到了“about:blank"。于是,有了这个文章。

02. 破解思路

  1. 打开百度
  2. 打开开发者工具(devtool),点击源代码标签,找到“事件监听器断电”,选中“加载”,勾选“beforunload","unload"。这个意思是在跳转到 ”about:blank"之前,中断
  3. 保持开发者工具打开,在地址栏输入目标网址,打开,等待中断。
  4. 通过堆栈,找到目标代码。
    loadjs.d("./app/study/course/detail/index", function(e, n, a) {
    var t, l, i, s, o = e("lodash/collection"), r = e("./app/util/aes"), c = e("./app/util/business/fsearch-view-util"), d = e("disable-devtool"), u = function() {
        d({
            clearIntervalWhenDevOpenTrigger: !1,
            ondevtoolopen: function() {
                window.open("about:blank", "_self")
            },
            detectors: [0, 1, 3, 4, 5, 6, 7]
        })
    },
  5. 发现是loadjs 来加载disable-devtool, 那就想办法,在 d({})的时候,修改设置就行。

03 最终成果,油猴脚本

https://github.com/evlon/hook-loadjs-disable-disable-devtool/blob/main/hook-loadjs-disable-disable-devtool

// ==UserScript==
// @name         hook-loadjs-disable-disable-devtool
// @namespace    http://tampermonkey.net/
// @version      2025-07-09
// @description  try to take over the world!
// @AuThor       You
// @match        *://*/*
// @Icon         https://www.google.com/s2/favicons?sz=64&domain=chinamobile.com
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
    console.clear = ()=>{
console.log('console.clear()');
    };

    Object.defineProperty(window, 'loadjs', {
        set(val_loadjs) {
            // 检查是不是你要拦截的对象
            //debugger;
            console.log('set loadjs = ',val_loadjs);

            Object.defineProperty(val_loadjs, 'd', {
                set(val_d) {
                    // 检查是不是你要拦截的对象
                    //debugger;
                    console.log('set loadjs.d = ',val_d);

                    let hook_val_d = new Proxy(val_d, {
                        apply(target, thisArg, argumentsList) {
                            // 显示参数

                            console.log('loadjs.d args:', argumentsList);
                            let oldargfn = argumentsList[1];
                            argumentsList[1] = (fnLoadModule,b,c)=>{

                                let hookfn_loadmodule = new Proxy(fnLoadModule,{
                                    apply(target2, thisArg2,[moduleName,...rest]){
                                        console.log('load module:',moduleName);

                                        const result2 = Reflect.apply(target2, thisArg2, [moduleName,...rest]);
                                        console.log('loaded module:',moduleName, result2);
                                        // 修改返回值
                                        if(moduleName == "disable-devtool"){
                                            //debugger;
                                            let disable_devtool = result2;
                                            const hook_result2 = (conf)=>{
                                                console.log('disable_devtool:(',conf,')');
                                                conf = {
                                                    clearIntervalWhenDevOpenTrigger: true,
                                                    ondevtoolopen: function() {
                                                        console.log("about:blank", "_self")
                                                    },
                                                    detectors: []
                                                }

                                                return disable_devtool(conf);
                                            };

                                            return hook_result2;
                                        }
                                        return result2;
                                    }

                                });

                                let ret = oldargfn(hookfn_loadmodule,b,c);
                                console.log('define module:',ret);
                                return ret;
                            };

                            // 调用原函数
                            const result = Reflect.apply(target, thisArg, argumentsList);

                            // 修改返回值
                            return result;
                        }
                    });

                    // 真正赋值
                    Object.defineProperty(val_loadjs, 'd', {
                        value: hook_val_d,
                        writable: true,
                        configurable: true,
                        enumerable: true
                    });
                },
                configurable: true
            });

            // 真正赋值
            Object.defineProperty(window, 'loadjs', {
                value: val_loadjs,
                writable: true,
                configurable: true,
                enumerable: true
            });
        },
        configurable: true
    });

})();



免费评分

参与人数 22吾爱币 +20 热心值 +20 收起 理由
pscly + 1 + 1 谢谢@Thanks!
yuyu2525 + 1 + 1 谢谢@Thanks!
luoxiake + 1 + 1 我很赞同!
crizquan + 1 + 1 我很赞同!
Gluttonous + 1 + 1 热心回复!
Clousa95 + 1 + 1 谢谢@Thanks!
nssan + 1 + 1 谢谢@Thanks!
Plug8602 + 1 + 1 谢谢@Thanks!
AuroraVerses + 1 我很赞同!
laozhang4201 + 1 + 1 热心回复!
抱薪风雪雾 + 1 + 1 谢谢@Thanks!
snowfox + 1 谢谢@Thanks!
pengyong50 + 1 我很赞同!
kelvinxan + 1 + 1 我很赞同!
2q3gfv + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
xuanshixh + 1 + 1 谢谢@Thanks!
DQQQQQ + 1 + 1 我很赞同!
Bob5230 + 1 + 1 我很赞同!
YBy792 + 1 + 1 谢谢@Thanks!
likebbs + 1 谢谢@Thanks!
purehai + 1 + 1 谢谢@Thanks!
cioceo + 1 + 1 热心回复!看不懂,膜拜ing

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
共舞 发表于 2025-7-10 21:31
通常我更喜欢//加上启用本地替换,研究这多麻烦
推荐
tobaba 发表于 2025-7-11 22:21
本帖最后由 tobaba 于 2025-7-15 15:53 编辑

感谢大佬分享,受益匪浅!
3#
PLA81 发表于 2025-7-10 19:51
4#
wls07121991 发表于 2025-7-10 20:20
感谢分享出来
5#
free1031 发表于 2025-7-10 20:42
感谢楼主的分享
6#
骑着熊猫唱着歌 发表于 2025-7-10 20:46
感谢分享
7#
redbaby999 发表于 2025-7-10 20:46
感谢哟,好东西啊!!!
8#
WORSONG178 发表于 2025-7-10 21:32
原来还能这么干,真是好思路。
9#
youyoulong 发表于 2025-7-10 21:34
大佬思路值得学习借鉴
10#
yanshi330 发表于 2025-7-10 21:57
谢谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-12-17 09:52

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表