「windows平台」IATHook&原理与实现(4)

网友投稿 1208 2022-09-16

「windows平台」IATHook&原理与实现(4)

「windows平台」IATHook&原理与实现(4)

作者 | 榴莲​

编辑 | 楌橪

IAT(Import Address Table) HOOK与我们以往学习过的HOOK有着较大的区别。无论是InlineHook还是HotFixHook,都是基于指令的修改,劫持流程来实现HOOK的。而IATHOOK则是采取另一种劫持思路。这里就不得不提到一个Windows系统的文件格式,PE(Portable Executable)文件格式。

那么以MessageBoxA为例,我们实际上来体验一下IATHOOK的实现方式。

我这里采用的操作系统是Windows 10 20H2(19042.1288),集成开发环境采用的是Visual Studio 2017。那么我们先来创建一个DLL项目。步骤如下:

1.选择新建项目

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

4:配置

4.1 选择属性

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

4.3 修改预编译头,选择应用

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

7.   然后我们还需要一个用来替换原始函数的HOOK函数,这里的内容可以任意处理,我这里只是修改参数后调用原函数,修改函数后,无论原来的内容是什么,都会替换成rkvir。

8.   接下来,我们就需要编写HOOK函数了,首先获取函数原始地址,并且解析PE格式,获取导入表。这里的映像地址通过GetModuleHandle(NULL)来进行获取。

9.   然后获取并且遍历导入地址表,找到我们的目标函数地址进行替换

10.接着在DLL_PROCESS_ATTACH里添加IATHOOK的调用。

11. 生成文件

12.取出文件到桌面或其他位置

13.测试HOOK效果

13.1 首先写一个目标程序,代码如下

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

正常情况下:

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

关于作者

作者:rkvir(榴莲老师)

简介:曾任某安全企业技术总监;看雪讲师;曾任职国内多家大型安全公司;参与*2国家级安全项目

擅长:C/C++/Python/x86/x64汇编/系统原理&

研究方向:二进制LD/FUZZ/Windows内核安全/内网GF

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Win11无需工具系统激活
下一篇:不要把异常当做业务逻辑,这性能可能你无法承受
相关文章

 发表评论

暂时没有评论,来抢沙发吧~