Js逆向教程20-Hook基础

news2024/11/23 15:12:25

Js逆向教程19-Hook基础

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8mKcxbJk-1670250148241)(Js逆向教程19-Hook基础.png)]

一、jshook

Hook就是在这些流程任意环节插入自己的代码,让浏览器先执行自己的代码 然后再执行原本网站的

hook在以下流程中可以做的事情:

1.1 html流程

  1. 联机服务器:获取ip地址,ws获取参数
  2. 拿回资源:动态修改html代码
  3. 渲染或者解析资源:可以判定渲染的是什么

1.2将js代码的执行流程:

hook在以下流程中可以做的事情

  1. 初始化:修改window常见的浏览器环境变量:Location.href window.atob都可以被修改。就可以方便定位函数
  2. 页面逻辑:有可能在js内部函数中实现。改变作用域
  3. 等待用户输入:修改事件监听
  4. 加密数据:修改加密数据,拿到明文参数
  5. 提交数据:对提交的数据进行修改

1.3 作用域

上下文:表示一个环境(js上下文就是v8引擎,浏览器是不同的页签就是不同的上下文,js中的eval还是在一个上下文。只是虚拟机、)

作用域:控制变量所生效的位置。作用域是更小的一个级别 处于上下文中

var xuhss = 1;

function xx(){
	var xuhss =2;
	console.log(1,xuhss);
}
xx();
console.log(2,xuhss);

结果如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0LQaUtd3-1670250148242)(02 - 副本.assets/image-20221201200022316.png)]

解释器是如何处理这段代码:

首先解释器知道var xuhss在内存中声明了一个全局变量数组保存了xuhss,以后用的话,就到这个数组中找。
如果数组中有,就拿出来,没有就再次定义。

当看到方法时,就将方法xx放到全局变量中,当调用xx方法的时候,就进入到xx的作用域里面。声明一个方法作用域变量数组,那么在函数里面的变量就都定义在这个方法作用域变量数组中。

当打印这个变量 就现在这个作用域变量数组找,如果没找到,就到全局变量数组中找,如果都没找到,就报错:当前变量没有被定义。
退出方法后,就设置当前作用域为全局作用域。这个时候,xuhss就在全局变量数组直接查找并输出。

var xuhss = 1;

function xx(){
	var xuhss =2;
	xuhss=3;
	console.log(1,xuhss);
}
xx();
console.log(2,xuhss);

在不是全局作用域下,没有用var定义,直接赋值:先看当前和上级作用域有没有这个变量,有就直接赋值,没有就给全局作用域定义这个变量并且赋值。

二、this指向问题

2.1 全局作用域

在最外层输入this,全局作用域

this =window

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BR262iN4-1670250148243)(02 - 副本.assets/image-20221205191011142.png)]

function xxx()
{
	console.log(this);
}
// window.xxx();
this.xxx();

2.2 局部作用域

在局部作用域

this=调用者
location.xxx=function ()
{
	console.log(this);
}

location.xxx();

2.3 类下面

this = 类自己

三、如何正确HOOK断点

3.1 未定义下断点

var aaa=1;
location.xxx=function () // 假如在这里下断点hook 没有用
{
	console.log(this);
}

location.xxx();

假如我想hookxxx方法。

可以如果你在这个方法定义之前hook它,那么hook不到,因为后面它的定义会覆盖你的hook。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cK3tSe5l-1670250148244)(02 - 副本.assets/hook.gif)]

3.2 定义完成后面下断点

在定义完成的后面下断点

就可以成功hook

var aaa=1;
location.xxx=function () 
{
	console.log(this);
}

zzz = function(){
	console.log(this);
}
zzz()


location.xxx();

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1bb7b6tr-1670250148244)(02 - 副本.assets/image-20221205193625177.png)]

3.3 自执行函数里面下断点

var aaa = 1;
!(function(){
	var bbb=2;
	var zzzz=function(){
		console.log(bbb);
	}
})()

var aaaaaaaaaaa=1; // 在这里下断点hook

这种情况下 不能hook到zzz,因为它在函数的作用域里面,这个时候你在全局作用域里面,就hook不到。
如果想要hook 就需要到方法作用域里面定义完成后,hook才有效

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HFbGLPWp-1670250148245)(02 - 副本.assets/image-20221205194946475.png)]

这就是为什么我们之前要用

window.xuhss = zzzz

这样就可以将这个zzzz的局部作用域 赋值给window这个全局作用域

var aaa = 1;
!(function(){
	var bbb=2;
	var zzzz = function(){
		console.log(bbb);
	}
	window.xuhss = zzzz
	debugger
})()

var aaaaaaaaaaa=1; // 在这里下断点hook

所以hook就是改变原方法的执行流程。

四、用Hook的方式实现xhr断点

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hGTc1RRg-1670250148246)(02 - 副本.assets/image-20221205200154471.png)]

XMLHttpRequest.prototype.send_ = XMLHttpRequest.prototype.send
XMLHttpRequest.prototype.send = function(){debugger;}

当我们百度翻页的时候 就可以看到 断点hook了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Nj0p7JAZ-1670250148247)(02 - 副本.assets/image-20221205200644923.png)]

就实现了xhr断点的功能。

五、hook的时机

这里讲解的只影响hook完成后的操作。

浏览器初始化进行hook 借助插件

  • 油猴:是通过监听浏览器接收数据的方法hook
  • fd:通过代理的方式hook

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ed1QDWHX-1670250148247)(02 - 副本.assets/image-20221205201118121.png)]

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

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

相关文章

IntelliJ IDEA 2022.3正式发布,配置云同步支持Redis好用到炸

本文已被https://yourbatman.cn收录;女娲Knife-Initializr工程可公开访问啦;程序员专用网盘https://wangpan.yourbatman.cn;技术专栏源代码大本营:https://github.com/yourbatman/tech-column-learning;公号后台回复“…

【iOS】AFNetworking

AFNetworking是MAC/iOS为了简化网络操作设计的一套网络框架,专注与网络数据传输 ,以及网络中多线程的处理,只需要简单几步就可以完成网络请求任务。 小说明 ANF的特性: 登录传参数时 , 传递 字典 即可 .( 键名为参数名 , 键值为…

【网络层】IP组播(多播)、硬件组播、IGMP、组播路由选择协议、移动IP、路由器详解、路由表和路由转发

注:最后有面试挑战,看看自己掌握了吗 文章目录IP多播----只给有相同需求的路由器传信息以看视频为例-----组播路由器支持--------运行组播协议的路由器IP组播地址------多播组的设备都有一个组播组IP地址---------一群共同需求主机的相同标识-------看直…

数据安全事故频发以及防范措施

误删除事故 最近在和IT群友的聊天中得知,一个小伙因为看错了一个语句,直接将生产数据库中所有数据全部删除了,并且该库在设计的时候虽然做了备份,但在运行过程中因某些原因把备份关闭了。 传统数据运维模式 受到科技制裁的原…

opencv c++ 霍夫直线检测

目的:在进行图像边缘提取后,将数据从平面坐标转换到极坐标空间,即完成了直线的信息提取。 1、原理 平面坐标系:通过之间的斜率k和截距b来确定一条直线。y kxb 极坐标系:通过半径r、角度θ来确定一条直线。r xcosθ …

计算机毕业设计基于Springboot+vue口腔牙科诊所管理系统

项目介绍 口腔卫生是关系民生的一个重要问题。口腔健康会直接影响全身的健康,口腔基本常见的有龋齿,牙周炎等问题,而且人类的牙齿只有2次更换周期,一旦牙齿彻底完成更换终生将不再更换,所以越来越多的人开始关系口腔问…

C++中的多态和虚函数及多态原理

定义 多态:事物的一种形态,在不同的子类中表现为多种形态,就称为多态; 分类 多态分为静态和动态多态 静态多态包括运算符重载和函数重载,复用函数名; 动态多态包括虚函数派生类; 区别&…

【Flask框架】——03 应用程序的参数加载

目录1.从配置对象中加载2.从配置文件中加载3.从环境变量中加载4.从Pycharm中的运行时设置环境变量的方式加载5.企业项目开发常用的方式应用程序配置参数设置的是一个Web应用工程的相关信息,比如: 数据库的连接信息 日志的配置信息 自定义的配置信息 ……

【苹果家庭推源码】利用新的Alloc Replication方法建立一个对象

推荐内容IMESSGAE相关 作者推荐内容iMessage苹果推软件 *** 点击即可查看作者要求内容信息作者推荐内容1.家庭推内容 *** 点击即可查看作者要求内容信息作者推荐内容2.相册推 *** 点击即可查看作者要求内容信息作者推荐内容3.日历推 *** 点击即可查看作者要求内容信息作者推荐…

[Database] 脏读、幻读这些都是什么?事务隔离级别又是什么?MySQL数据库的事务隔离级别都有哪些?

文章目录前言事务隔离级别三种数据不一致问题1. 脏读2. 不可重复读3. 幻读不可重复读 vs 幻读四种事务隔离级别1. READ UNCOMMITTED2. READ COMMITTED3. REPEATABLE READ4. SERIALIZABLE不同事务隔离级别会面临的问题不同隔离事务级别的使用率排名实战查看事务隔离级别更改事务…

linux篇【11】:计算机网络—网络基础

目录 一.网络基础 1.认识 "协议" 2.协议分层 (1)软件分层 (2)协议分层 3.OSI七层模型 4.TCP/IP五层(或四层)模型 5.网络和操作系统之间的关系 6.数据包的封装(封包)和解包,分用 (1&…

四、文件管理(一)文件系统基础

目录 1.1文件的基本概念 1.2文件控制块和索引结点 1.3文件的操作 1.4文件保护 1.5文件的逻辑结构 1.5.1无结构文件(流式文件) 1.5.2有结构文件(记录式文件) 1.5.2.1顺序文件 1.5.2.2索引文件 1.5.2.3索引顺序文件 1.5…

数据库之架构

一、数据库架构原则 高可用 高性能 一致性 扩展性 二、常见的架构方案 方案一:主备架构,只有主库提供读写服务,备库冗余作故障转移用 jdbc:mysql://vip:3306/xxdb 1、高可用分析:高可用,主库挂了,kee…

[ vulhub漏洞复现篇 ] Apache Solr RemoteStreaming 文件读取与SSRF漏洞 (CVE-2021-27905)

🍬 博主介绍 👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…

C++11特性-易用性改进

1.字符串的原始字面量 表达式:R"xxx(原始字符串)xxx"或者R"(原始字符串)",xxx要写的话,必须一样 //两种申明形式string a "aaa";//没有转义的时候就是原始字面量string b R"aaa(…

总体设计阶段复习

总体设计总体设计(概要设计/初步设计):确定系统模块及相互关系,划分程序,文件,数据库,文档等物理元素设计原理:启发规则图形工具:面向数据流设计方法(SD)总体设计(概要设计/初步设计):确定系统模块及相互关系,划分程序,文件,数据库,文档等物理元素 系统设计阶段 数据流图分析方…

一篇五分生信临床模型预测文章代码复现——Figure 4-6 临床模型构建(六)

之前讲过临床模型预测的专栏,但那只是基础版本,下面我们以自噬相关基因为例子,模仿一篇五分文章,将图和代码复现出来,学会本专栏课程,可以具备发一篇五分左右文章的水平: 本专栏目录如下: Figure 1:差异表达基因及预后基因筛选(图片仅供参考) Figure 2. 生存分析,…

FineReport智能数据图表- 文本域控件

1. 概述 1.1 版本 报表服务器版本 11.0 1.2 应用场景 1.2.1 填报控件 填报报表中可以通过该控件输入多行文本信息,录入填报的数据,如下图所示: 1.2.2 参数控件 参数面板处可以通过该控件输入多行文本信息,键入查询参数&#…

【车载开发系列】UDS诊断---安全访问服务($0x27)

【车载开发系列】UDS诊断—安全访问服务($0x27) UDS诊断---安全访问服务($0x27【车载开发系列】UDS诊断---安全访问服务($0x27)一.概念定义二.安全控制过程三.报文格式1)请求种子2)发送密钥3)否定响应四.否定响应码列表五.参数定义六.注意事项…

JavaScript基础学习

文章目录什么是JavaScriptJavaScript 运行过程JvaScript 的组成JavaScript的三种书写模式行内式内嵌式外部式JavaScript的输出输出方式输入: prompt输出: alert输出: console.logJavaScript的一些基础语法变量的使用如何理解JS的动态类型(弱类型)基本数据…