JavaScript常用的Hook脚本

2023-11-15

headers hook 当header中包含Authorization时,则插入断点

var code = function(){
var org = window.XMLHttpRequest.prototype.setRequestHeader;
window.XMLHttpRequest.prototype.setRequestHeader = function(key,value){
    if(key=='Authorization'){
        debugger;
    }
    return org.apply(this,arguments);
}
}
var script = document.createElement('script');
script.textContent = '(' + code + ')()';
(document.head||document.documentElement).appendChild(script);
script.parentNode.removeChild(script);

请求hook 当请求的url里包含MmEwMD时,则插入断点

var code = function(){
var open = window.XMLHttpRequest.prototype.open;
window.XMLHttpRequest.prototype.open = function (method, url, async){
    if (url.indexOf("MmEwMD")>-1){
        debugger;
    }
    return open.apply(this, arguments);
};
}
var script = document.createElement('script');
script.textContent = '(' + code + ')()';
(document.head||document.documentElement).appendChild(script);
script.parentNode.removeChild(script);

过debugger—1 constructor 构造器构造出来的

var _constructor = constructor;
Function.prototype.constructor = function(s) {
    if (s == "debugger") {
        console.log(s);
        return null;
    }
    return _constructor(s);
}

过debugger—2 eval的

(function() {
    'use strict';
    var eval_ = window.eval;
    window.eval = function(x) {
        eval_(x.replace("debugger;", "  ; "));
    }
    ;
    window.eval.toString = eval_.toString;
}
)();


JSON HOOK

var my_stringify = JSON.stringify;
JSON.stringify = function (params) {
    //这里可以添加其他逻辑比如 debugger
    console.log("json_stringify params:",params);
    return my_stringify(params);
};

var my_parse = JSON.parse;
JSON.parse = function (params) {
    //这里可以添加其他逻辑比如 debugger
    console.log("json_parse params:",params);
    return my_parse(params);
};

对象属性hook 属性自定义,hook 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;
        }
    })
})();


eval/Function


window.__cr_eval = window.eval;
var myeval = function(src) {
    // src就是eval运行后 最终返回的值
    console.log(src);
    console.log("========= eval end ===========");
    return window.__cr_eval;
}

var _myeval = myeval.bind(null);
_myeval.toString = window.__cr_eval.toString;
Object.defineProperty(window, 'eval',{value: _myeval});

window._cr_fun = window.Function
var myfun = function(){
    var args = Array.prototype.slice.call(arguments, 0, -1).join(","), src = arguments[arguments.lenght -1];
    console.log(src);
    console.log("======== Function end =============");
    return window._cr_fun.apply(this, arguments)
}

myfun.toString = function() {return window._cr_fun + ""} //小花招,这里防止代码里检测原生函数
Object.defineProperty(window, "Function",{value: myfun})

eval 取返回值

_eval = eval;
eval = (res)=>{
    res1 = res // 返回值
    return _eval(res)
}

eval(xxxxxxxxx)

websocket hook

 // 1、webcoket 一般都是json数据格式传输,那么发生之前需要JSON.stringify  
var my_stringify = JSON.stringify;
JSON.stringify = function (params) {
    //这里可以添加其他逻辑比如 debugger
    console.log("json_stringify params:",params);
    return my_stringify(params);
};

var my_parse = JSON.parse;
JSON.parse = function (params) {
    //这里可以添加其他逻辑比如 debugger
    console.log("json_parse params:",params);
    return my_parse(params);
};

// 2  webScoket 绑定在windows对象,上,根据浏览器的不同,websokcet名字可能不一样 
//chrome window.WebSocket  firfox window.MozWebSocket;
window._WebSocket = window.WebSocket;

// hook send
window._WebSocket.prototype.send = function (data) {
    console.info("Hook WebSocket", data);
    return this.send(data)
}

Object.defineProperty(window, "WebSocket",{value: WebSocket})


hook canvas (定位图片生成的地方)

(function() {
    'use strict';
    let create_element = document.createElement.bind(doument);

    document.createElement = function (_element) {
        console.log("create_element:",_element);
        if (_element === "canvas") {
            debugger;
        }
        return create_element(_element);
    }
})();

setInterval 定时器

(function() {
    setInterval_ = setInterval;
    console.log("原函数已被重命名为setInterval_")
    setInterval = function() {}
    ;
    setInterval.toString = function() {
        console.log("有函数正在检测setInterval是否被hook");
        return setInterval_.toString();
    }
    ;
}
)();


setInterval 循环清除定时器

for(var i = 0; i < 9999999; i++) window.clearInterval(i)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript常用的Hook脚本 的相关文章

随机推荐

  • 【Android】SDK环境变量配置

    目录 第一步 找到SDK路径 第二步 配置环境变量 第三步 测试是否配好环境变量 第一步 找到SDK路径 然后再找到此文件夹 第二步 配置环境变量 在我的电脑右键点击属性 在系统变量中新建ANDROID HOME的变量名 变量值填入第一步找
  • 通过AT指令控制ESP8266

    目录 简介 1 串口无线 WIFI COM WIFI AP 1 1串口无线 WIFI AP 模式 TCP 服务器配置 1 2 串口无线 WIFI AP 模式 TCP 客户端配置 1 3 串口无线 WIFI AP 模式 UDP 配置 2 串口
  • Spring Boot 笔记 注解 (三)

    Spring Beans 和 依赖注入 您可以自由地使用任何标准Spring框架技术来定义您的bean和它们 的 bean的 依赖项注入 为了简单起见 我们经常发现使用 ComponentScan 查找bean 使用 Autowired 用
  • linux下libusb的安装与测试

    2013 5 14 0 libusb的介绍 参考 1 1 环境 vmware fedora 10 linux 2 6 x 2 获取源代码 http sourceforge net projects libusb 最好选择libusb 1 0
  • 专升本——虚拟语气

    文章目录 1 if引导的虚拟语气 1 1 含义 1 2 公式表 1 3 练习 1 4 if的三种变形 1 5 练习2 2 wish的虚拟 2 1 含义 2 2 公式表 2 3 注意 用法同wish 2 4 练习 3 命令式虚拟 3 1 hi
  • 阿里云新ECS配置使用SSH连接

    本文使用实例系统为Ubuntu 18 04 64位 新实例创建完成后 去控制台操作 gt 更多 gt 密码 gt 重制实例密码设置新的密码 然后重启实例 此时要是直接通过ssh登陆 无法连接且有如下提示 ssh root xxx xx xx
  • 如何解决UE5重定向后丢失RootMotion

    解决方法如图所示
  • 有关无人机的几点总结

    Pix APM 减震问题 X Y 方向震动必须小于0 3g Z方向必须小于0 5g 最好每个方向上都控制在0 1g 电机动平衡处理 T motor 在工厂已经做过动平衡处理 ArduPilot 4 0 代码中初始化函数已经移至 AP veh
  • linux中yum -y install mysql为什么默认是mariadb?以及mysql yum源的配置

    linux自带yum源中mysql是什么版本 答案是 mariadb 我们可以从yum中的命令告诉我们 例如下 root dr yum repos d yum provides mysql 已加载插件 fastestmirror Loadi
  • OpenSSL 远程升级到 3.2.1

    OpenSSL 远程升级到 3 2 1 文章目录 OpenSSL 远程升级到 3 2 1 背景 升级 OpenSSL 1 查看 OpenSSL版本 2 下载最新稳定版本 OpenSSL 3 解压缩 安装 4 配置 背景 最近的护网行动 被查
  • 【实际开发19】- 压测 / 调优准备

    目录 1 Jmeter 2 Jmeter 环境部署 1 配置 临时修改语言 Options Choose Language Chinese 3 Jmeter 并发测试 0 提示 Postman 测试是 串行 的 无法测试并发请求 1 dai
  • Windows常用批处理命令

    前言 批处理文件是一个 bat 结尾的文本文件 这个文件的每一行都是一条DOS命令 可以使用任何文本文件编辑工具创建和修改 批处理是一种简单的程序 可以用 if 和 goto 来控制流程 也可以使用 for 循环 批处理的编程能力远不如C语
  • three.js 载入 3D 模型的方法

    three js 载入 3D 模型的方法有很多种 以下是其中的一些 1 OBJLoader模型加载器 import OBJLoader from three examples jsm loaders OBJLoader js 创建一个 OB
  • 多元统计分析(1)

    多元统计分析 1 概述 多元数据的描述与展示 随机变量的特征 随机变量 Y 独立同分布的随机样本 y 1 y 1 y1
  • 一般熟练盲打需要多久_话说。。用五笔打字的筒子们。。你们练了多久才能熟练的打出字啊。。...

    俺一直用的搜狗 但是最近想练习着用五笔 因为搜狗打人名啊什么的真的是挺不方便的 但是练五笔练了几天 感觉字都不会写了 打字之前先在脑子里过一遍这个字怎么写 有的简单的字都要想好几遍才能想明白 渐渐的信心都没了 所以想上来问问用五笔打字的筒子
  • mysql踩坑----case when then用法

    一 踩坑sql UPDATE bz order SET payment code CASE WHEN payment name APPPayPal THEN paypal WHEN payment name AfterpayAfterpay
  • Centos6.5镜像换源

    base name CentOS 6 5 baseurl http mirrors aliyun com centos vault 6 5 os basearch gpgcheck 1 enabled 1 gpgkey http vault
  • c语言编程 scant,TscanCode静态代码扫描软件v2.1

    TscanCode是腾讯静态分析团队开发的一款开源免费的C C 静态分析工具 由于其比较简单实用 准确率较高 并且扫描C C 代码不需要进行编译 对于开发与测试人员从代码层面挖掘问题有着很好的帮助 感兴趣的朋友快来下载试试吧 软件简介 Ts
  • Ruff:物联网+区块链的无限可能不靠炒作

    5月初 Ruff 与施耐德电气正式签订物联网合作协议 两家企业将在未来携手共筑工业物联网 共同推进工业物联网目标的快速实现 6月6日 Ruff 受邀出席 GBLS全球无眠区块链领袖峰会 并在大会上发表关于 区块链的供应链金融 主题演讲 与此
  • JavaScript常用的Hook脚本

    headers hook 当header中包含Authorization时 则插入断点 var code function var org window XMLHttpRequest prototype setRequestHeader w