JS HOOK 代码段

1、定位header关键字

(function(){
    let headerCache = window.XMLHttpRequest.prototype.setRequestHeader;
    window.XMLHttpRequest.prototype.setRequestHeader = function(key, value){
        console.log('Hook set header %s => %s', key, value);
        // 定位到所需的header关键字
        if (key === "Sign"){
            debugger;
        }
        return headerCache.apply(this, arguments);
    }
})();

2、定位cookie关键字

// 定位cookie关键字
(function() {
    "use strict";
    var cookieTemp = "";
    Object.defineProperty(document, "cookie", {
        writable: false, // 表示能否修改属性的值,即值是可写的还是只读
        configurable: false, // 表示能否通过 delete 删除属性、能否修改属性的特性,或者将属性修改为访问器属性
        set: function(val) {
            if (val.indexOf("cookie的参数名称") != -1) {
                debugger ;
            }

            cookieTemp = val;
            return val;
        },

        get: function() {
            return cookieTemp;
        }
    })
}
)();

// 定位cookie关键字  上面不能用时更换成这个    enumerable:true,configurable:true,   https://www.cnblogs.com/lifengjuan/p/17722573.html
(function() {
    "use strict";
    var cookieTemp = "";
    Object.defineProperty(document, "cookie", {
        enumerable:true,
        configurable:true,
        set: function(val) {
            if (val.indexOf("_yq_bid") != -1) {
                debugger ;
            }

            cookieTemp = val;
            return val;
        },

        get: function() {
            return cookieTemp;
        }
    })
}
)();

// 捕获cookie
(function(){
    // 严格模式,检查所有错误
    'use strict'
    // document 为要hook的对象 ,属性是cookie
    Object.defineProperty(document,'cookie',{
        // hook set方法也就是赋值的方法,get就是获取的方法
        set: function(val){
            // 这样就可以快速给下面这个代码行下断点,从而快速定位设置cookie的代码
            debugger;  // 在此处自动断下
            console.log('Hook捕获到set-cookie ->',val);
            return val;
        }
    })
})();

3、定位URL关键字

// 定位url关键字
(function () {
    var open = window.XMLHttpRequest.prototype.open;
    window.XMLHttpRequest.prototype.open = function (method, url, async) {
        if (url.indexOf("key") != -1) {
            debugger;
        }
        return open.apply(this, arguments);
    };
})();

4、定位JSON.stringify、JSON.parse 用于请求或者响应是密文

// 定位JSON.stringify、JSON.parse,一般用于请求和响应是密文
// 请求是密文
(function() {
    var _stringify = JSON.stringify;
    JSON.stringify = function(ps) {
        console.log("Hook JSON.stringify ——> ", ps);
        debugger;
        return _stringify(ps);  // 不改变原有的执行逻辑
    }
})();

// 响应是密文
(function() {
    var _parse = JSON.parse;
    JSON.parse = function(ps) {
        console.log("Hook JSON.parse ——> ", ps);
        debugger;
        return _parse(ps);  // 不改变原有的执行逻辑
    }
})();

 

5、定位键盘、鼠标的动作

// F12的键码为 123,可以直接全局搜索 keyCode == 123, == 123 ,keyCode
document.onkeydown = function() {
    if (window.event && window.event.keyCode == 123) {
        // 改变键码
        event.keyCode = 0;
        event.returnValue = false;
        // 监听到F12被按下直接关闭窗口
        window.close();
        window.location = "about:blank";
    }
}
;


// 监听鼠标右键是否被按下方法 1, oncontextmenu事件 document.oncontextmenu = function () { return false; };

// 监听鼠标右键是否被按下方法 2,onmousedown事件 document.onmousedown = function(evt){ // button属性是2 就代表是鼠标右键 if(evt.button == 2){ alert('监听到鼠标右键被按下') evt.preventDefault() // 该方法将通知 Web 浏览器不要执行与事件关联的默认动作 return false; } }

// 监听用户工具栏调起开发者工具,判断浏览器的可视高度和宽度是否有改变,有改变则处理, // 判断是否开了开发者工具不太合理。 var h = window.innerHeight, w = window.innerWidth; window.onresize = function(){ alert('改变了窗口高度') }


// 鼠标 (function() { //严谨模式 检查所有错误 'use strict'; // hook 鼠标选择 Object.defineProperty(document, 'onselectstart', { set: function(val) { console.log('Hook捕获到选中设置->', val); return val; } });


// hook 鼠标右键 Object.defineProperty(document,'oncontextmenu',{ set:function(evt){ console.log("检测到右键点击"); return evt } }); })();

6、加载器

 

//在加载器后面下断点  执行下面代码
// 这里的f 替换成需要导出的函数名
//在你要的方法加载前下断点 执行 window.isz=true
//在你要的方法运行后代码处下断点  执行 window.wbpk_  拿到所有代码  注意后面有个逗号
window.zhiyuan = f;
window.wbpk_ = "";
window.isz = false;
f = function(r){
    if(window.isz)
    {
        // e[r]里的e 是加载器里的call那里
        window.wbpk_ = window.wbpk_ + r.toString()+":"+(e[r]+"")+ ",";
    }
    return window.zhiyuan(r);
}



// hook
// 如果只是调用模块,不用模块里面的方法, 那么直接获取调用模块的时候所有加载过的模块,进行拼接
function o(t) {
    if (n[t])
        return n[t].exports;
    var i = n[t] = {
        i: t,
        l: !1,
        exports: {}
    };
    console.log("被调用的 >>> ", e[t].toString());
    //  这里进行拼接,bb变量需要在全局定义一下
    // t 是模块名, e[t] 是模块对应的函数, 也就是key:value形式
    bb += `"${t}":${e[t].toString()},`
    return e[t].call(i.exports, i, i.exports, o),
    i.l = !0,
    i.exports
}
bz = o;

 

 

 

 

 

7、document下的createElement()方法的hook,查看创建了什么元素

(function() {
    'use strict'
   var _createElement = document.createElement.bind(document);
   document.createElement = function(elm){
   // 这里做判断 是否创建了script这个元素
   if(elm == 'body'){
        debugger;
   }
    return _createElement(elm);
}
})();

 

posted @ 2024-11-04 14:05  *感悟人生*  阅读(12)  评论(0编辑  收藏  举报