首页 > 其他分享 >常用的hook代码

常用的hook代码

时间:2024-09-06 19:14:45浏览次数:4  
标签:function 常用 return debugger 代码 hook window cookie var

// ==UserScript==
// @name         hook xxx
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @run-at       document-start
// @match        https://match.yuanrenxue.cn/match/5
// @icon         https://www.google.com/s2/favicons?sz=64&domain=yuanrenxue.cn
// @grant        none
// ==/UserScript==

// header hook 监听请求头部参数
// 头部参数 请求对象当中的 设为请求头部参数
(function () {
   var org = window.XMLHttpRequest.prototype.setRequestHeader;
   window.XMLHttpRequest.prototype.setRequestHeader = function (key, value) {
       // 关键字 在请求当中发现有键是Authorization 断点
       if (key == 'xx') {
            debugger;
        }
       return org.apply(this, arguments);
   }
})();

// hook cookie  知道具体cookie的key
(function() {
    // 'use strict';
    Object.defineProperty(document, 'cookie', {
        set: function (val){
            if(val.indexOf('RM4hZBv0dDon443M') !== -1){
                debugger;
                return val
            }
        }
    })
})();

// hook cookie 不知道cookie的具体key
(function() {
    var cookie_cache = document.cookie;
    Object.defineProperty(document, 'cookie', {
        get:function (){
            console.log('Get cookie');
            // debugger
            return cookie_cache;
        },
        set:function (val){
            console.log('Set cookie');
            debugger
            var cookie = val.split(';')[0];
            var ncookie = cookie.split("=");
            var flag = false;
            var cacha = cookie_cache.split('; ');
            cacha = cacha.map(function (a){
                if(a.split('=')[0] === ncookie[0]){
                    flag = true;
                    return cookie;
                }
                return a;
            })
            cookie_cache = cacha.join('; ');
            if(!flag) {
                cookie_cache += '; ';
            }
            this. value = val;
            return cookie_cache;
        },
    });
})();

// hook URL
(function () {
    var open = window.XMLHttpRequest.prototype.open;
    window.XMLHttpRequest.prototype.open = function (method, url, async) {
        if (url.indexOf("login") != -1) {
            debugger;
        }
        return open.apply(this, arguments);
    };
})();

// hook eval
(function() {
    // 保存原始方法
    window.__cr_eval = window.eval;
    // 重写 eval
    var myeval = function(src) {
        console.log(src);
        console.log("=============== eval end ===============");
        debugger;
        return window.__cr_eval(src);
    }
    // 屏蔽 JS 中对原生函数 native 属性的检测
    var _myeval = myeval.bind(null);
    _myeval.toString = window.__cr_eval.toString;
    Object.defineProperty(window, 'eval', {
        value: _myeval
    });
})();

// hook JSON.parse
(function() {
    var parse = JSON.parse;
    JSON.parse = function(params) {
        console.log("Hook JSON.parse ——> ", params);
        debugger;
        return parse(params);
    }
})();

// hook JSON.stringify
(function() {
    var stringify = JSON.stringify;
    JSON.stringify = function(params) {
        console.log("Hook JSON.stringify ——> ", params);
        debugger;
        return stringify(params);
    }
})();

// hook Function
(function() {
    // 保存原始方法
    window.__cr_fun = window.Function;
    // 重写 function
    var myfun = function() {
        var args = Array.prototype.slice.call(arguments, 0, -1).join(","),
            src = arguments[arguments.length - 1];
        console.log(src);
        console.log("=============== Function end ===============");
        debugger;
        return window.__cr_fun.apply(this, arguments);
    }
    // 屏蔽js中对原生函数native属性的检测
    myfun.toString = function() {
        return window.__cr_fun + ""
    }
    Object.defineProperty(window, 'Function', {
        value: myfun
    });
})();

// 去除无限debugger
Function.prototype.__constructor_back = Function.prototype.constructor;
Function.prototype.constructor = function() {
    if(arguments && arguments[0] === 'string'){
        if('debugger' === arguments[0]){
            // arguments[0] = 'console.log("debugger")';
            // arguments[0] = ";"
            return
        }
    }
    return Function.prototype.__constructor_back.apply(this, arguments);
}

// 通用反调试
(function() {
    var _constructor = unsafeWindow.Function.prototype.constructor;
    // Hook Function.prototype.constructor
    unsafeWindow.Function.prototype.constructor = function() {
        var fnContent = arguments[0];
        if (fnContent) {
            if (fnContent.includes('debugger')) { // An anti-debugger is attempting to stop debugging
                var caller = Function.prototype.constructor.caller; // Non-standard hack to get the function caller
                var callerContent = caller.toString();
                if (callerContent.includes(/\bdebugger\b/gi)) { // Eliminate all debugger statements from the caller, if any
                    callerContent = callerContent.replace(/\bdebugger\b/gi, ''); // Remove all debugger expressions
                    eval('caller = ' + callerContent); // Replace the function
                }
                return (function () {});
            }
        }
        // Execute the normal function constructor if nothing unusual is going on
        return _constructor.apply(this, arguments);
    };
})();

标签:function,常用,return,debugger,代码,hook,window,cookie,var
From: https://www.cnblogs.com/lsixu/p/18400829

相关文章

  • Numpy中生成数组的常用方法
    目录1.np.arrage()2.np.arange()3.ones/empty/zeros函数4.np.randomnp.random.rand():np.random.random():np.random.randn()np.random.randint(low,high,size,dtype)np.random.uniform(low,high,size)np.linspace1.np.arrage()importnumpyasnp##下面两种结果相同......
  • 拥抱数智化,JNPF低代码平台如何推动企业转型升级
    随着信息技术的飞速发展,企业面临的市场竞争日益激烈,传统的业务流程和管理模式已经难以满足快速变化的市场需求。数智化转型成为企业持续发展的必由之路。在这一过程中,低代码开发平台扮演了至关重要的角色。本文将探讨JNPF低代码平台如何助力企业拥抱数智化,实现转型升级。什么......
  • 一键解锁企业数智化转型:JNPF低代码平台的实践与应用
    随着信息技术的飞速发展,企业面临的市场竞争日益激烈,数智化转型已成为企业持续发展的必由之路。数智化转型不仅涉及技术层面的革新,还包括业务流程、管理模式以及企业文化等多方面的深刻变革。在这一过程中,低代码平台作为一种新兴的开发工具,正逐渐成为企业实现快速转型的重要推手......
  • git如何回滚代码
     方法一:使用gitreset命令命令可以将当前分支的HEAD指针指向指定的提交,从而回退代码到指定版本。该命令有三种模式:–soft、–mixed和--hard。它们的区别在于回退代码的程度不同。--mixed(默认):将HEAD指针和暂存区都回退到指定提交,但不改变工作区的内容。--soft......
  • 代码大全避免命名冲突的策略
    在编程中,避免全局命名空间的命名冲突是一个重要的考虑,因为这有助于保持代码的清晰和可维护性。以下是一些在不同编程语言中划分全局命名空间和避免命名冲突的策略:C++和C#在C++和C#中,可以使用namespace关键字来组织代码,避免命名冲突。cpp//C++示例namespaceUser......
  • 简单扫雷代码的底层思路和代码分析
     桀桀桀,开始今天的扫雷代码讲解:<一>、要完成一个扫雷代码我们首先要有一个自己的思路,比如下图 我们这篇文章将以这个思路去完成我们的扫雷游戏1.main函数构建菜单(menu)和游戏内容(game) 的函数,放在main函数外进行编写,更加简洁。然后运用switch语句去编写一下,不同选......
  • 一次Java性能调优实践【代码+JVM 性能提升70%】
    这是我第一次对系统进行调优,涉及代码和JVM层面的调优。如果你能看到最后的话,或许会对你日常的开发有帮助,可以避免像我一样,犯一些低级别的错误。本次调优的代码是埋点系统中的报表分析功能,小公司,开发结束后,没有CodeReview环节,所以下面某些问题,也许在CodeReview环节就可以避免......
  • 使用同步锁的代码示例7
    使用同步锁的代码示例packageorg.zyf.javabasic.thread.lock.opti;importjava.util.concurrent.locks.ReentrantLock;/***@program:zyfboot-javabasic*@description:使用了ReentrantLock来保护对共享资源(counter)的访问,确保同一时间只有一个线程可以对计数器......
  • 三分钟全面了解低代码,两小时实现应用系统搭建
    在数字化转型的浪潮中,企业对于快速开发和部署应用系统的需求日益增长。传统的软件开发方法往往耗时且成本高昂,而低代码开发平台的出现,为解决这一问题提供了全新的视角。本文将带你三分钟全面了解低代码开发,并在两小时内实现一个简单的应用系统搭建。低代码开发简介低代码开......
  • 企业数智化转型实战:JNPF低代码平台的创新应用案例
    随着信息技术的飞速发展,企业数智化转型已成为推动企业持续增长和提升竞争力的关键战略。在这一过程中,低代码平台因其快速开发、高效部署和易于维护的特性,成为企业数字化转型的重要工具。本文将探讨JNPF低代码平台在企业数智化转型中的创新应用案例。JNPF低代码平台简介JNPF......