ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

HotFixHook & 原理与实现(2)

2021-12-21 17:59:58  阅读:153  来源: 互联网

标签:函数 实现 HotFixHook HOOK 原理 InlineHook 替换 字节


图片

HotFixHook也可以称为热补丁,这种HOOK方法本质上与InlineHook没有什么区别,但是它的效率更高,之所以这样,是因为HotFix的指令替换原理与Inline不同。InlineHook因为占用了函数头至少5个字节的空间,所以这种方式是影响函数正常运行的,如果需要在HOOK函数中调用原有的执行流程,那么就必须在调用原有流程之前卸载掉HOOK,也就是将被替换的字节码还原。而当退出之前如果想要继续接管这个函数,那么又需要将HOOK代码再次替换掉。那么一来二去,每次调用HOOK函数都需要摘一次挂一次HOOK,造成了很大的资源浪费,导致效率降低。而HotFix采取了另外的替换思路。例如说MessageBoxA原有的函数实现是下图这样的:

如果是InlineHook,那么就会直接替换5个字节,变成下图这样:

而HotFixHook采取另外的思路,因为根据上面的第一张图可以发现,函数头的位置是8BFF,也就是mov edi,edi,这种代码本身在函数中并没有起到任何作用,也就说,即使破坏了这句硬编码,但是只要从函数地址加二的位置上开始执行,依然不影响函数的正常功能,也因此,我们可以将这两个字节替换成EB F9,也就是一个短跳指令,如下图:

此时我们就可以在75E034CB的位置往下数,此处地址距离函数头正好有5个字节的空间,那么我们就可以将JMP ADDRESS的指令放到这5个字节里。完成流程劫持的目的,并且,如果我们需要调用原始函数,只需要跳过短跳即可。修改完成后如下图:

下面,我们采用MessageBoxA的Hook作为例子,实际体验一下HotFixHook的实现方式。

首先,我们需要一个目标程序,代码如下:

然后我们来看一下HOOK后的效果:

正常情况下:

HOOK后:

接下来,我们将使用代码实现HotFixHook,我这里采用的操作系统是Windows 10 20H2(19042.1288),集成开发环境采用的是Visual Studio 2017。

   

标签:函数,实现,HotFixHook,HOOK,原理,InlineHook,替换,字节
来源: https://blog.csdn.net/m0_64973256/article/details/122069945

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有