
作者 | 榴莲
编辑 | 楌橪

InlineHook又称为内联Hook,正常的API函数调用流程应该是由调用者(进程)通过函数名去调用已加载动态链接库中的导出函数。那么InlineHook的流程一般是在被调用API的头部,插入插入跳转指令的方式,劫持函数执行流程。

那么,我们可以在头部做出如下修改,进而实现HOOK:

上图中的12345678就代指的是我们自己的函数,通过这种方法劫持到我们的流程中执行。下面,我们采用MessageBoxA的Hook作为例子,实际体验一下InlineHook的实现方式。
我这里采用的操作系统是Windows 10 20H2(19042.1288),集成开发环境采用的是Visual Studio 2017。那么我们先来创建一个DLL项目。步骤如下:

2:选择Windows桌面->动态链接库(DLL),点击确定

3:注释#include “pch.h”,添加#include 。删除framework.h、pch.h以及pch.cpp文件。


4.2 修改运行库以及Spectre缓解,选择应用


5. 在每一个分支中,添加break,防止DLL注入失败。





10. 在MessageBoxA的函数名上F12,就可以看到函数原型

11. 然后赋值出来,修改函数名,实现自己的函数,用来劫持后执行

12. 在DLL_PROCESS_ATTACH添加变量的初始化,以及HOOK函数的调用。

13. 在DLL_PROCESS_DETACH中添加卸载HOOK函数




16.2 使用注入器(自行编写或网上下载,这里我用的是自己写的)将我们生成的模块注入到目标进程中。


到了这里,我们就完成了整个InlineHook的代码编写。