探索flutter框架开发的app在移动应用市场的潜力与挑战
1208
2022-09-16
「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
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~