首页 > 其他分享 >JS HOOK 代码段

JS HOOK 代码段

时间:2024-11-04 13:58:14浏览次数:4  
标签:function return val 代码段 JS HOOK window cookie document

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);
}
})();

 

标签:function,return,val,代码段,JS,HOOK,window,cookie,document
From: https://www.cnblogs.com/lyt263/p/18525084

相关文章

  • Nuxt.js 应用中的 nitro:build:before 事件钩子详解
    title:Nuxt.js应用中的nitro:build:before事件钩子详解date:2024/11/4updated:2024/11/4author:cmdragonexcerpt:nitro:build:before是Nuxt3中的一个生命周期钩子,专门用于在构建Nitro实例之前调用。这个钩子允许开发者在Nitro实例构建之前执行特定的操作,从而......
  • HTML CSS JS游戏网页设计作业「响应式高端游戏资讯bootstrap网站」
    ......
  • 学习JS
    varfoo=(functionCoolModule(){varsomething='cool';varanother=[1,2,3];functiondoSomething(){console.log(something);}functiondoAnother(){console.log(another);......
  • node.js毕设网上购物平台(程序+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景随着互联网技术的飞速发展,网上购物已成为人们日常生活中不可或缺的一部分。关于网上购物平台的研究,现有研究主要以大型综合购物平台的商业模式和营销策......
  • node.js毕设校园生活服务助手平台的设计与实现(程序+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景随着校园数字化建设的推进,校园生活服务的高效性、便捷性需求日益增长。关于校园生活服务平台的研究,现有研究主要以特定功能模块为主,如单独的课程管理或......
  • ts系统 打包的时候 报错js没有类型 修改方案 新建.d.ts文件
    ts系统打包的时候报错js没有类型修改方案新建.d.ts文件原因在goview系统里面,添加了一个@/api/data.js,因为之前的代码都是js,所以就cv过来了,今天打包说类型不是any类型,等等。。报错的行为import{api}from'@/api/data.js'意思说这个导出的api函数,没有定义数据类型解......
  • Vue.js 混入(Mixins)高级用法:提升代码复用与灵活性
    在Vue.js中,混入(Mixins)是一种灵活的方式来分散可复用的代码。它们允许你将组件的选项分散到多个组件中,从而提升代码的复用性和灵活性。以下是一些混入的高级用法及示例。1.基础概念混入是一个包含Vue组件选项的对象,任何包含该混入的组件都可以使用这些选项。//定义......
  • arcgis api 4.x for js 地图加载多个气泡窗口展示(附源码下载)
    前言关于本篇功能实现用到的api涉及类看不懂的,请参照esri官网的arcgisapi4.xforjs:esri官网api,里面详细的介绍arcgisapi4.x各个类的介绍,还有就是在线例子:esri官网在线例子,这个也是学习arcgisapi4.x的好素材。由于arcgisapi4.xforjs目前没有提供......
  • JS-ES6标准
    JS-ES6标准箭头函数更简洁的语法:箭头函数允许你不使用function关键字来定义函数。隐式的return:如果箭头函数的函数体只有一个表达式,那么这个表达式的值会被隐式返回,不需要return关键字。不绑定自己的this:箭头函数不会创建自己的this上下文,this值由外围最近一层非箭头函数决定......