minhook探究

news2024/11/17 19:43:03

参考:https://github.com/TsudaKageyu/minhook

minhook是windows平台上支持x86/x64的hook库,git上的自我介绍说是“mininalistic",其简约并不简单。在接口的设计,hook的兼容性等方面,还是值得我们初学者解决的。熟悉inline hook的,在阅读了minhook的代码之后就会发现,它也是用的这种hook方法。其核心原理就是对目标函数的某个位置(通常是在开头)的二进制指令进行修改,使得我们的逻辑处理代码有机会得到执行。

   下面以KERNELBASE.dll模块中的CreateFileA函数为例,通过minhook来hook的步骤如下:

void testhook()
{
	MH_STATUS status = MH_OK;

	//初始化minhook
	status=MH_Initialize();
	if (MH_OK == status)
	{
		//对KERNELBASE.dll 中的CreateFileA 进行hook
		//之后CreateFileA由myCreateFileA接管,进行逻辑处理
		//调用原始的目标函数CreateFileA
		status=MH_CreateHookApi(L"KERNELBASE.dll", "CreateFileA", myCreateFileA, (PVOID)&oriCreateFileA);


		if (MH_OK == status)
		{
			printf("hook entry is created,ppOriginal:0x%p!\n",oriCreateFileA);
			//将hook项入队等待生效
			status = MH_QueueEnableHook(MH_ALL_HOOKS);

			if (MH_OK == status)
			{
				//安装钩子
				//实际上就是将目标函数的代码指令进行修改,来达到hook的目的
				status = MH_EnableHook(MH_ALL_HOOKS);
				if (MH_OK == status)
				{
					printf("[***]hook entry is enabled!\n");
				}
				else
				{
					printf("enable hook fails,staus:%d\n", status);
				}
			}
			else
			{
				printf("queue enable hook fails,status:%d\n", status);
			}
		}
	}
    //释放minhook
    //MH_Uninitialize()
}

从上面的代码看,我们只需要准备一个detour函数来接管目标函数,其他的都由minhook来完成了。在成功对CreateFileA安装钩子之后,可以在myCreateFileA中添加一些逻辑处理。比如说,可以记录当前进程中通过CreateFileA访问了哪些文件;或者,对文件名进行过滤,假如是打开”plan.txt",直接返回无效句柄,不调用原始函数。

下面看一下hook 函数CreateFileA反汇编的变化:

                                                          hook前

                                                         hook后

通过对比可以发现,CreateFileA的反汇编指令被修改,由原来的"mov qword ptr [rsp+8],rbx"变为“jmp 00007fff`05f70fd3"。0x7fff`05f70fd3对应的就是detour函数myCreateFileA。还有一个函数地址ppOriginal,它的反汇编代码如下:

看着有点眼熟,前面的一条指令就是在hook过程中被修改的5个字节;紧接着是一个jmp指令,但是跳转的地址看起来有点不对,实际上是反汇编引擎解析有误,从源码中可以知道这里实际上是跳转到一个绝对地址(0xff,0x25,0x000000,0x7fff05fa4175),也就是CreateFileA第二条指令开始的地方(0x7fff05fa4175)。

 

 在对minhook进行测试的时候发现一个问题,ppOriginal变量在minhook释放之后没有进行清零,这会导致在多线程的情况下产生非法访问。

 

 

总的来说还是好用的。

 

 

 

 

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

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

相关文章

Hadoop之HDFS概述

Hadoop概述之HDFS HDFS架构概述优缺点HDFS架构HDFS文件块大小HDFS的shell命令HDFS读写流程写数据流程 HDFS读数据流程NameNode 和 SecondaryNameNode工作机制DataNode工作机制DataNode数据完整性如何保证 端口名称Hadoop2.xHadoop3.xNameNode内部通信端口8020/9000NameNode HTT…

两天搞定计算机专业毕业设计,附源码

两天搞定计算机专业毕业设计,附源码 适用者毕设专业 使用要求具备基本Unity 基本操作小白即可,无需编码 博主诉求快乐毕业 点赞 关注 收藏 资源说明Free资源太多了,看截图目录就知道了 适用者 毕设专业 鄙人也是计算机狗一只,会…

软考A计划-电子商务设计师-复习要点

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&am…

Ampere 又放大招,推出自研192 核AmpereOne 系列处理器,已投产

作者 | 伍杏玲 近日,Ampere Computing 发布2023年度战略和产品路线图,并推出全新的AmpereOne系列处理器,拥有多达 192 个单线程 Ampere 核,内核数量为业界最高。这是第一款基于 Ampere 新自研核的产品,由 Ampere 自有…

java--正则表达式

一、作用 作用一:校验字符串是否满足规则 作用二:在一段文本中查找满足要求的内容 二、符号含义 1、字符类(只匹配一个字符) 符号含义[abc]只能是a,b或c中一个[^abc]除了a,b,c之外的任何字符[a-zA-Z]a到z A到Z[a-d[m-p]]a到d&…

弱网测试,Network Link Conditioner你知多少

网络环境的好坏,有时会让你的产品带给用户完全不同的体验,作为开发者,在开发项目过程中,我们需要进行对于网络环境的调试。Mac环境下模拟慢速网络可以使用苹果官方提供的工具: Network Link Conditioner 具体操作步骤…

数字化时代,公司如何成为数据驱动组织

当前,数据要素和数字经济提出了数据在生产过程中发挥的重要作用。其中最热点的话题包括数据资产、数据价值、数据驱动和数字化转型。如果数据是一种资产,那么它应该为公司及其利益相关者创造价值。那么如何获从数据中获得得不同类型的价值以维持公司的竞…

Python获取当当平台商品数据信息可视化效果展示

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 环境使用: 版 本&#xff1a; python 3.8 编辑器&#xff1a;pycharm 2021.2 jupyter notebook 模块使用: 采集 requests >>> pip install requests 数据请求 csv <表格文件> 内置模块 保存数据 …

图书购物商城 图书后台管理系统

图书购物商城 图书后台管理系统 这个图书购物商城系统是一个基于JSP、Servlet和MySQL技术开发的综合性系统&#xff0c;它包括前台和后台功能。该系统旨在为用户提供一个便捷的购书平台&#xff0c;同时为管理员提供管理图书和订单的功能。 前台部分是用户使用的界面&#xf…

MQTT与EMQ

文章目录 1 MQTT协议与EMQ中间件1.1 物联网消息协议MQTT1.1.1 什么是MQTT1.1.2 MQTT相关概念1.1.3 消息服务质量QoS——信息的可靠投递1.1.3.1 QoS0——消息服务质量为0&#xff0c;消息发送至多一次1.1.3.2 QoS1——消息发送至少一次1.1.3.3 QoS2——消息发送仅一次1.1.3.4 不…

app渗透-常见问题及绕过

app渗透-常见问题及绕过 6.app常见问题和绕过前言6.1反代理操作前言6.1.1判断6.1.2实例演示-探探6.1.3绕过1-r0capture6.1.4绕过2-proxifier6.1.5绕过3-小黄鸟 6.2证书校验前言6.2.1判断6.2.2浏览器校验和解决6.2.3桡过证书单项校验-xp框架6.2.3绕过证书双向校验 6.app常见问题…

TongWeb8适配JakartaEE应用

历史&#xff1a; 2017年 Oracle将Java EE&#xff08;Java SE还自己保留&#xff09;交给开源组织&#xff0c;Eclipse基金会接手。但Oracle不允许开源组织使用Java名号&#xff0c;所以Jakarta EE名称于2018.02.26应运而生。 版本 发布日期 焦点说明 Java EE 8 2017.08 …

30天网络安全从入门到精通?

前言 毫无疑问&#xff0c;网络安全是当下最具潜力的编程方向之一。对于许多未曾涉足计算机编程的领域「小白」来说&#xff0c;深入地掌握网络安全看似是一件十分困难的事。至于一个月能不能学会网络安全&#xff0c;这个要看个人&#xff0c;对于时间管理不是很高的&#xf…

花3个月面过阿里测开岗,拿个25K不过分吧?

计算机专业&#xff0c;代码能力一般&#xff0c;之前有过两段实习以及一个学校项目经历。第一份实习是大二暑期在深圳的一家互联网公司做前端开发&#xff0c;第二份实习由于大三暑假回国的时间比较短&#xff08;小于两个月&#xff09;&#xff0c;于是找的实习是在一家初创…

南山村又一个旧改项目即将开工建设,桂庙新村城市更新单元。

5月22日&#xff0c;深圳市南山区城市更新和土地整备局发布关于粤海街道桂庙新村城市更新单元项目实施主体确认的公示。 根据公告&#xff0c;该项目实施方式为与权利主体签订搬迁补偿协议&#xff0c;补偿方式为产权置换和货币补偿相结合&#xff0c;已完成100%签约&#xff0…

【Linux】Nginx编译安装及系统服务添加

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 Nginx 一、关于 NginxNginx和Apache的差异Apache的优势Nginx的优势 二. 编译安装Nginx服务1.关闭防火墙2.安装依赖包3.创建运行用户、组4.编译安装Nginx5.检查、启动、重启、…

mac电脑git clone项目时报错证书过期和权限被拒绝

mac电脑使用git clone命令克隆项目时&#xff0c;一开始一直提示证书过期 SSL certificate problem: certificate has expired 执行以下代码关掉验证后&#xff0c;解决了这个问题 找到git目录 Git\git-cmd输入命令跳转到bin目录&#xff0c;cd bin输入命令运行git.exe执行关…

2023网安164道面试题(附答案)

最近有不少小伙伴跑来咨询&#xff1a; 想找网络安全工作&#xff0c;应该要怎么进行技术面试准备&#xff1f;工作不到 2 年&#xff0c;想跳槽看下机会&#xff0c;有没有相关的面试题呢&#xff1f; 为了更好地帮助大家高薪就业&#xff0c;今天就给大家分享两份网络安全工…

回归模型评价指标R2_score

搞清楚R2_score计算之前&#xff0c;我们还需要了解几个统计学概念。 若用 y i y_i yi​表示真实的观测值&#xff0c;用 y ˉ \bar{y} yˉ​表示真实观测值的平均值&#xff0c;用 y i ^ \hat{y_i} yi​^​表示预测值,则&#xff1a; 回归平方和&#xff1a;SSR 即估计值与…

chatgpt赋能python:Python后退对SEO的影响

Python后退对SEO的影响 Python作为一种流行的编程语言&#xff0c;在各种应用场景中都有着广泛的应用。但是&#xff0c;对于一些需要考虑SEO优化的网站来说&#xff0c;Python后退往往被认为是一个不利因素。那么&#xff0c;Python后退对SEO究竟有什么影响&#xff0c;我们来…