hook原理和篡改猴编写hook脚本

hook原理:

hook是常用于js反编译的技术;翻译就是钩子,他的原理就是劫持js的函数然后进行篡改

一段简单的js代码 :这个代码是顺序执行的

function test01(){console.log('test01')test02()
}
function test02(){console.log('02')test03()}function test03(){console.log("03")test04()
}
function  test04(){console.log("04")
}
test01()var a=test03
function test03 (){console.log("hook successful")
}

这个就是简单的hook原理  当然如果是web上   我们的函数重构实际上就是  篡改猴脚本在 控制台上进行的操作

实验一  使用简单的hook脚本进行锁定浏览器的宽高

我们知道 js的bom树中有个  这个是浏览器当前的宽高 我们可以使用hook技术让 这个的输出是固定的

因为我们只有把窗口缩小 就会出现数值的同步

hook前置知识 :

这里有一堆注释的东西  是什么呢

// ==UserScript==
// @name         固定百度页面窗口尺寸     //脚本的名称 
// @namespace    http://tampermonkey.net/     //  脚本的作用域
// @version      1.0                             //脚本的版本
// @description  强制让百度页面的 innerWidth/innerHeight 返回固定值 520      //脚本的注释
// @author       YourName         //脚本的作者
// @match        https://www.baidu.com/*                 // 脚本作用的url 这个建议一个每个脚本都 固定特定的url   不要使用    htttp://*
// @grant        none                      //定义脚本所需的权限
// @run-at       document-start

完整脚本  可以直接让 ai帮写

实验二 :结合ai帮我们解决 js逆向常见的debuger 问题  

最简单的步骤 :

1、Title   先判断debugger函数定义的位置(一般hook 的方法就是使用 函数重构)

这种 我们点击快进  看看有几个debugfer 

发现就一个

然后使用全局搜索进行 搜索debugger 函数的定义

发现之后就让ai帮我们写脚本 (上面这个需要绕过 2个地方  1、 debuger函数  2、连续的时间)

// ==UserScript==
// @name         禁用网站反调试(无限debugger)
// @namespace    http://tampermonkey.net/
// @version      1.1
// @description  绕过网站通过debugger实现的无限断点反调试
// @author       YourName
// @match        http://www.xiaodi8.com/test.html
// @grant        none
// @run-at       document-start
// ==/UserScript==(function() {'use strict';// ========== 核心防御逻辑 ==========// 1. 劫持 Function 构造函数 (防止通过 new Function("debugger") 创建调试器)const nativeFunction = window.Function;window.Function = function(...args) {const code = args.slice(-1)[0];if (/debugger|setInterval|setTimeout/i.test(code)) {return function(){}; // 返回空函数}return nativeFunction.apply(this, args);};// 2. 劫持 setInterval/setTimeout (防止定时触发debugger)const originalSetInterval = window.setInterval;window.setInterval = function(fn, delay, ...args) {if (typeof fn === 'function' && /debugger/.test(fn.toString())) {return -1; // 阻止执行}return originalSetInterval(fn, delay, ...args);};// 3. 直接重写 debugger 关键字行为Object.defineProperty(window, 'debugger', {get: () => {},set: () => {},configurable: true});// 4. 防御动态脚本注入new MutationObserver(() => {// 持续重写 Function 和 debuggerwindow.Function = function(){};window.eval = function(){};}).observe(document, { subtree: true, childList: true });// ========== 附加防御层 ==========// 禁用控制台调试 (可选)if (window.console) {window.console.log = function(){};window.console.debug = function(){};}// 劫持 onbeforeunload 事件window.onbeforeunload = null;
})();

之后就能解决了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/81804.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 Vue 展示 Markdown 文本

使用 Vue 展示 Markdown 文本可以通过以下几种方法&#xff1a; 方法 1&#xff1a;使用 v-html 指令 可以使用 v-html 指令来渲染 Markdown 文本&#xff1a; <template><div v-html"markdownText"></div> </template> <script>e…

深度解析 Java 中介者模式:重构复杂交互场景的优雅方案

一、中介者模式的核心思想与设计哲学 在软件开发的历史长河中&#xff0c;对象间的交互管理一直是架构设计的核心难题。当多个对象形成复杂的网状交互时&#xff0c;系统会陷入 "牵一发而动全身" 的困境。中介者模式&#xff08;Mediator Pattern&#xff09;作为行…

FreeCAD傻瓜教程-外螺纹的绘制,利用两个实体进行布尔运算来实现

起因&#xff1a;因为要设计一个波珠螺丝固定器&#xff0c;为了不跑偏&#xff0c;需要在螺柱上加工一个直径6mm&#xff0c;深度1.2mm的圆弧凹槽所以想用泉州制造的6.8车铣加工。 但是该加工目前不支持轴向的钻孔&#xff0c;所以想着干脆在两端加上M8的螺栓&#xff0c;也起…

权限控制相关实现

Spring Boot-Shiro-Vue&#xff1a; 这个项目可以满足基本的权限控制需求&#xff0c;前后端都有&#xff0c;开箱即用

Node.js路径处理指南:如何安全获取当前脚本目录路径

本文适用于 Node.js 14.x及以上版本&#xff0c;同时覆盖 CommonJS 和 ES Modules 模块系统 文章目录 一、为什么需要关注路径问题&#xff1f;二、三种核心方法详解方法1&#xff1a;经典方案 __dirname (CommonJS)方法2&#xff1a;ES Modules 解决方案方法3&#xff1a;动态…

web基础

域名概述 2-1 域名的概念&#xff1a;IP 地址不易记忆&#xff0c;域名是互联网络上识别和定位计算机的层次结构式的字符标识&#xff0c;与该计算机的互联网协议 (IP) 地址相对应&#xff0c;用于在数据传输时标识计算机的电子方位&#xff0c;方便人们记忆和输入。 早期使用…

医疗行业数据共享新实践:如何用QuickAPI打通诊疗全流程数据壁垒

在医疗行业&#xff0c;数据的高效流转直接影响诊疗效率和患者体验。某三甲医院在数字化转型中发现&#xff0c;虽然已积累大量核心业务数据&#xff0c;但各科室系统间的数据互通仍存在明显瓶颈——检验科的报告无法实时同步至门诊系统&#xff0c;药房库存数据与采购系统脱节…

高级认知型Agent

目标: 构建一个具备自主规划、多步推理、工具使用、自我反思和环境交互能力的智能代理,使其能够高效、可靠地完成复杂任务。 核心理念: Agent的智能涌现于一个精密的认知循环: 感知 (Perceive) -> 理解与规划 (Think/Plan - 想) -> 信息获取 (Search/Act - 查) -&g…

百度地图的地铁图API所有城市的城市名和citycode的对照关系列表

百度地图的地铁图API所有城市的城市名和citycode的对照关系列表 城市keywordcitycode北京beijing131上海shanghai289广州guangzhou257深圳shenzhen340重庆chongqing132天津tianjin332石家庄shijiazhuang150南京nanjing315成都chengdu75沈阳shenyang58杭州hangzhou179武汉wuhan2…

SymPy | 获取表达式自由变量方法与因式分解

SymPy 是 Python 中强大的符号计算库&#xff0c;广泛应用于数学建模、公式推导和科学计算。本文将从两个核心功能展开&#xff1a;表达式中自由变量的获取与因式分解的实现&#xff0c;通过完整代码示例和深入分析&#xff0c;帮助读者掌握其使用方法。 第一部分&#xff1a;获…

掩膜合并代码

def ensure_dir(path):"""若目录不存在则创建"""if not os.path.exists(path): #判断路径是否存在os.makedirs(path) #创建路径def read_and_resize(img_path, size):"""读取并缩放图像到指定尺寸&#xff0c;返回 numpy 数组&qu…

蓝桥杯5130 健身

问题描述 小蓝要去健身&#xff0c;他可以在接下来的 1∼n 天中选择一些日子去健身。 他有 m 个健身计划&#xff0c;对于第 i 个健身计划&#xff0c;需要连续的 天&#xff0c;如果成功完成&#xff0c;可以获得健身增益 si​ &#xff0c;如果中断&#xff0c;得不到任何…

auto关键字解析

前言 在11标准之前&#xff0c;auto在c中是声明存储器类型的关键字。而在11标准中它的功能变为了类型推导。 对此&#xff0c; 在这里引入Cprimer中的原句&#xff1a; 编程时常常需要把表达式的值赋给变量&#xff0c;这就要求在声明变量的时候清楚的知道表达式的类型。然而…

嵌入式STM32学习——串口USART 2.0(printf重定义及串口发送)

printf重定义&#xff1a; C语言里面的printf函数默认输出设备是显示器&#xff0c;如果要实现printf函数输出正在串口或者LCD显示屏上&#xff0c;必须要重定义标准库函数里调用的与输出设备相关的函数&#xff0c;比如printf输出到串口&#xff0c;需要将fputc里面的输出指向…

信号量机制:操作系统中的同步与互斥利器

在计算机操作系统中&#xff0c;信号量机制是一种重要的进程同步与互斥工具。它广泛应用于多进程或多线程环境中&#xff0c;用于解决并发访问共享资源时可能出现的竞态条件问题。本文将从信号量的基本概念出发&#xff0c;逐步深入探讨其工作原理、实现方式以及实际应用&#…

LeetCode 1004. 最大连续1的个数 III

LeetCode 1004题 “最大连续1的个数 III” 是一道关于数组和滑动窗口的问题。题目描述如下&#xff1a; 题目描述 给定一个由若干 0 和 1 组成的数组 nums&#xff0c;以及一个整数 k。你可以将最多 k 个 0 翻转为 1。返回经过翻转操作后&#xff0c;数组中连续 1 的最大个数…

digitalworld.local: FALL靶场

digitalworld.local: FALL 来自 <digitalworld.local: FALL ~ VulnHub> 1&#xff0c;将两台虚拟机网络连接都改为NAT模式 2&#xff0c;攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 那么攻击机IP为192.168.23.182&#xff0c;靶场IP192.168.23.4 3&…

经典Java面试题的答案——Java 基础

大家好&#xff0c;我是九神。这是互联网技术岗的分享专题&#xff0c;废话少说&#xff0c;进入正题&#xff1a; 1.JDK 和 JRE 有什么区别&#xff1f; JDK&#xff1a;Java Development Kit 的简称&#xff0c;java 开发工具包&#xff0c;提供了 java 的开发环境和运行环境…

LabVIEW风机状态实时监测

在当今电子设备高度集成化的时代&#xff0c;设备散热成为关键问题。许多大型设备机箱常采用多个风机协同散热&#xff0c;确保系统稳定运行。一旦风机出现故障&#xff0c;若不能及时察觉&#xff0c;可能导致设备损坏&#xff0c;造成巨大损失。为满足对机箱内风机状态实时监…

18 C 语言算术、关系、逻辑运算符及 VS Code 警告配置详解

1 运算符与表达式核心概念 1.1 什么是运算符 运算符是编程和数学中具有特定功能的符号&#xff0c;用于对数据进行运算、赋值、比较及逻辑处理等操作。它们能够改变、组合或比较操作数的值&#xff0c;进而生成新值或触发特定动作。 1.2 什么是表达式 表达式是编程和数学中用…