hook详解和应用
一、hook的作用区域
1、客户端的过程
链接服务器
拿回资源
渲染(解析资源)资源
初始化(自执行)
页面逻辑
等待用户输入
加密数据
提交数据
2、hook的本质
在这些流程任意环节中插入自己的代码,让浏览器限制性自己的代码,然后再执行原本的网站代码。
①:链接服务器 hook能拿到服务器的IP地址,wss的话能后拿到向服务器发送前的参数
②:.拿回资源 hook能修改拿回的资源.
③:渲染 hook能够判定想渲染的东西
④:js初始化 hook能够修改windows的常见变量 浏览器的环境变量 loction.href window.atob, window.btoa
⑤:页面逻辑 在js 的某些内部函数写的 所以会有自己的作用域 作用域->变量生效的位置
⑥:等待用户输入 hook 拿到用户输入 ~ = 事件断点.
⑦:加密数据 hook 拿到明文参数和加密后的参数
二、hook基础
1、上下文
①:同一个一个环境(js 中的v8虚拟机)
②:浏览器中 不同的新页面就是一个新的环境
③:但是js中使用eval执行虽然开了一个新的v8虚拟机,但是还是同一个上下文。
④:新的线程 webwork v8虚拟机是开了多个的v8虚拟机,但是在浏览器看来是一个上下文
2、变量的作用域(生命周期)
①:在同一个上下文环境中。
②:因为javascript是一个弱类型语言,所以在重复定义一个变量的时候不会报错,并且可以在定义变量的时候修改变量的被赋的值
var zhiyuan = 1;
var zhiyaun = function(){
var zhiyuan = 2;
return zhiyaun
} //不会报错,控制台输入zhiyua 对输出对应函数体,输入zhiyuan()返回2
③:解释器执行流程(其实和其他的语言差不多),声明一个全局作用域变量和数组
var zhiyuan = 1;
var zhiyaun = function(){
var zhiyuan = 2;
return zhiyaun ;
}
zhiyuan = 3
//解释器
var glArr = {}
glArr.zhiyuan = 1;
glArr.zz = “CODE”
//执行方法(glArr.zz);
//进入方法作用域
//声明一个“glArr.zz”方法作用域变量数组
glArr.zz.Arr = {}
glArr.zz.Arr.zhiyuan = 2;
//输出的时候取当前作用域的值,如果当前没有,那么去上一个作用域找。
//如是果一直没找到,那么就报错not defind
//退出方法
//设置当前作用域"Arr"
//然后再取当前的作用域
④:在不是全局作用域下 如果赋值语句没有使用var定义而直接赋值.
var zhiyuan = 1;
var zhiyaun = function(){
var zhiyuan = 2;
zhiyuan1 = 2;
return zhiyaun ;
}
zhiyuan = 3
3、this指向问题
①:全局作用域 this = window
②:在方法作用域(局部作用域) this = 调用者
③:在类(对象)的方法里面 this = 类自己
④:在所有方法下,只要this没有调用者,那么就是执行window
function xxx(){
console.log(this);
}
xxx();
三、hook实例
1、网页中的js代码
var = 1
loction.xxx = function(){
console.log(this);
} zzz = function(){
console.log(this);
}
zzz();
loction.xxx();
2、hook方法
如果在console中重新定义
loction.xxx(){}
这样并没有效果,因为当页面中的js代码再次被执行的时候就会再次定义xxx();
所以在xxx()函数运行后,被调用前来进行hook可以hook到
即在zzz处打断点,然后控制台重新定义xxx()
3、自执行
!(function(){
var bbb = 2;
var zzz = function(){
console.log(bbb)
}
var rrr = 1;
})()
var aaa = 111
在var aaa 处打断点不能hook
所以应该在自执行中,函数执行完,没被调用的时候hook
所以断点打在 var rrr = 1
四、hook本质
改变原方法或源代码执行流程
1、覆盖原方法
2、ES6的语法
Object.defineProperty
给对象重新定义属性
能够监听属性的设置值和获取值
js Proxy
给对象整体监听
属性初始化
属性的设置值和获取值
构造函数相关的
3、实例
hook 发包 实现xhr断点的功能
首先找到发包所在的函数
XMLHttpRequests.prototype.send
然后我们保存其原来的值
XMLHttpRequests.prototype.send_ = XMLHttpRequests.prototype.send;
然后我们对XMLHttpRequests.prototype.send改值
XMLHttpRequests.prototype.send = function(){debugger;}
然后进行翻页,就hook到了
此例子是在刷新之后hook到的
(function(){
"use strict";
var cooikeTemp = "";
Object.defineProperty(document,"cookie",{
set: function(val){
if (val.indexOf("v="))
console.log("hook捕获到cookie设置",val);
cookieTemp = val;
return val;
},
get: function()
{
return cookieTemp;
}
});
})();
4、hook时机
①:一般只影响hook完成后的操作
②:整个浏览器初始化想进行hook,那么需要插件(油猴)
③:插件(油猴(浏览器插件监听接收数据的方法)、FD插件(代理的方式)修改原数据)
④:如果不想使用插件:首先找到最先运行的js文件,格式化,然后在第一行下断点,然后再在控制台进行手动hook(这样会导致插入的位置不确定)
5、应用
对于不好调试的函数,就可以使用hook进行。或者用来hook变量,扣js代码的时候作为函数的返回值
hook详解和应用的更多相关文章
- 【转】Android Hook框架Xposed详解
1 Introduction 1.1 概述 Xposed 是 GitHUB 上 rovo89 大大设计的一个针对 Android 平台的动态劫持项目,通过替换 /system/bin/app_pro ...
- Android逆向之旅---Native层的Hook神器Cydia Substrate使用详解
一.前言 在之前已经介绍过了Android中一款hook神器Xposed,那个框架使用非常简单,方法也就那几个,其实最主要的是我们如何找到一个想要hook的应用的那个突破点.需要逆向分析app即可.不 ...
- Android Hook框架Xposed详解
1 Introduction 1.1 概述 Xposed 是 GitHUB 上 rovo89 大大设计的一个针对 Android 平台的动态劫持项目,通过替换 /system/bin/app_pro ...
- 服务器.htaccess 详解以及 .htaccess 参数说明(转载)
htaccess文件(或者”分布式配置文件”)提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录.作为用户,所能使用的命令受到限 ...
- iOS开发——高级特性&Runtime运行时特性详解
Runtime运行时特性详解 本文详细整理了 Cocoa 的 Runtime 系统的知识,它使得 Objective-C 如虎添翼,具备了灵活的动态特性,使这门古老的语言焕发生机.主要内容如下: 引言 ...
- jquery的css详解(二)
jq的工具方法style用于设置样式,jq的实例方法css在设置样式时就是调用的它,接下来分析一下源码. jQuery.extend({ ............................ st ...
- jquery的css详解(一)
通过阅读源码可以发现css是jq的实例方法.而在内部调用jq的工具方法access来实现的,对该方法不了解的朋友请点击 -> jquery工具方法access详解 在access的回调中做了一个 ...
- .htaccess详解及.htaccess参数说明【转】
目录(?)[-] htaccess 详解 htaccess rewrite 规则详细说明 RewriteEngine OnOff RewriteBase URL-path RewriteCond Te ...
- Tomcat服务器原理详解
[目录]本文主要讲解Tomcat启动和部署webapp时的原理和过程,以及其使用的配置文件的详解.主要有三大部分: 第一部分.Tomcat的简介和启动过程 第二部分.Tomcat部署webapp 第三 ...
- iptables 详解
一:前言 防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种.无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘.而我们的任务就是需要去定义到底防 ...
随机推荐
- Elasticsearch:fielddata 介绍
默认情况下,大多数字段都已编入索引,这使它们可搜索. 但是,脚本中的排序,聚合和访问字段值需要与搜索不同的访问模式. 搜索需要回答"哪个文档包含该术语?"这个问题,而排序和汇总则需 ...
- 1_JavaWeb引言
JavaEE平台 (Java Platform Enterprise Edition) Web进阶核心知识 part1: 数据库应用与JDBC MySQL, SQL语言, JDBC, 三层架构, 连接 ...
- Bootstrap5 如何创建多媒体对象
一.在Bootstra5中使用媒体对象 Bootstrap 媒体对象在版本 5 中已经停止支持了.但是,我们仍然可以使用 flex 和 margin 创建包含左对齐或右对齐媒体对象(如图像或视频)以及 ...
- POJ1734 Sightseeing trip (Floyd求最小环)
学习了一下用Floyd求最小环,思路还是比较清晰的. 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring ...
- .NET 7 RC 2 发布,倒计时一个月发布正式版
微软2022-10-22 发布了 .NET 7 RC 2,下一站是.NET 7正式发布,就在下个月Net Conf 2022(11月8日)期间正式发布. 经过长达一年时间的开发,.NET 7 规划的所 ...
- 基于纯前端类Excel表格控件实现在线损益表应用
财务报表也称对外会计报表,是会计主体对外提供的反映企业或预算单位一定时期资金.利润状况的会计报表,由资产负债表.损益表.现金流量表或财务状况变动表.附表和附注构成.财务报表是财务报告的主要部分,不包括 ...
- 9.MongoDB系列之创建副本集(二)
1. 如何设计副本集 大多数:选取主节点时需要由大多数决定,主节点只有在得到大多数支持时才能继续作为主节点,写操作被复制到大多数成员时就是安全的写操作.这里的大多数定义为"副本集中一半以上的 ...
- 2021东华杯misc project
project 题目附件发现是工程文件,按日期排序只有一个新的exe文件,那考点肯定就在这了 编辑 运行exe生成了一个zip 编辑 打开解压缩的文件发现有三部分编码 base64 quote ...
- C++ 函数重载解析策略
参考<C++ Primer Plus>(第6版)中文版,Stephen Prata 著,张海龙 袁国忠译,人民邮电出版社.C++ 使用重载解析策略来决定为函数调用使用哪一个函数定义.重载解 ...
- JVM、JDK、JRE你分的清吗
JVM.JDK.JRE你分的清吗 前言 在我们学习Java的时候,就经常听到"需要安装JDK"."运行需要JRE"."JVM调优"等等,这里 ...